<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>ImportExportTicket</Name>
    <Version>6.4.1</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-05-04 11:02:42" Version="6.4.1">- Rename the package to RotherOSS-ImportExportTicketZnuny
- Explicitly mention Znuny in the description.
- Set Version to 0.0.0 as the version is managed by OPMS
- Avoid layout glitch with long German translation
- Added the layout module for DateTime input fields
- Backport the config file
- Change framework version and references to OTOBO in documentation
- Remove customized Kernel/System/ImportExport.pm
- Adapt .sopm file to Znuny 6.4.5
- Add a .gitignore file
- Remove the inadvertently added file .DS_Store
- Translated using Weblate (German)
- Add documentation.
- Add hint to LegacySystemIDSupport to documentation.
- Issue #19: add IsExportComplete()
- Issue #18: avoid infinit loop when exporting without chunking
- Issue #17: Use the default value 0 for the ChunkSize
- Issue #17: fix the name of the backend object in the POD
- Issue #17: fix ObjectDependencies
- Issue #17: tidying, remove redundant module loading
- Add state to the mappinglist.
- Updated copyright year.
- Updated package via pp script.
- Removed documentation.yml file.
- Added Translatable statements to attribute configurations.
- Change framework to 11.0.x again.
- Issue #14: require the framework version 11.0.6
- Issue #14: remove the console commands
- Add new translation and documentation.
- Issue #10: actually pass the large limit to TicketSearch()
- Issue #12: fiddle with the status
- Issue #12: add support for the SkipExistingTickets import filter
- Issue #12: do not import articles if the corresponding ticket was skipped
- Issue #12: some tidying
- Issue #10: workaround for the default limit in TicketSearch()
- Issue #10: tidying and enhances code comments
- Switch date and time related filters around
- Saner ordering of data export filters
- Group the article related options together
- Update only tickets of a specific user
- Tidying: use the variable $LogObject
- Add comment, that search by owner or responsible is not possible
- more rigorous check of the three optional features
- Avoid a warning about an undefined value
- Tidying: replace 'if !' with 'unless'
- Revert &quot;Fix the search parameters for the ticket search&quot;
- Fix the search parameters for the ticket search
- Allow '-' in the prefix
- Pass correct parameter to TIcketIDLookup()
- Avoid warinings about $Ticket{TicketID}
- Tidying, add some code comments
- Sync with changes on OTOBO 11.1.x
- Change some otobo.de to otobo.io
- Set version to 0.0.0, in order to satisfy OPMS
- First stab at backporting from OTOBO 11.1.x
- Re-added lost Validation sub import.
- Added ExternalSource param to correctly handle import values for reference dynamic fields.
- Removed ImportExport as required package because it was included into core with rel-11_0. Updated framework version in documentation.
- Added comment.
- Updated sopm file.
- Did some smaller alignments with ConfigItem ObjectBackend.
- Fix perl.
- Owner required; Skip tickets if articles are on same line; Articles have CreateTime attribute;
- Try to add a list to the doc.
- Add usage to the doc.
- Remove leftover code.
- Multiselect treatment and utf-8 encoding.
- Several fixes.
- Keep TN if given.
- Add creation date import.
- Fix Ticket(Number)IDRelation.
- Fix various stuff.
- Several fixes. Links not working yet, multiselect fields temporarily hardcoded.
- Tidied.
- Fix ticket data assignment for separate articles. Add value maps.
- First stub.
Ported ImportExportTicket back to Znuny 6.4.5. The port is based on the latest version of the package for OTOBO 11.0.x and on the files integrated in OTOBO 11.1.x.</ChangeLog>
    <Description Lang="en">Ticket backend for the ImportExport module in Znuny installations.</Description>
    <Framework Minimum="6.4.5">6.4.x</Framework>
    <BuildCommitID>933ba5d88a5ced5032bd45dac945853af2b0cca2</BuildCommitID>
    <BuildDate>2026-05-04 11:02:45</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Kernel/Config/Files/XML/ImportExportTicket.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkFwcGxpY2F0aW9uIj4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZFJlZ2lzdHJhdGlvbiMjI1RpY2tldCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5PYmplY3QgYmFja2VuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgaW1wb3J0L2V4cG9ydCBtb2R1bGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+VGlja2V0PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpTeW5jaHJvbml6ZVdpdGhGb3JlaWduREIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SWYgYWN0aXZhdGVkIGFkZGl0aW9uYWwgZGF0YSBzdWNoIGFzIHRoZSBoaXN0b3J5IGFuZCBsaW5rcyB3aWxsIGJlIHJlYWQgZnJvbSBhIGZvcmVpZ24gREIgY29udGFpbmluZyB0aGUgZXhwb3J0ZWQgdGlja2V0cyBhbmQgYWRkZWQgdG8gdGhlIGltcG9ydGVkIHRpY2tldHMgb24gdGhpcyBzeXN0ZW0uIFRoaXMgaXMgb25seSBhdmFpbGFibGUgZm9yIGNyZWF0ZWQsIG5vdCBmb3IgdXBkYXRlZCB0aWNrZXRzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGF0YWJhc2VEU04iPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGF0YWJhc2VVc2VyIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRhdGFiYXNlUHciPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAwMS1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+UXVldWU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT3RoZXJTeXN0ZW1NaXNjIj5NaXNjPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMDItQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPkFydGljbGVfRHluYW1pY0ZpZWxkX05vTXVsdGk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT3RoZXJTeXN0ZW01Ij43PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMDMtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDA0LUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAwNS1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMDYtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDA3LUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAwOC1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMDktQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDEwLUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAxMS1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMTItQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDEzLUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAxNC1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMTUtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDE2LUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAxNy1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMTgtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDE5LUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAyMC1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMjEtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDIyLUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAyMy1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMjQtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDI1LUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KPC9vdHJzX2NvbmZpZz4K</File>
        <File Location="Kernel/System/ImportExport/ObjectBackend/Ticket.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjUgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDsKCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgbmFtZXNwYWNlOjphdXRvY2xlYW47CnVzZSB1dGY4OwoKIyBjb3JlIG1vZHVsZXMKdXNlIEVuY29kZTsKdXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0IGRlY29kZV9iYXNlNjQpOwoKIyBDUEFOIG1vZHVsZXMKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpMYW5ndWFnZSAgICAgICAgICAgICAgcXcoVHJhbnNsYXRhYmxlKTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KElzQXJyYXlSZWZXaXRoRGF0YSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvY2snLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U0xBJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN0YXRlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VHlwZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlVzZXInLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldCAtIGltcG9ydC9leHBvcnQgYmFja2VuZCBmb3IgdGlja2V0cwoKPWhlYWQxIERFU0NSSVBUSU9OCgpBbGwgZnVuY3Rpb25zIHRvIGltcG9ydCBhbmQgZXhwb3J0IHRpY2tldHMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwoKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIENoYW5naW5nIHRoZSBjb25maWcKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICMgRmlkZGxpbmcgd2l0aCBTeXNDb25maWcgaW4gdGhlIGNvbnN0cnVjdG9yIGlzIGEgYml0IGhhY2tpc2guCiAgICAjIEl0IHNob3VsZCBiZSBmaW5lIGFzIHRoZSBJbXBvcnRFeHBvcnQgb2JqZWN0IGlzIG9ubHkgdXNlZCBpbiBjb25zb2xlIGNvbW1hbmRzCiAgICAjIGFuZCBpbiBhIHNpbmdsZSBmcm9udGVuZCBtb2R1bGUuIFRoZSBjaGFuZ2VkIGNvbmZpZyBvYmplY3QgaW4gdGhlIGZyb250ZW5kIG1vZHVsZQogICAgIyBpcyBmaW5lIGFzIHRoZSBjb25maWcgb2JqZWN0IGlzIHJlY3JlYXRlZCBmb3IgZWFjaCByZXF1ZXN0LgogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdTZW5kbWFpbE1vZHVsZScsCiAgICAgICAgVmFsdWUgPT4gJ0tlcm5lbDo6U3lzdGVtOjpFbWFpbDo6RG9Ob3RTZW5kRW1haWwnLAogICAgKTsKICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICAgICAgVmFsdWUgPT4gMCwKICAgICk7CgogICAgIyB0dXJuIG9mZiBzb21lIGV2ZW50IGhhbmRsZXJzCiAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ1RpY2tldDo6RXZlbnRNb2R1bGVQb3N0IyMjOTUwLVRpY2tldEFwcG9pbnRtZW50cycsCiAgICAgICAgVmFsdWUgPT4gdW5kZWYsCiAgICApOwogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdUaWNrZXQ6OkV2ZW50TW9kdWxlUG9zdCMjIzgwMDAtR2VuZXJpY0ludGVyZmFjZScsCiAgICAgICAgVmFsdWUgPT4gdW5kZWYsCiAgICApOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgcmV0dXJuIGJsZXNzIHsKICAgICAgICBUaWNrZXRJRFJlbGF0aW9uICAgICAgID0+IHt9LAogICAgICAgIFRpY2tldE51bWJlcklEUmVsYXRpb24gPT4ge30sCiAgICAgICAgQWxsRm91bmRUaWNrZXRJRHMgICAgICA9PiB1bmRlZiwgICAgIyB3aWxsIGJlIGluaXRpYWxpemVkIGluIGZpcnN0IGNhbGwgdG8gRXhwb3J0RGF0YUdldCgpCiAgICAgICAgTGFzdEhhbmRsZWRJbmRleCAgICAgICA9PiAtMSwgICAgICAgIyB1c2VkIGZvciBjaHVua2luZwogICAgICAgIENodW5raW5nRmluaXNoZWQgICAgICAgPT4gIDEsICAgICAgICMgaW5kaWNhdGUgdGhhdCBjaHVua2luZyBpcyBmaW5pc2hlZCwgd2hpY2ggaXMga2luZCBvZiB0cnVlIHdoZW4gbm8gY2h1bmtpbmcgaXMgcmVxdWVzdGVkCiAgICB9LCAkVHlwZTsKfQoKPWhlYWQyIE9iamVjdEF0dHJpYnV0ZXNHZXQoKQoKZ2V0IHRoZSBvYmplY3QgYXR0cmlidXRlcyBvZiBhbiBvYmplY3QgYXMgYSByZWYgdG8gYW4gYXJyYXkgb2YgaGFzaCByZWZlcmVuY2VzCgogICAgbXkgJEF0dHJpYnV0ZXMgPSAkT2JqZWN0QmFja2VuZC0+T2JqZWN0QXR0cmlidXRlc0dldCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0QXR0cmlidXRlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdAogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15IEBBdHRyaWJ1dGVzOyAgICAjIHdpbGwgYmUgcmV0dXJuZWQKCiAgICAjIHF1ZXVlCiAgICB7CiAgICAgICAgbXkgJVF1ZXVlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZUxpc3Q7CiAgICAgICAgcHVzaCBAQXR0cmlidXRlcywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJ1F1ZXVlSUQnLAogICAgICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdEZWZhdWx0IFF1ZXVlJyksCiAgICAgICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgPT4gXCVRdWV1ZUxpc3QsCiAgICAgICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfTsKICAgIH0KCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpUeXBlJykgKSB7CiAgICAgICAgbXkgJVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKS0+VHlwZUxpc3QoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAQXR0cmlidXRlcywgewogICAgICAgICAgICBLZXkgICA9PiAnVHlwZUlEJywKICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdEZWZhdWx0IFR5cGUnKSwKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiBcJVR5cGVMaXN0IHx8IHt9LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgfSwKICAgICAgICB9OwogICAgfQoKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSApIHsKICAgICAgICBteSAlU2VydmljZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAQXR0cmlidXRlcywgewogICAgICAgICAgICBLZXkgICA9PiAnU2VydmljZUlEJywKICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdEZWZhdWx0IFNlcnZpY2UnKSwKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlU2VydmljZUxpc3QgfHwge30sCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMCwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKCiAgICAgICAgbXkgJVNMQUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQEF0dHJpYnV0ZXMsIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1NMQUlEJywKICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdEZWZhdWx0IFNMQScpLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVTTEFMaXN0IHx8IHt9LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDAsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH07CiAgICB9CgogICAgIyBTdGF0ZQogICAgewogICAgICAgIG15ICVTdGF0ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdGUnKS0+U3RhdGVMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBBdHRyaWJ1dGVzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnU3RhdGVJRCcsCiAgICAgICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ0RlZmF1bHQgc3RhdGUnKSwKICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiBcJVN0YXRlTGlzdCwKICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9OwogICAgfQoKICAgICMgUHJpb3JpdHkKICAgIHsKICAgICAgICBteSAlUHJpb3JpdHlMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5JyktPlByaW9yaXR5TGlzdCgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBBdHRyaWJ1dGVzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnUHJpb3JpdHlJRCcsCiAgICAgICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ0RlZmF1bHQgcHJpb3JpdHknKSwKICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiBcJVByaW9yaXR5TGlzdCwKICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9OwogICAgfQoKICAgICMgT3duZXIgYW5kIFJlc3BvbnNpYmxlCiAgICB7CiAgICAgICAgbXkgJVVzZXJMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxpc3Q7CgogICAgICAgIHB1c2ggQEF0dHJpYnV0ZXMsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICdPd25lcklEJywKICAgICAgICAgICAgICAgIE5hbWUgID0+IFRyYW5zbGF0YWJsZSgnRGVmYXVsdCBvd25lcicpLAogICAgICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlVXNlckxpc3QsCiAgICAgICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfTsKCiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6UmVzcG9uc2libGUnKSApIHsKICAgICAgICAgICAgcHVzaCBAQXR0cmlidXRlcywKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICA9PiAnUmVzcG9uc2libGVJRCcsCiAgICAgICAgICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdEZWZhdWx0IHJlc3BvbnNpYmxlJyksCiAgICAgICAgICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVVzZXJMaXN0LAogICAgICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfQoKICAgIHsKICAgICAgICBteSAlTG9ja0xpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9jaycpLT5Mb2NrTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAQXR0cmlidXRlcywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJ0xvY2tJRCcsCiAgICAgICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ0RlZmF1bHQgbG9jaycpLAogICAgICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlTG9ja0xpc3QsCiAgICAgICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfTsKICAgIH0KCiAgICBwdXNoIEBBdHRyaWJ1dGVzLAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0N1c3RvbWVySUQnLAogICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ0RlZmF1bHQgQ3VzdG9tZXJJRCcpLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgUmVxdWlyZWQgID0+IDAsCiAgICAgICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMjUwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ3VzdG9tZXJVc2VySUQnLAogICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ0RlZmF1bHQgQ3VzdG9tZXJVc2VySUQnKSwKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIFJlcXVpcmVkICA9PiAwLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDI1MCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0FyY2hpdmVGbGFnJywKICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdEZWZhdWx0IEFyY2hpdmVGbGFnJyksCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7IG1hcCB7ICRfID0+ICRfIH0gcXcoIHkgbiApIH0sCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICAgICAgVmFsdWVEZWZhdWx0ID0+ICduJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1N1YmplY3QnLAogICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ0RlZmF1bHQgc3ViamVjdCcpLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDAsCiAgICAgICAgICAgICAgICBTaXplICAgICAgICAgPT4gNTAsCiAgICAgICAgICAgICAgICBNYXhMZW5ndGggICAgPT4gMjUwLAogICAgICAgICAgICAgICAgVmFsdWVEZWZhdWx0ID0+ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0SW1wb3J0OjpEZWZhdWx0U3ViamVjdCcpLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQm9keScsCiAgICAgICAgICAgIE5hbWUgID0+IFRyYW5zbGF0YWJsZSgnRGVmYXVsdCBib2R5JyksCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMCwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgIE1heExlbmd0aCAgICA9PiAyNTAsCiAgICAgICAgICAgICAgICBWYWx1ZURlZmF1bHQgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXRJbXBvcnQ6OkRlZmF1bHRCb2R5JyksCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdTZW5kZXJUeXBlJywKICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdEZWZhdWx0IHNlbmRlciB0eXBlJyksCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBhZ2VudCAgICA9PiAnYWdlbnQnLAogICAgICAgICAgICAgICAgICAgIGN1c3RvbWVyID0+ICdjdXN0b21lcicsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgPT4gMSwKICAgICAgICAgICAgICAgIENsYXNzICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnSXNWaXNpYmxlVG9DdXN0b21lcicsCiAgICAgICAgICAgIE5hbWUgID0+IFRyYW5zbGF0YWJsZSgnRGVmYXVsdCBpcyB2aXNpYmxlIHRvIGN1c3RvbWVyJyksCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0NoZWNrYm94JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0VtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMnLAogICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ0VtcHR5IGZpZWxkcyBtZWFuIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0JyksCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0NoZWNrYm94JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1NraXBFeGlzdGluZ1RpY2tldHMnLAogICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ0RvIG5vdCB1cGRhdGUgZXhpc3RpbmcgdGlja2V0cycpLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdDaGVja2JveCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdBbGxvd2VkT3duZXJJblRhcmdldCcsCiAgICAgICAgICAgIE5hbWUgID0+IFRyYW5zbGF0YWJsZSgnT25seSB1cGRhdGUgdGlja2V0cyBvZiB0aGlzIHVzZXIgaW4gdGhlIHRhcmdldCBzeXN0ZW0nKSwKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIFJlcXVpcmVkICA9PiAwLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDE5MSwgICAgICAjIGxlbmd0aCBvZiB1c2Vycy5sb2dpbiBmaWVsZCBpbiB0aGUgZGF0YWJhc2UKICAgICAgICAgICAgfSwKICAgICAgICB9OwoKICAgICMgYXJ0aWNsZSByZWxhdGVkIG9wdGlvbnMKICAgIHB1c2ggQEF0dHJpYnV0ZXMsCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnSW5jbHVkZUFydGljbGVzJywKICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdJbXBvcnQvRXhwb3J0IGFydGljbGVzJyksCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0NoZWNrYm94JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVCYWNrZW5kJywKICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdEZWZhdWx0IEJhY2tlbmQnKSwKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsgbWFwIHsgJF8gPT4gJF8gfSBxdyggRW1haWwgUGhvbmUgSW50ZXJuYWwgKSB9LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgICAgIFZhbHVlRGVmYXVsdCA9PiAnbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdBcnRpY2xlU2VwYXJhdGVMaW5lcycsCiAgICAgICAgICAgIE5hbWUgID0+IFRyYW5zbGF0YWJsZSgnU3RvcmUgYXJ0aWNsZXMgb24gc2VwYXJhdGUgbGluZXMgaW5kaWNhdGVkIGJ5IGEgYmxhbmsgZmlyc3QgZW50cnknKSwKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnQ2hlY2tib3gnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnSW5jbHVkZUF0dGFjaG1lbnRzJywKICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdJbXBvcnQvRXhwb3J0IGF0dGFjaG1lbnRzIChhcyB0aGUgbGFzdCBlbnRyaWVzIHBlciBsaW5lKScpLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdDaGVja2JveCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKCiAgICByZXR1cm4gXEBBdHRyaWJ1dGVzOwp9Cgo9aGVhZDIgTWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQoKQoKZ2V0cyB0aGUgbWFwcGluZyBhdHRyaWJ1dGVzIG9mIGFuIG9iamVjdCBhcyByZWZlcmVuY2UgdG8gYW4gYXJyYXkgb2YgaGFzaCByZWZlcmVuY2VzLgoKICAgIG15ICRBdHRyaWJ1dGVzID0gJE9iamVjdEJhY2tlbmQtPk1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgICMgVE9ETwogICAgbXkgJEF0dHJpYnV0ZXMgPSBbCiAgICAgICAgewogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBEYXRhID0+IFsKICAgICAgICAgICAgICAgICAgICBbLi4uXQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgXTsKCj1jdXQKCnN1YiBNYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICRJbXBvcnRFeHBvcnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0Jyk7CgogICAgIyBnZXQgb2JqZWN0IGRhdGEKICAgIG15ICRPYmplY3REYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+T2JqZWN0RGF0YUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gW10gdW5sZXNzICRPYmplY3REYXRhOwogICAgcmV0dXJuIFtdIHVubGVzcyByZWYgJE9iamVjdERhdGEgZXEgJ0hBU0gnOwoKICAgICMgdGhlIHBvc3NpYmxlIG1hcHBpbmdzIGRlcGVuZCBvbiB0aGUgYWN0aXZhdGVkIGZlYXR1cmUgc2V0CiAgICBteSAkQ29uZmlnT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSBAVHlwZUVsZW1lbnRzICAgICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpUeXBlJykgICAgICAgID8gcXcoIFR5cGUgVHlwZUlEICkgICAgICAgICAgICAgICAgIDogKCk7CiAgICBteSBAU2VydmljZUVsZW1lbnRzICAgICA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpTZXJ2aWNlJykgICAgID8gcXcoIFNlcnZpY2UgU2VydmljZUlEIFNMQSBTTEFJRCApIDogKCk7CiAgICBteSBAUmVzcG9uc2libGVFbGVtZW50cyA9ICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpSZXNwb25zaWJsZScpID8gcXcoIFJlc3BvbnNpYmxlIFJlc3BvbnNpYmxlSUQgKSAgIDogKCk7CiAgICBteSBARWxlbWVudExpc3QgPQogICAgICAgIG1hcCB7IHsgS2V5ID0+ICRfLCBWYWx1ZSA9PiAkXyB9IH0KICAgICAgICAoCiAgICAgICAgICAgIHF3KCBUaWNrZXRJRCBUaWNrZXROdW1iZXIgVGl0bGUgKSwKICAgICAgICAgICAgQFR5cGVFbGVtZW50cywKICAgICAgICAgICAgcXcoIFF1ZXVlIFF1ZXVlSUQgKSwKICAgICAgICAgICAgQFNlcnZpY2VFbGVtZW50cywKICAgICAgICAgICAgcXcoIFN0YXRlIFN0YXRlSUQgUHJpb3JpdHkgUHJpb3JpdHlJRCBDdXN0b21lcklEIEN1c3RvbWVyVXNlcklEIE93bmVyIE93bmVySUQgTG9jayBMb2NrSUQgKSwKICAgICAgICAgICAgQFJlc3BvbnNpYmxlRWxlbWVudHMsCiAgICAgICAgICAgIHF3KCBBcmNoaXZlRmxhZyBDcmVhdGVkICkKICAgICAgICApOwoKICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CgogICAgIyBjb2x1bW5zIGZvciBkeW5hbWljIGZpZWxkcwogICAgewogICAgICAgIG15ICREeW5GaWVsZExpc3QgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0KAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICdUaWNrZXQnLAogICAgICAgICAgICBSZXN1bHRUeXBlID0+ICdIQVNIJywKICAgICAgICApOwogICAgICAgIHB1c2ggQEVsZW1lbnRMaXN0LAogICAgICAgICAgICBtYXAgeyB7IEtleSA9PiAiRHluYW1pY0ZpZWxkXyRfIiwgVmFsdWUgPT4gIkR5bmFtaWNGaWVsZF8kXyIgfSB9CiAgICAgICAgICAgIHNvcnQKICAgICAgICAgICAgdmFsdWVzICREeW5GaWVsZExpc3QtPiUqOwogICAgfQoKICAgIGlmICggJE9iamVjdERhdGEtPntJbmNsdWRlQXJ0aWNsZXN9ICkgewogICAgICAgIGlmICggJE9iamVjdERhdGEtPntBcnRpY2xlU2VwYXJhdGVMaW5lc30gKSB7CiAgICAgICAgICAgIHB1c2ggQEVsZW1lbnRMaXN0LCB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnQXJ0aWNsZV9UaWNrZXRJRCcsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnQXJ0aWNsZV9UaWNrZXRJRCcsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAjIGNvbHVtbnMgZm9yIGFydGljbGVzCiAgICAgICAgcHVzaCBARWxlbWVudExpc3QsIG1hcCB7IHsgS2V5ID0+ICJBcnRpY2xlXyRfIiwgVmFsdWUgPT4gIkFydGljbGVfJF8iIH0gfQogICAgICAgICAgICBxdyggQXJ0aWNsZUlEIEFydGljbGVCYWNrZW5kIEZyb20gVG8gQ2MgQmNjIFN1YmplY3QgQm9keSBTZW5kZXJUeXBlIElzVmlzaWJsZUZvckN1c3RvbWVyCiAgICAgICAgICAgIE1lc3NhZ2VJRCBSZXBseVRvIEluUmVwbHlUbyBSZWZlcmVuY2VzIENoYXJzZXQgTWltZVR5cGUgUGxhaW5FbWFpbCBDcmVhdGVUaW1lICk7CgogICAgICAgICMgY29sdW1ucyBmb3IgYXJ0aWNsZSBkeW5hbWljIGZpZWxkcwogICAgICAgIG15ICREeW5GaWVsZExpc3QgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0KAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICdBcnRpY2xlJywKICAgICAgICAgICAgUmVzdWx0VHlwZSA9PiAnSEFTSCcsCiAgICAgICAgKTsKICAgICAgICBwdXNoIEBFbGVtZW50TGlzdCwKICAgICAgICAgICAgbWFwIHsgeyBLZXkgPT4gIkFydGljbGVfRHluYW1pY0ZpZWxkXyRfIiwgVmFsdWUgPT4gIkFydGljbGVfRHluYW1pY0ZpZWxkXyRfIiB9IH0KICAgICAgICAgICAgc29ydAogICAgICAgICAgICB2YWx1ZXMgJER5bkZpZWxkTGlzdC0+JSo7CiAgICB9CgogICAgcmV0dXJuIFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdLZXknLAogICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ0tleScpLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXEBFbGVtZW50TGlzdCwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0lkZW50aWZpZXInLAogICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ0lkZW50aWZpZXInKSwKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnQ2hlY2tib3gnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICBdOwp9Cgo9aGVhZDIgU2VhcmNoQXR0cmlidXRlc0dldCgpCgpnZXQgdGhlIHNlYXJjaCBvYmplY3QgYXR0cmlidXRlcyBvZiBhbiBvYmplY3QgYXMgYXJyYXkvaGFzaCByZWZlcmVuY2UKCiAgICBteSAkQXR0cmlidXRlTGlzdCA9ICRPYmplY3RCYWNrZW5kLT5TZWFyY2hBdHRyaWJ1dGVzR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7CgoKPWN1dAoKc3ViIFNlYXJjaEF0dHJpYnV0ZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjICBub3RlIHRoYXQgdGhlcmUgaXMgbm8gc2VhcmNoIGJ5IG93bmVyIG9yIHJlc3BvbnNpYmxlCgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBUT0RPOiB3aHkgaXMgdGhlIE9iamVjdERhdGEgbmVlZGVkIGhlcmU/CiAgICAjIGdldCBvYmplY3QgZGF0YQogICAgbXkgJEltcG9ydEV4cG9ydE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKTsKICAgIG15ICRPYmplY3REYXRhICAgICAgICAgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5PYmplY3REYXRhR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgIHJldHVybiBbXSB1bmxlc3MgJE9iamVjdERhdGE7CiAgICByZXR1cm4gW10gdW5sZXNzIHJlZiAkT2JqZWN0RGF0YSBlcSAnSEFTSCc7CgogICAgbXkgJVF1ZXVlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZUxpc3QoKTsKCiAgICBteSAlU3RhdGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRlJyktPlN0YXRlTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgbXkgJVByaW9yaXR5TGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScpLT5Qcmlvcml0eUxpc3QoCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CgogICAgbXkgQEF0dHJpYnV0ZXMgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnUXVldWVJRHMnLAogICAgICAgICAgICBOYW1lICA9PiAnUXVldWUnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVRdWV1ZUxpc3QsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMCwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBTaXplICAgICAgICAgPT4gNSwKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICApOwoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlR5cGUnKSApIHsKICAgICAgICBteSAlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpLT5UeXBlTGlzdCgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBBdHRyaWJ1dGVzLCB7CiAgICAgICAgICAgIEtleSAgID0+ICdUeXBlSURzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1R5cGUnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVUeXBlTGlzdCB8fCB7fSwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAwLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiA1LAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKICAgIH0KCiAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpTZXJ2aWNlJykgKSB7CiAgICAgICAgbXkgJVNlcnZpY2VMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQEF0dHJpYnV0ZXMsIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1NlcnZpY2VJRHMnLAogICAgICAgICAgICBOYW1lICA9PiAnU2VydmljZScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVNlcnZpY2VMaXN0IHx8IHt9LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDAsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgICAgID0+IDUsCiAgICAgICAgICAgICAgICBNdWx0aXBsZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgfSwKICAgICAgICB9OwoKICAgICAgICBteSAlU0xBTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKS0+U0xBTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAQXR0cmlidXRlcywgewogICAgICAgICAgICBLZXkgICA9PiAnU0xBSURzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1NMQScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVNMQUxpc3QgfHwge30sCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMCwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBTaXplICAgICAgICAgPT4gNSwKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH07CiAgICB9CgogICAgcHVzaCBAQXR0cmlidXRlcywKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdTdGF0ZUlEcycsCiAgICAgICAgICAgIE5hbWUgID0+ICdTdGF0ZScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVN0YXRlTGlzdCwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAwLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiA1LAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdQcmlvcml0eUlEcycsCiAgICAgICAgICAgIE5hbWUgID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVByaW9yaXR5TGlzdCwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAwLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMSwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiA1LAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdDdXN0b21lcklEJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0N1c3RvbWVySUQnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDI1MCwKICAgICAgICAgICAgfSwKICAgICAgICB9OwoKICAgICMgRmlsdGVyIGJ5IGNyZWF0ZSBvciBjaGFuZ2UgdGltZSwgc3BlY2lmeSBpbiBtaW51dGVzCiAgICB7CiAgICAgICAgbXkgQEtleUFuZE5hbWVzID0gKAogICAgICAgICAgICBbIFRpY2tldENyZWF0ZVRpbWVOZXdlck1pbnV0ZXMgPT4gJ1RpY2tldCBDcmVhdGUgVGltZSAobmV3ZXIpIFttaW5dJyBdLAogICAgICAgICAgICBbIFRpY2tldENyZWF0ZVRpbWVPbGRlck1pbnV0ZXMgPT4gJ1RpY2tldCBDcmVhdGUgVGltZSAob2xkZXIpIFttaW5dJyBdLAogICAgICAgICAgICBbIFRpY2tldENoYW5nZVRpbWVOZXdlck1pbnV0ZXMgPT4gJ1RpY2tldCBDaGFuZ2UgVGltZSAobmV3ZXIpIFttaW5dJyBdLAogICAgICAgICAgICBbIFRpY2tldENoYW5nZVRpbWVPbGRlck1pbnV0ZXMgPT4gJ1RpY2tldCBDaGFuZ2UgVGltZSAob2xkZXIpIFttaW5dJyBdLAogICAgICAgICk7CiAgICAgICAgZm9yIG15ICRBcnJSZWYgKEBLZXlBbmROYW1lcykgewogICAgICAgICAgICBteSAoICRLZXksICROYW1lICkgPSAkQXJyUmVmLT5AKjsKICAgICAgICAgICAgcHVzaCBAQXR0cmlidXRlcywKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBLZXkgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgICAgIE5hbWUgID0+ICROYW1lLAogICAgICAgICAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICA7CiAgICAgICAgfQogICAgfQoKICAgICMgRmlsdGVyIGJ5IGNyZWF0ZSBvciBjaGFuZ2UgdGltZSwgc3BlY2lmeSBieSBkYXRlIGFuZCB0aW1lCiAgICB7CiAgICAgICAgbXkgQEtleUFuZE5hbWVzID0gKAogICAgICAgICAgICBbIFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgICAgID0+ICdUaWNrZXQgQ3JlYXRlIFRpbWUgKGFmdGVyKScgXSwKICAgICAgICAgICAgWyBUaWNrZXRDcmVhdGVUaW1lT2xkZXJEYXRlICAgICA9PiAnVGlja2V0IENyZWF0ZSBUaW1lIChiZWZvcmUpJyBdLAogICAgICAgICAgICBbIFRpY2tldExhc3RDaGFuZ2VUaW1lTmV3ZXJEYXRlID0+ICdUaWNrZXQgTGFzdCBDaGFuZ2UgVGltZSAoYWZ0ZXIpJyBdLAogICAgICAgICAgICBbIFRpY2tldExhc3RDaGFuZ2VUaW1lT2xkZXJEYXRlID0+ICdUaWNrZXQgTGFzdCBDaGFuZ2UgVGltZSAoYmVmb3JlKScgXSwKICAgICAgICApOwogICAgICAgIGZvciBteSAkQXJyUmVmIChAS2V5QW5kTmFtZXMpIHsKICAgICAgICAgICAgbXkgKCAkS2V5LCAkTmFtZSApID0gJEFyclJlZi0+QCo7CiAgICAgICAgICAgIHB1c2ggQEF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ICAgPT4gJEtleSwKICAgICAgICAgICAgICAgICAgICBOYW1lICA9PiAkTmFtZSwKICAgICAgICAgICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgICAgID0+ICdEYXRlVGltZScsCiAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsID0+IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICA7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBcQEF0dHJpYnV0ZXM7Cn0KCj1oZWFkMiBFeHBvcnREYXRhR2V0KCkKCmdldCBleHBvcnQgZGF0YSBhcyBhIHJlZmVyZW5jZSB0byBhbiBhcnJheSBmb3IgYXJyYXkgcmVmZXJlbmNlcywgdGhhdCBpcyBhIEM8MkQtdGFibGU+CgogICAgbXkgJFJvd3MgPSAkT2JqZWN0QmFja2VuZC0+RXhwb3J0RGF0YUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKV2hlbiB0aGUgcGFyYW1ldGVyIEM8Q2h1bmtTaXplPiBpcyBwYXNzZWQgdGhlbiBjaHVua2VkIGV4cG9ydCBtb2RlIGlzIGFzc3VtZWQuCk9uIHRoZSBmaXJzdCBpbnZvY2F0aW9uIHRoZSBjb21wbGV0ZSBzZWFyY2ggcmVzdWx0IGxpc3QgaXMgcmV0cmlldmVkCmFuZCBzdG9yZWQgaW4gdGhlIGluc3RhbmNlLiBUaGVuIHRoZSBkZXRhaWxlZCBkYXRhIGZvciBmaXJzdCBjaHVuayBpcyByZXR1cm5lZC4KRWFjaCBzdWJzZXF1ZW50IGludm9jYXRpb24gb25seSBnZXRzIHRoZSBkZXRhaWxlZCBkYXRhIGZvciB0aGUgbmV4dCBjaHVuay4KCj1jdXQKCnN1YiBFeHBvcnREYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgbXkgJEltcG9ydEV4cG9ydE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKTsKCiAgICAjIGdldCBvYmplY3QgZGF0YQogICAgbXkgJE9iamVjdERhdGEgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5PYmplY3REYXRhR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgb2JqZWN0IGRhdGEKICAgIGlmICggISRPYmplY3REYXRhIHx8IHJlZiAkT2JqZWN0RGF0YSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBvYmplY3QgZGF0YSBmb3VuZCBmb3IgdGhlIHRlbXBsYXRlIGlkICRQYXJhbXtUZW1wbGF0ZUlEfSIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IHRoZSBtYXBwaW5nIGxpc3QKICAgIG15ICRNYXBwaW5nTGlzdCA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdMaXN0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgdGhlIG1hcHBpbmcgbGlzdAogICAgaWYgKCAhJE1hcHBpbmdMaXN0IHx8IHJlZiAkTWFwcGluZ0xpc3QgbmUgJ0FSUkFZJyB8fCAhQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHZhbGlkIG1hcHBpbmcgbGlzdCBmb3VuZCBmb3IgdGhlIHRlbXBsYXRlIGlkICRQYXJhbXtUZW1wbGF0ZUlEfSIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIG1hcHBpbmcgb2JqZWN0IGxpc3QKICAgIG15IEBNYXBwaW5nT2JqZWN0TGlzdDsKICAgIGZvciBteSAkTWFwcGluZ0lEICggQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAjIGdldCBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICAgICAgbXkgJE1hcHBpbmdPYmplY3REYXRhID0gJEltcG9ydEV4cG9ydE9iamVjdC0+TWFwcGluZ09iamVjdERhdGFHZXQoCiAgICAgICAgICAgIE1hcHBpbmdJRCA9PiAkTWFwcGluZ0lELAogICAgICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICAgICAgaWYgKCAhJE1hcHBpbmdPYmplY3REYXRhIHx8IHJlZiAkTWFwcGluZ09iamVjdERhdGEgbmUgJ0hBU0gnICkgewoKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHZhbGlkIG1hcHBpbmcgbGlzdCBmb3VuZCBmb3IgdGhlIHRlbXBsYXRlIGlkICRQYXJhbXtUZW1wbGF0ZUlEfSIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBwdXNoIEBNYXBwaW5nT2JqZWN0TGlzdCwgJE1hcHBpbmdPYmplY3REYXRhOwogICAgfQoKICAgICMgTGlzdCBvZiBJRHMgZm9yIHRpY2tldHMgdGhhdCBhcmUgdG8gYmUgZXhwb3J0ZWQuCiAgICAjIEluIGNodW5rZWQgbW9kZSB0aGlzIGlzIG9ubHkgY2h1bmsuIEluIG5vbi1jaHVua2VkIG1vZGUgdGhlc2UgYXJlIGFsbCByZWxldmFudCBJRHMuCiAgICBteSBAVGlja2V0SURzOwogICAgewogICAgICAgICMgU2VhcmNoIGFsbCBUaWNrZXRfSURzLgogICAgICAgICMgV2hlbiBpbiBjaHVua2VkIG1vZGUgdGhlbiBnZXQgdGhlIGNvbXBsZXRlIGxpc3QgaW4gdGhlIGZpcnN0IGludm9jYXRpb24gYW5kIHN0b3JlIGl0IGFzIGluc3RhbmNlIGRhdGEuCiAgICAgICAgIyBGb3Igc2ltcGxpY2l0aWVzIHNha2UgYXNzdW1lIHRoYXQgdGhlIHRlbXBsYXRlIElEIGRvZXMgbm90IGNoYW5nZSBpbiBzdWJzZXF1ZW50IGNhbGxzLgogICAgICAgIG15ICVUaWNrZXRTZWFyY2hQYXJhbSA9ICgKICAgICAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICggJFBhcmFte0NodW5rU2l6ZX0gLy8gMCApID49IDEgKSB7CgogICAgICAgICAgICAjIGNodW5rZWQgbW9kZSwKICAgICAgICAgICAgJFNlbGYtPntDaHVua2luZ0ZpbmlzaGVkfSA9IDA7CgogICAgICAgICAgICAjIHNlYXJjaCBvbmx5IG9uIHRoZSBmaXJzdCBpbnZvY2F0aW9uCiAgICAgICAgICAgICRTZWxmLT57QWxsRm91bmRUaWNrZXRJRHN9IC8vPSBbICRTZWxmLT5fVGlja2V0U2VhcmNoKCVUaWNrZXRTZWFyY2hQYXJhbSkgXTsKCiAgICAgICAgICAgICMgZG8gdGhlIGNodW5raW5nCiAgICAgICAgICAgIG15ICROZXdMYXN0SGFuZGxlZEluZGV4ID0gJFNlbGYtPntMYXN0SGFuZGxlZEluZGV4fSArICRQYXJhbXtDaHVua1NpemV9OwogICAgICAgICAgICBteSAkRW5kSW5kZXggICAgICAgICAgICA9ICQjeyAkU2VsZi0+e0FsbEZvdW5kVGlja2V0SURzfSB9OwogICAgICAgICAgICBpZiAoICROZXdMYXN0SGFuZGxlZEluZGV4ID49ICRFbmRJbmRleCApIHsKICAgICAgICAgICAgICAgICRTZWxmLT57Q2h1bmtpbmdGaW5pc2hlZH0gPSAxOwogICAgICAgICAgICAgICAgJE5ld0xhc3RIYW5kbGVkSW5kZXggPSAkRW5kSW5kZXg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQFRpY2tldElEcyA9IEB7ICRTZWxmLT57QWxsRm91bmRUaWNrZXRJRHN9IH1bICRTZWxmLT57TGFzdEhhbmRsZWRJbmRleH0gKyAxIC4uICROZXdMYXN0SGFuZGxlZEluZGV4IF07CiAgICAgICAgICAgICRTZWxmLT57TGFzdEhhbmRsZWRJbmRleH0gPSAkTmV3TGFzdEhhbmRsZWRJbmRleDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIEBUaWNrZXRJRHMgPSAkU2VsZi0+X1RpY2tldFNlYXJjaCglVGlja2V0U2VhcmNoUGFyYW0pOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkQXJ0aWNsZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnKTsKCiAgICBteSBARXhwb3J0RGF0YTsKICAgIG15ICVUaWNrZXREYXRhOwoKICAgIG15IEBUaWNrZXRNYXBwaW5nOwogICAgbXkgQEFydGljbGVNYXBwaW5nOwogICAgbXkgJFRpY2tldE1hcHBpbmdMYXN0OwogICAgbXkgJEFydGljbGVNYXBwaW5nTGFzdCA9IDA7ICAgICMgaW4gY2FzZSBvZiBzZXBhcmF0ZSBsaW5lcyBhbiBlbXB0eSBlbnRyeSB3aWxsIHByZWNlZGUgKHRodXMgbm90IC0xKQogICAgbXkgJFN0b3JlUGxhaW5FbWFpbCAgICA9IDA7CgogICAgZm9yIG15ICRpICggMCAuLiAkI01hcHBpbmdPYmplY3RMaXN0ICkgewoKICAgICAgICAjIGhhbmRsZSBlbXB0eSBrZXkKICAgICAgICBpZiAoICEkTWFwcGluZ09iamVjdExpc3RbJGlde0tleX0gKSB7CiAgICAgICAgICAgICRUaWNrZXRNYXBwaW5nWyRpXXtLZXl9ID0gJyc7CiAgICAgICAgICAgIGlmICggISRPYmplY3REYXRhLT57QXJ0aWNsZVNlcGFyYXRlTGluZXN9ICkgewogICAgICAgICAgICAgICAgJFRpY2tldE1hcHBpbmdMYXN0ID0gJGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYXJ0aWNsZSBrZXlzCiAgICAgICAgZWxzaWYgKCAkTWFwcGluZ09iamVjdExpc3RbJGlde0tleX0gPX4gL15BcnRpY2xlXyguKykkLyApIHsKICAgICAgICAgICAgaWYgKCAkT2JqZWN0RGF0YS0+e0FydGljbGVTZXBhcmF0ZUxpbmVzfSApIHsKICAgICAgICAgICAgICAgIHB1c2ggQEFydGljbGVNYXBwaW5nLCAkTWFwcGluZ09iamVjdExpc3RbJGldOwogICAgICAgICAgICAgICAgJEFydGljbGVNYXBwaW5nWyArKyRBcnRpY2xlTWFwcGluZ0xhc3QgXXtLZXl9ID0gJDE7CiAgICAgICAgICAgICAgICAkVGlja2V0TWFwcGluZ1skaV17S2V5fSA9ICcnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJEFydGljbGVNYXBwaW5nWyRpXSAgICAgID0gJE1hcHBpbmdPYmplY3RMaXN0WyRpXTsKICAgICAgICAgICAgICAgICRBcnRpY2xlTWFwcGluZ1skaV17S2V5fSA9ICQxOwogICAgICAgICAgICAgICAgJEFydGljbGVNYXBwaW5nTGFzdCAgICAgID0gJGk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJDEgZXEgJ1BsYWluRW1haWwnICkgewogICAgICAgICAgICAgICAgJFN0b3JlUGxhaW5FbWFpbCA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdGlja2V0IGtleXMKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFRpY2tldE1hcHBpbmdbJGldID0gJE1hcHBpbmdPYmplY3RMaXN0WyRpXTsKICAgICAgICAgICAgJFRpY2tldE1hcHBpbmdMYXN0ID0gJGk7CiAgICAgICAgfQogICAgfQoKICAgICMgZXhwb3J0IHRpY2tldHMgLi4uCiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwogICAgZm9yIG15ICRUaWNrZXRJRCAoQFRpY2tldElEcykgewoKICAgICAgICAlVGlja2V0RGF0YSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEdldCgKICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgYWRkIGRhdGEgdG8gdGhlIGV4cG9ydCBkYXRhIGFycmF5CiAgICAgICAgbXkgQFRpY2tldEl0ZW07CiAgICAgICAgZm9yIG15ICRpICggMCAuLiAkVGlja2V0TWFwcGluZ0xhc3QgKSB7CgogICAgICAgICAgICAjIGV4dHJhY3Qga2V5CiAgICAgICAgICAgIG15ICRLZXkgPSAkVGlja2V0TWFwcGluZ1skaV17S2V5fTsKCiAgICAgICAgICAgICRUaWNrZXRJdGVtWyRpXSA9ICRLZXkgJiYgZGVmaW5lZCAkVGlja2V0RGF0YXskS2V5fQogICAgICAgICAgICAgICAgPyBJc0FycmF5UmVmV2l0aERhdGEoICRUaWNrZXREYXRheyRLZXl9ICkKICAgICAgICAgICAgICAgICAgICA/IGpvaW4oICcjIyMnLCAoIG1hcCB7IGVuY29kZV9iYXNlNjQoIEVuY29kZTo6ZW5jb2RlKCAnVVRGLTgnLCAkXyApICkgfSAkVGlja2V0RGF0YXskS2V5fS0+QCogKSApCiAgICAgICAgICAgICAgICAgICAgOiAkVGlja2V0RGF0YXskS2V5fQogICAgICAgICAgICAgICAgOiAnJzsKICAgICAgICB9CgogICAgICAgIGlmICggISRPYmplY3REYXRhLT57SW5jbHVkZUFydGljbGVzfSB8fCAkT2JqZWN0RGF0YS0+e0FydGljbGVTZXBhcmF0ZUxpbmVzfSApIHsKICAgICAgICAgICAgcHVzaCBARXhwb3J0RGF0YSwgXEBUaWNrZXRJdGVtOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkT2JqZWN0RGF0YS0+e0luY2x1ZGVBcnRpY2xlc30gKSB7CgogICAgICAgICAgICAjIEdldCBhcnRpY2xlIGRhdGEuCiAgICAgICAgICAgIG15IEBBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICRBcnRpY2xlQ291bnQgPSAwOwogICAgICAgICAgICBmb3IgbXkgJEFydGljbGUgKEBBcnRpY2xlcykgewoKICAgICAgICAgICAgICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQXJ0aWNsZSggJXskQXJ0aWNsZX0gKTsKCiAgICAgICAgICAgICAgICBteSAlQXJ0aWNsZUZ1bGwgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVHZXQoCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEICAgICA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkcyA9PiAxLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJEFydGljbGVGdWxse0FydGljbGVCYWNrZW5kfSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+Q2hhbm5lbE5hbWVHZXQoKTsKCiAgICAgICAgICAgICAgICBpZiAoICRTdG9yZVBsYWluRW1haWwgJiYgJEFydGljbGVCYWNrZW5kT2JqZWN0LT5jYW4oJ0FydGljbGVQbGFpbicpICkgewogICAgICAgICAgICAgICAgICAgICRBcnRpY2xlRnVsbHtQbGFpbkVtYWlsfSA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZVBsYWluKAogICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGUtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15IEBBcnRpY2xlSXRlbSA9ICRPYmplY3REYXRhLT57QXJ0aWNsZVNlcGFyYXRlTGluZXN9ID8gKCcnKSA6IEBUaWNrZXRJdGVtOwogICAgICAgICAgICAgICAgQVJUSUNMRU1BUDoKICAgICAgICAgICAgICAgIGZvciBteSAkaSAoIDAgLi4gJEFydGljbGVNYXBwaW5nTGFzdCApIHsKCiAgICAgICAgICAgICAgICAgICAgIyBlbXB0eSBmaWVsZHMgYXJlIGRvbmUgaW4gdGhlIHRpY2tldCBwYXJ0CiAgICAgICAgICAgICAgICAgICAgbmV4dCBBUlRJQ0xFTUFQIHVubGVzcyAkQXJ0aWNsZU1hcHBpbmdbJGldOwoKICAgICAgICAgICAgICAgICAgICAjIGV4dHJhY3Qga2V5CiAgICAgICAgICAgICAgICAgICAgbXkgJEtleSA9ICRBcnRpY2xlTWFwcGluZ1skaV17S2V5fTsKCiAgICAgICAgICAgICAgICAgICAgJEFydGljbGVJdGVtWyRpXSA9IGRlZmluZWQgJEFydGljbGVGdWxseyRLZXl9CiAgICAgICAgICAgICAgICAgICAgICAgID8gSXNBcnJheVJlZldpdGhEYXRhKCAkQXJ0aWNsZUZ1bGx7JEtleX0gKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBqb2luKCAnIyMjJywgKCBtYXAgeyBlbmNvZGVfYmFzZTY0KCBFbmNvZGU6OmVuY29kZSggJ1VURi04JywgJF8gKSApIH0gJEFydGljbGVGdWxseyRLZXl9LT5AKiApICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJEFydGljbGVGdWxseyRLZXl9CiAgICAgICAgICAgICAgICAgICAgICAgIDogJyc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAkT2JqZWN0RGF0YS0+e0luY2x1ZGVBdHRhY2htZW50c30gJiYgJEFydGljbGVCYWNrZW5kT2JqZWN0LT5jYW4oJ0FydGljbGVBdHRhY2htZW50SW5kZXgnKSApIHsKICAgICAgICAgICAgICAgICAgICBteSAlSW5kZXggPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVBdHRhY2htZW50SW5kZXgoCiAgICAgICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJUluZGV4ICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAlQXR0YWNobWVudCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVJRCAgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRLZXkgKHF3KCBGaWxlbmFtZSBDb250ZW50VHlwZSBEaXNwb3NpdGlvbiApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQXR0YWNobWVudHskS2V5fSA9IEVuY29kZTo6ZW5jb2RlKCAnVVRGLTgnLCAkQXR0YWNobWVudHskS2V5fSApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBteSAkQXR0YWNobWVudFN0cmluZzsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRLZXkgKHF3KCBGaWxlbmFtZSBDb250ZW50SUQgQ29udGVudFR5cGUgRGlzcG9zaXRpb24gQ29udGVudCBDb250ZW50QWx0ZXJuYXRpdmUgKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEF0dGFjaG1lbnR7JEtleX0gLy89ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEF0dGFjaG1lbnRTdHJpbmcgLj0gJEF0dGFjaG1lbnRTdHJpbmcgPyAnIyMjJyA6ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEF0dGFjaG1lbnRTdHJpbmcgLj0gJEtleSAuICcjIyMnIC4gZW5jb2RlX2Jhc2U2NCggJEF0dGFjaG1lbnR7JEtleX0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAQXJ0aWNsZUl0ZW0sICRBdHRhY2htZW50U3RyaW5nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBwdXNoIEBFeHBvcnREYXRhLCBcQEFydGljbGVJdGVtOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBcQEV4cG9ydERhdGE7Cn0KCj1oZWFkMiBJc0V4cG9ydENvbXBsZXRlKCkKCkluZGljYXRlIHdoZXRoZXIgdGhlIGxhc3QgQzxFeHBvcnREYXRhR2V0KCk+IGhhcyByZXR1cm5lZCB0aGUgbGFzdCBjaHVuayBvZiBkYXRhLgpBIHRydWUgdmFsdWUgaXMgYWxzbyByZXR1cm5lZCB3aGVuIGNodW5raW5nIGhhZCBub3QgYmVlbiBhY3RpdmF0ZWQuCgogICAgbXkgJENodW5raW5nRmluaXNoZWQgPSAkT2JqZWN0QmFja2VuZC0+SXNFeHBvcnRDb21wbGV0ZTsKCj1jdXQKCnN1YiBJc0V4cG9ydENvbXBsZXRlIHsKICAgIG15ICgkU2VsZikgPSBAXzsKCiAgICByZXR1cm4gJFNlbGYtPntDaHVua2luZ0ZpbmlzaGVkfTsKfQoKPWhlYWQyIEltcG9ydERhdGFTYXZlKCkKCmltcG9ydHMgYSBzaW5nbGUgZW50aXR5IG9mIHRoZSBpbXBvcnQgZGF0YS4gQW4gZW50aXR5IGlzIGVpdGhlciBhIHRpY2tldCBvciBhbiBhcnRpY2xlLgoKVGhlIEM8VGVtcGxhdGVJRD4gcG9pbnRzIHRvIHRoZSBkZWZpbml0aW9uCm9mIHRoZSBjdXJyZW50IGltcG9ydC4gQzxJbXBvcnREYXRhUm93PiBob2xkcyB0aGUgZGF0YS4gQzxDb3VudGVyPiBpcyBvbmx5IHVzZWQgaW4KZXJyb3IgbWVzc2FnZXMsIGZvciBpbmRpY2F0aW5nIHdoaWNoIGl0ZW0gd2FzIG5vdCBpbXBvcnRlZCBzdWNjZXNzZnVsbHkuCgpUaGUgZGVjaXNpb24gd2hhdCBjb25zdGl0dXRlIGFuIGVtcHR5IHZhbHVlIGlzIGEgYml0IGhhaXJ5LiBIZXJlIGFyZSB0aGUgcnVsZXMuCkZpZWxkcyB0aGF0IGFyZSBub3QgZXZlbiBtZW50aW9uZWQgaW4gdGhlIEltcG9ydCBkZWZpbml0aW9uIGFyZSBlbXB0eS4gVGhlc2UgYXJlIHRoZSAnbm90IGRlZmluZWQnIGZpZWxkcy4KRW1wdHkgc3RyaW5ncyBhbmQgdW5kZWZpbmVkIHZhbHVlcyBjb25zdGl0dXRlIGVtcHR5IGZpZWxkcy4KRmllbGRzIHdpdGggd2l0aCBvbmx5IG9uZSBvciBtb3JlIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcmUgbm90IGVtcHR5LgpGaWVsZHMgd2l0aCB0aGUgZGlnaXQgJzAnIGFyZSBub3QgZW1wdHkuCgogICAgbXkgKCAkVGlja2V0SUQsICRSZXRDb2RlICkgPSAkT2JqZWN0QmFja2VuZC0+SW1wb3J0RGF0YVNhdmUoCiAgICAgICAgVGVtcGxhdGVJRCAgICA9PiAxMjMsCiAgICAgICAgSW1wb3J0RGF0YVJvdyA9PiAkQXJyYXlSZWYsCiAgICAgICAgQ291bnRlciAgICAgICA9PiAzNjcsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKCkFuIGVtcHR5IEM8VGlja2V0SUQ+IGluZGljYXRlcyBmYWlsdXJlLiBPdGhlcndpc2UgaXQgaW5kaWNhdGVzIHRoZQpsb2NhdGlvbiBvZiB0aGUgaW1wb3J0ZWQgZGF0YS4KQzxSZXRDb2RlPiBpcyBvbmUgb2Y6Cgo9b3ZlciA0Cgo9aXRlbSAiVGlja2V0IG5vdCBjaGFuZ2VkIiA6IHRoZSBpbXBvcnQgZGlkIG5vdCBjaGFuZ2UgdGhlIHRpY2tldCBkYXRhCgo9aXRlbSAiVGlja2V0IG5vdCBjaGFuZ2VkLCBBcnRpY2xlIGNyZWF0ZWQiIDogdGhlIGltcG9ydCBkaWQgbm90IGNoYW5nZSB0aGUgdGlja2V0IGRhdGEuIEJ1dCBhbiBhcnRpY2xlIHdhcyBjcmVhdGVkLgoKPWl0ZW0gIlRpY2tldCBjcmVhdGVkIiA6IGEgdGlja2V0IHdhcyBjcmVhdGVkCgo9aXRlbSAiVGlja2V0IGNyZWF0ZWQsIEFydGljbGUgY3JlYXRlZCIgOiBhIHRpY2tldCB3aXRoIGFuIGFydGljbGUgd2FzIGNyZWF0ZWQKCj1pdGVtICJUaWNrZXQgdXBkYXRlZCIgOiBhIHRpY2tldCB3YXMgdXBkYXRlZAoKPWl0ZW0gIlRpY2tldCBza2lwcGVkIiA6IGEgdGlja2V0IHdhcyBza2lwcGVkIGJlY2F1c2Ugb2YgYW4gaW1wb3J0IGZpbHRlci4gd2FzIHNodXQuCgpUaGVyZSBhcmUgdHdvIGlucHV0IGZpbHRlcnM6IEFsbG93ZWRPd25lckluVGFyZ2V0IGFuZCBTa2lwRXhpc3RpbmdUaWNrZXRzLgoKPWl0ZW0gIlRpY2tldCB1cGRhdGVkLCBBcnRpY2xlIGNyZWF0ZWQiIDogYSB0aWNrZXQgd2FzIHVwZGF0ZWQgYW5kIGFuIGFydGljbGUgd2FzIGNyZWF0ZWQKCj1pdGVtICJBcnRpY2xlIGNyZWF0ZWQiIDogYW4gYXJ0aWNsZSB3YXMgY3JlYXRlZAoKPWl0ZW0gIkFydGljbGUgc2tpcHBlZCIgOiBhbiBhcnRpY2xlIHdhcyBza2lwcGVkCgpFaXRoZXIgYmVjYXVzZSB0aGUgY29ycmVzcG9uZGluZyB0aWNrZXQgd2FzIHNraXBwZWQgb3IgYmVjYXVzZSB0aGUgYXJ0aWNsZQphbHJlYWR5IGhhZCBiZWVuIGltcG9ydGVkLgoKPWJhY2sKCk5vIGNvZGVzIGhhdmUgeWV0IGJlZW4gZGVmaW5lZCBmb3IgdGhlIGZhaWx1cmUgY2FzZS4KCj1jdXQKCnN1YiBJbXBvcnREYXRhU2F2ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUZW1wbGF0ZUlEIEltcG9ydERhdGFSb3cgQ291bnRlciBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGltcG9ydCBkYXRhIHJvdwogICAgaWYgKCByZWYgJFBhcmFte0ltcG9ydERhdGFSb3d9IG5lICdBUlJBWScgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogSW1wb3J0RGF0YVJvdyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRJbXBvcnRFeHBvcnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0Jyk7CgogICAgIyBnZXQgb2JqZWN0IGRhdGEsIHRoYXQgaXMgdGhlIGNvbmZpZyBvZiB0aGlzIHRlbXBsYXRlCiAgICBteSAkT2JqZWN0RGF0YSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk9iamVjdERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBvYmplY3QgZGF0YQogICAgaWYgKCAhJE9iamVjdERhdGEgfHwgcmVmICRPYmplY3REYXRhIG5lICdIQVNIJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4KICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgLiAiTm8gb2JqZWN0IGRhdGEgZm91bmQgZm9yIHRoZSB0ZW1wbGF0ZSBpZCAnJFBhcmFte1RlbXBsYXRlSUR9JyIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGFuZCBjaGVjayB0aGUgbWFwcGluZyBsaXN0CiAgICAjIFRPRE86IHdoeSBpcyB0aGlzIGNhbGxlZCBmb3IgZXZlcnkgcm93IG9mIHRoZSBpbXBvcnQgZmlsZSA/CiAgICBteSAkTWFwcGluZ0xpc3QgPSAkSW1wb3J0RXhwb3J0T2JqZWN0LT5NYXBwaW5nTGlzdCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKICAgIGlmICggISRNYXBwaW5nTGlzdCB8fCByZWYgJE1hcHBpbmdMaXN0IG5lICdBUlJBWScgfHwgIUB7JE1hcHBpbmdMaXN0fSApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgIC4gIk5vIHZhbGlkIG1hcHBpbmcgbGlzdCBmb3VuZCBmb3IgdGhlIHRlbXBsYXRlIGlkICckUGFyYW17VGVtcGxhdGVJRH0nIiwKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIG1hcHBpbmcgb2JqZWN0IGxpc3QKICAgICMgVE9ETzogd2h5IGlzIHRoaXMgY2FsbGVkIGZvciBldmVyeSByb3cgb2YgdGhlIGltcG9ydCBmaWxlID8KICAgIG15IEBNYXBwaW5nT2JqZWN0TGlzdDsKICAgIGZvciBteSAkTWFwcGluZ0lEICggJE1hcHBpbmdMaXN0LT5AKiApIHsKCiAgICAgICAgIyBnZXQgbWFwcGluZyBvYmplY3QgZGF0YQogICAgICAgIG15ICRNYXBwaW5nT2JqZWN0RGF0YSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPk1hcHBpbmdPYmplY3REYXRhR2V0KAogICAgICAgICAgICBNYXBwaW5nSUQgPT4gJE1hcHBpbmdJRCwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgbWFwcGluZyBvYmplY3QgZGF0YQogICAgICAgIGlmICggISRNYXBwaW5nT2JqZWN0RGF0YSB8fCByZWYgJE1hcHBpbmdPYmplY3REYXRhIG5lICdIQVNIJyApIHsKCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgLiAiTm8gbWFwcGluZyBvYmplY3QgZGF0YSBmb3VuZCBmb3IgdGhlIG1hcHBpbmcgaWQgJyRNYXBwaW5nSUQnIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHB1c2ggQE1hcHBpbmdPYmplY3RMaXN0LCAkTWFwcGluZ09iamVjdERhdGE7CiAgICB9CgogICAgIyBwcmVwYXJlIGltcG9ydCBkYXRhCiAgICBteSAlVGlja2V0OwogICAgbXkgJUFydGljbGU7CiAgICBteSAlSWRlbnRpZmllcjsKCiAgICBteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkTWFwcGluZ0NvbmZpZyA9ICRDb25maWdPYmplY3QtPkdldCgnSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwJykgLy8ge307CiAgICBteSAlVmFsdWVNYXAgPQogICAgICAgIG1hcCB7ICRfLT57S2V5fSA9PiAkXy0+e01hcH0gfQogICAgICAgIHZhbHVlcyAkTWFwcGluZ0NvbmZpZy0+JSo7CgogICAgIyBEZXRlcm1pbmUgd2hldGhlciB3ZSBoYXZlIGFuIGFydGljbGUgb24gYSBzZXBhcmF0ZSBsaW5lLgogICAgIyBUaGUgdmFsdWUgb2YgdGhlIGZpcnN0IGNvbHVtbiBpcyB0aGUgbWFya2VyLiBXaGVuIGl0IGlzIGVtcHR5LAogICAgIyBwciBoYXMgdGhlIHZhbHVlIEM8MD4sIHRoZSB3ZSBoYXZlIGFuIGFydGljbGUgb24gYSBzZXBhcmF0ZSBsaW5lLgogICAgbXkgJEFydGljbGVJc09uU2VwYXJhdGVMaW5lID0KICAgICAgICAkT2JqZWN0RGF0YS0+e0luY2x1ZGVBcnRpY2xlc30KICAgICAgICAmJgogICAgICAgICRPYmplY3REYXRhLT57QXJ0aWNsZVNlcGFyYXRlTGluZXN9CiAgICAgICAgJiYKICAgICAgICAhJFBhcmFte0ltcG9ydERhdGFSb3d9WzBdCiAgICAgICAgJiYKICAgICAgICAxOwoKICAgIGlmICggJEFydGljbGVJc09uU2VwYXJhdGVMaW5lICYmICRTZWxmLT57TGFzdFRpY2tldFdhc1NraXBwZWR9ICkgewoKICAgICAgICAjIFNraXAgdGhpcyBhcnRpY2xlIGJlY2F1c2UgdGhlIGxhc3QgdGlja2V0IHdhcyBpZ25vcmVkLgogICAgICAgICMgUmV0dXJuaW5nIC0xIGFzIHRoaXMgZG9lcyBub3QgY291bnQgYXMgYSBmYWlsdXJlLAogICAgICAgICMgYnV0IHdlIHN0aWxsIHdhbnQgdG8gaW5kaWNhdGUgdGhhdCBzb21ldGhpbmcgc3BlY2lhbCBpcyBnb2luZyBvbi4KICAgICAgICByZXR1cm4gKCAtMSwgJ0FydGljbGUgc2tpcHBlZCcgKTsKICAgIH0KICAgIGVsc2lmICgkQXJ0aWNsZUlzT25TZXBhcmF0ZUxpbmUpIHsKCiAgICAgICAgIyBIYW5kbGluZyBhbiBhcnRpY2xlIGFuIGEgc2VwYXJhdGUgbGluZS4gVGhlIGxhc3QgdGlja2V0IHdhcyBub3QgaWdub3JlZC4KCiAgICAgICAgbXkgJGkgPSAxOwogICAgICAgIE1BUFBJTkdPQkpFQ1REQVRBOgogICAgICAgIGZvciBteSAkTWFwcGluZ09iamVjdERhdGEgKEBNYXBwaW5nT2JqZWN0TGlzdCkgewoKICAgICAgICAgICAgaWYgKCAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9ID1+IC9eQXJ0aWNsZV8oLispJC8gKSB7CiAgICAgICAgICAgICAgICBteSAkVmFsdWUgPSAkUGFyYW17SW1wb3J0RGF0YVJvd31bICRpKysgXTsKICAgICAgICAgICAgICAgICRBcnRpY2xleyQxfSA9IGRlZmluZWQgJFZhbHVlICYmICRWYWx1ZU1hcHsgJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSB9ICYmIGRlZmluZWQgJFZhbHVlTWFweyAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9IH17JFZhbHVlfQogICAgICAgICAgICAgICAgICAgID8gJFZhbHVlTWFweyAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9IH17JFZhbHVlfSA6ICRWYWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG5leHQgTUFQUElOR09CSkVDVERBVEE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG5leHQgTUFQUElOR09CSkVDVERBVEEgdW5sZXNzICRNYXBwaW5nT2JqZWN0RGF0YS0+e0lkZW50aWZpZXJ9OwoKICAgICAgICAgICAgaWYgKCAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9IG5lICdBcnRpY2xlX0FydGljbGVJRCcgKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgICAgICAgICAuICJBcnRpY2xlcyBjYW4gb25seSBiZSBpZGVudGlmaWVkIHZpYSAnQXJ0aWNsZV9BcnRpY2xlSUQnIG5vdCBieSAnJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fScuIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggISRQYXJhbXtJbXBvcnREYXRhUm93fVsgJGkgLSAxIF0gKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgICAgICAgICAuICInQXJ0aWNsZV9BcnRpY2xlSUQnIGNhbiBub3QgYmUgZW1wdHkgb3IgMCB3aGVuIHVzZWQgYXMgaWRlbnRpZmllci4iLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRJZGVudGlmaWVye0FydGljbGV9e0FydGljbGVJRH0gPSAxOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkT2JqZWN0RGF0YS0+e0luY2x1ZGVBdHRhY2htZW50c30gJiYgJGkgPD0gJCN7ICRQYXJhbXtJbXBvcnREYXRhUm93fSB9ICkgewoKICAgICAgICAgICAgIyB0aGUgbGFzdCBhbmQgdW5tYXBwZWQgZW50cmllcyBhcmUgYXR0YWNobWVudHMKICAgICAgICAgICAgJEFydGljbGV7QXR0YWNobWVudHN9ID0gWyBAeyAkUGFyYW17SW1wb3J0RGF0YVJvd30gfVsgJGkgLi4gJCN7ICRQYXJhbXtJbXBvcnREYXRhUm93fSB9IF0gXTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBIYW5kbGluZyBhIGxpbmUgd2l0aCB0aWNrZXQgaW5mb3JtYXRpb24uCiAgICAgICAgIyBUaGUgZGF0YSBmb3IgYW4gYXJ0aWNsZSBtaWdodCBiZSBpbmNsdWRlZCBpbiB0aGF0IGxpbmUuCiAgICAgICAgTUFQUElOR09CSkVDVERBVEE6CiAgICAgICAgZm9yIG15ICRpICggMCAuLiAkI01hcHBpbmdPYmplY3RMaXN0ICkgewoKICAgICAgICAgICAgbXkgJE1hcHBpbmdPYmplY3REYXRhID0gJE1hcHBpbmdPYmplY3RMaXN0WyRpXTsKCiAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRQYXJhbXtJbXBvcnREYXRhUm93fVskaV07CiAgICAgICAgICAgICRWYWx1ZSA9IGRlZmluZWQgJFZhbHVlICYmICRWYWx1ZU1hcHsgJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSB9ICYmIGRlZmluZWQgJFZhbHVlTWFweyAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9IH17JFZhbHVlfQogICAgICAgICAgICAgICAgPyAkVmFsdWVNYXB7ICRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX0gfXskVmFsdWV9IDogJFZhbHVlOwoKICAgICAgICAgICAgaWYgKCAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9ID1+IG0vXkFydGljbGVfKC4rKSQvICkgewogICAgICAgICAgICAgICAgbmV4dCBNQVBQSU5HT0JKRUNUREFUQSBpZiAkT2JqZWN0RGF0YS0+e0FydGljbGVTZXBhcmF0ZUxpbmVzfTsKICAgICAgICAgICAgICAgIG5leHQgTUFQUElOR09CSkVDVERBVEEgdW5sZXNzICRPYmplY3REYXRhLT57SW5jbHVkZUFydGljbGVzfTsKCiAgICAgICAgICAgICAgICAkQXJ0aWNsZXskMX0gPSAkVmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkVGlja2V0eyAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9IH0gPSAkVmFsdWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgaWRlbnRpZmllcnMgYXJlIHVzdWFsbHkgVGlja2V0SUQgb3IgVGlja2V0TnVtYmVyCiAgICAgICAgICAgIG5leHQgTUFQUElOR09CSkVDVERBVEEgdW5sZXNzICRNYXBwaW5nT2JqZWN0RGF0YS0+e0lkZW50aWZpZXJ9OwoKICAgICAgICAgICAgaWYgKCAhJFZhbHVlICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PgogICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiJyRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX0nIGNhbiBub3QgYmUgZW1wdHkgb3IgMCB3aGVuIHVzZWQgYXMgaWRlbnRpZmllci4iLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSBlcSAnQXJ0aWNsZV9BcnRpY2xlSUQnICkgewogICAgICAgICAgICAgICAgJElkZW50aWZpZXJ7QXJ0aWNsZX17QXJ0aWNsZUlEfSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9ID1+IC9eQXJ0aWNsZV8vICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PgogICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiQ3VycmVudGx5IG9ubHkgQXJ0aWNsZV9BcnRpY2xlSUQgaXMgYSB2YWxpZCBpZGVudGlmaWVyIGZvciBhcnRpY2xlcyAobm90ICckTWFwcGluZ09iamVjdERhdGEtPntLZXl9JykuIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJElkZW50aWZpZXJ7VGlja2V0fXsgJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSB9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAlQXJ0aWNsZSAmJiAkT2JqZWN0RGF0YS0+e0luY2x1ZGVBdHRhY2htZW50c30gJiYgJCNNYXBwaW5nT2JqZWN0TGlzdCA8ICQjeyAkUGFyYW17SW1wb3J0RGF0YVJvd30gfSApIHsKCiAgICAgICAgICAgICMgdGhlIGxhc3QgYW5kIHVubWFwcGVkIGVudHJpZXMgYXJlIGF0dGFjaG1lbnRzCiAgICAgICAgICAgICRBcnRpY2xle0F0dGFjaG1lbnRzfSA9IFsgQHsgJFBhcmFte0ltcG9ydERhdGFSb3d9IH1bICQjTWFwcGluZ09iamVjdExpc3QgKyAxIC4uICQjeyAkUGFyYW17SW1wb3J0RGF0YVJvd30gfSBdIF07CiAgICAgICAgfQogICAgfQoKICAgIG15ICRTdGF0dXMgPSAnVGlja2V0IG5vdCBjaGFuZ2VkJzsKICAgICRTZWxmLT57RXJyb3J9ID0gJyc7CiAgICBpZiAoCiAgICAgICAgJVRpY2tldAogICAgICAgICYmCiAgICAgICAgKCAhJFRpY2tldHtUaWNrZXRJRH0gfHwgIWV4aXN0cyAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259eyAkVGlja2V0e1RpY2tldElEfSB9ICkKICAgICAgICApCiAgICB7CiAgICAgICAgJFN0YXR1cyA9ICRTZWxmLT5fSW1wb3J0VGlja2V0KAogICAgICAgICAgICBUaWNrZXQgICAgID0+IFwlVGlja2V0LAogICAgICAgICAgICBJZGVudGlmaWVyID0+ICRJZGVudGlmaWVye1RpY2tldH0sCiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gJE9iamVjdERhdGEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJFN0YXR1cyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiBUaWNrZXRJbXBvcnQ6ICRTZWxmLT57RXJyb3J9IiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBBbiBhcnRpY2xlIGV4aXN0cyBiZWNhdXNlIGFuIGFydGljbGUgd2FzIGRlY2xhcmVkIGluIHRoZSBzYW1lIGxpbmUgYXMgdGhlIHRpY2tldCwKICAgICMgb3IgYmVjYXVzZSBhbiBhcnRpY2xlIHdhcyBkZWNsYXJlZCBpbiBhIHNlcGFyYXRlIGxpbmUuCiAgICBpZiAoICVBcnRpY2xlICYmICRPYmplY3REYXRhLT57SW5jbHVkZUFydGljbGVzfSApIHsKICAgICAgICBteSAkQXJ0aWNsZVN0YXR1cyA9ICRTZWxmLT5fSW1wb3J0QXJ0aWNsZSgKICAgICAgICAgICAgQXJ0aWNsZSAgICA9PiBcJUFydGljbGUsCiAgICAgICAgICAgIElkZW50aWZpZXIgPT4gJElkZW50aWZpZXJ7QXJ0aWNsZX0sCiAgICAgICAgICAgIE9iamVjdERhdGEgPT4gJE9iamVjdERhdGEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAhJEFydGljbGVTdGF0dXMgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogQXJ0aWNsZUltcG9ydDogJFNlbGYtPntFcnJvcn0iLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBPbmx5IHRoZSBhcnRpY2xlIHN0YXR1cyBpcyByZWxldmFudCB3aGVuIHRoZSBhcnRpY2xlIGlzIG9uIGEgc2VwZXJhdGUgbGluZS4KICAgICAgICAjIE90aGVyd2lzZSBib3RoIHRpY2tldCBzdGF0dXMgYW5kIGFydGljbGUgc3RhdHVzIGFyZSByZWxldmFudC4KICAgICAgICBpZiAoJEFydGljbGVJc09uU2VwYXJhdGVMaW5lKSB7CiAgICAgICAgICAgICRTdGF0dXMgPSAkQXJ0aWNsZVN0YXR1czsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTdGF0dXMgPSBqb2luICcsICcsICRTdGF0dXMsICRBcnRpY2xlU3RhdHVzOwogICAgICAgIH0KICAgIH0KCiAgICAjIFNraXBwZWQgdGlja2V0cyBhbmQgYXJ0aWNsZXMgYXJlIG5vdCByZXBvcnRlZCBhcyBmYWlsdXJlcwogICAgcmV0dXJuICggLTEsICRTdGF0dXMgKSBpZiAkU3RhdHVzID1+IG0vc2tpcHBlZC87CgogICAgIyBSZXR1cm4gdGhlIGxhc3QgdGlja2V0IElEIGV2ZW4gaWYgdGhhdCB2YWx1ZSBpcyB1c2VkIG9ubHkKICAgICMgYXMgYSBmYWlsdXJlIGluZGljYXRvciBpbiBJbXBvcnRFeHBvcnQuCiAgICByZXR1cm4gKCAkU2VsZi0+e0xhc3RUaWNrZXRJRH0sICRTdGF0dXMgKTsKfQoKPWhlYWQxIEludGVybmFsIFN1YnJvdXRpbmVzCgo9aGVhZDIgX1RpY2tldFNlYXJjaAoKanVzdCBhIHdyYXBwZXIgYXJvdW5kIEM8S2VybmVsOjpTeXN0ZW06OlRpY2tldDo6VGlja2V0U2VhcmNoKCk+Cgo9Y3V0CgpzdWIgX1RpY2tldFNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRJbXBvcnRFeHBvcnRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0Jyk7CiAgICBteSAkVGlja2V0T2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgICMgZ2V0IHNlYXJjaCBkYXRhCiAgICBteSAkU2VhcmNoRGF0YSA9ICRJbXBvcnRFeHBvcnRPYmplY3QtPlNlYXJjaERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgbXkgJUlzU2VsZWN0aW9uID0gbWFwIHsgJF8gPT4gMSB9IHF3KCBUeXBlSURzIFF1ZXVlSURzIFNlcnZpY2VJRHMgU0xBSURzIFN0YXRlSURzIFByaW9yaXR5SURzIEN1c3RvbWVySUQgKTsKCiAgICBteSAlU2VhcmNoRGF0YVByZXBhcmVkOwogICAgS0VZOgogICAgZm9yIG15ICRLZXkgKCBrZXlzICV7JFNlYXJjaERhdGF9ICkgewogICAgICAgIG5leHQgS0VZIHVubGVzcyBkZWZpbmVkICRTZWFyY2hEYXRhLT57JEtleX07CgogICAgICAgICRTZWFyY2hEYXRhUHJlcGFyZWR7JEtleX0gPSAkSXNTZWxlY3Rpb257JEtleX0gPyBbIHNwbGl0IC8jIyMjIy8sICRTZWFyY2hEYXRhLT57JEtleX0gXSA6ICRTZWFyY2hEYXRhLT57JEtleX07CiAgICB9CgogICAgIyBDcmVhdGUgYW4gYXJyYXkgaW4gb3JkZXIgdG8gbWFrZSBzdXJlIHRoYXQgc29ydCBpcyBub3QgY2FsbGVkIGluIHNjYWxhciBjb250ZXh0LgogICAgIwogICAgIyBUaWNrZXRTZWFyY2goKSBoYXMgYSBkZWZhdWx0IGxpbWl0IG9mIDEwXzAwMC4gVGhpcyBpcyBmaW5lIGluIGEgd2ViYXBwIGJ1dCBub3QgZm9yIGEgY29tcGxldGUgZXhwb3J0LgogICAgIyBBcyBhIHdvcmthcm91bmQgc2V0IHRoZSBsaW1pdCB0byBhIGxhcmdlIG51bWJlciBsaWtlIG9uZSBiaWxsaW9uLgogICAgbXkgQFNvcnRlZFRpY2tldElEcyA9IHNvcnQgeyAkYSA8PT4gJGIgfSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZWFyY2goCiAgICAgICAgJVNlYXJjaERhdGFQcmVwYXJlZCwKICAgICAgICBMaW1pdCAgPT4gMV8wMDBfMDAwXzAwMCwKICAgICAgICBSZXN1bHQgPT4gJ0FSUkFZJywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIEBTb3J0ZWRUaWNrZXRJRHM7Cn0KCnN1YiBfSW1wb3J0VGlja2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBXZSBhcmUgZGVhbGluZyB3aXRoIGEgbmV3IHRpY2tldC4gV2UgYXNzdW1lIHRoYXQgdGhpcyB0aWNrZXQKICAgICMgd29uJ3QgYmUgc2tpcHBlZCB1bnRpbCB3ZSBjaGVjayB0aGUgaW1wb3J0IGZpbHRlcnMuCiAgICB1bmRlZiAkU2VsZi0+e0xhc3RUaWNrZXRXYXNTa2lwcGVkfTsKCiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwogICAgbXkgJExvZ09iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKTsKCiAgICBteSAlVGlja2V0ID0gJFBhcmFte1RpY2tldH0tPiUqOyAgICAjIGRhdGEgZnJvbSB0aGUgaW1wb3J0IGZpbGUKICAgIG15ICVEQlRpY2tldDsgICAgICAgICAgICAgICAgICAgICAgICMgVGlja2V0IGFzIHJldHJpZXZlZCBmcm9tIHRoZSBkYXRhYmFzZQogICAgbXkgJFN0YXR1cyA9ICdUaWNrZXQgbm90IGNoYW5nZWQnOwoKICAgIGlmICggJFBhcmFte0lkZW50aWZpZXJ9ICkgewogICAgICAgIG15ICREQlRpY2tldElEOwoKICAgICAgICAjIFRpY2tldElEIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBUaWNrZXROdW1iZXIKICAgICAgICBpZiAoICRQYXJhbXtJZGVudGlmaWVyfXtUaWNrZXRJRH0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIHByZXZpb3VzbHkgaW1wb3J0ZWQgdGlja2V0cyBvZiB0aGlzIHJ1bgogICAgICAgICAgICBpZiAoICRTZWxmLT57VGlja2V0SURSZWxhdGlvbn17ICRUaWNrZXR7VGlja2V0SUR9IH0gKSB7CgogICAgICAgICAgICAgICAgIyB3ZSBzaWxlbnRseSBza2lwIHRoaXMgdGlja2V0LCBpZiBpdCBhbHJlYWR5IGhhcyBiZWVuIGltcG9ydGVkCiAgICAgICAgICAgICAgICAjIHRoaXMgc2l0dWF0aW9uIHdpbGwgYWx3YXlzIG9jY3VyIHdoZW4gYXJ0aWNsZXMgYXJlIG5vdCBpbXBvcnRlZCBzZXBhcmF0ZWx5CiAgICAgICAgICAgICAgICAjIGZvciB0aGUgc2FrZSBvZiBjb25zaXN0ZW5jeSwgd2UgdHJlYXQgb3RoZXIgc2l0dWF0aW9ucyB0aGUgc2FtZSwgYWx0aG91Z2ggdGhleSBhcmUgbGVzcyBjbGVhcgogICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgIyBBcnRpY2xlcyB3aGljaCBmb2xsb3cgb24gc2VwYXJhdGUgbGluZXMgd291bGQgc3RpbGwgYmUgaW1wb3J0ZWQgaW4gdGhpcyBjYXNlLgogICAgICAgICAgICAgICAgbXkgJFByaW8gPSAhJFBhcmFte09iamVjdERhdGF9e0FydGljbGVTZXBhcmF0ZUxpbmVzfQogICAgICAgICAgICAgICAgICAgICYmICRTZWxmLT57TGFzdFRpY2tldElEfSA9PSAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259eyAkVGlja2V0e1RpY2tldElEfSB9ID8gJ2RlYnVnJyA6ICdpbmZvJzsKICAgICAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAkUHJpbywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiU2tpcHBpbmcgdGlja2V0IGNyZWF0aW9uIGZvciBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9IChUaWNrZXRJRCAkVGlja2V0e1RpY2tldElEfSkgYXMgaXQgd2FzIGhhbmRsZWQgYmVmb3JlLiIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xhc3RUaWNrZXRJRH0gPSAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259eyAkVGlja2V0e1RpY2tldElEfSB9OwoKICAgICAgICAgICAgICAgIHJldHVybiAkU3RhdHVzOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGV4aXN0aW5nIGJ1dCB1bmRlZmluZWQgZW50cnkgbWVhbnMgcHJldmlvdXMgZXJyb3IgLSB3ZSBza2lwIGFuZCBkbyBub3RoaW5nCiAgICAgICAgICAgIGVsc2lmICggZXhpc3RzICRTZWxmLT57VGlja2V0SURSZWxhdGlvbn17ICRUaWNrZXR7VGlja2V0SUR9IH0gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiVGlja2V0SUQgJFRpY2tldHtUaWNrZXRJRH0gd2FzIGluY29ycmVjdGx5IGltcG9ydGVkIGJlZm9yZSBjYW5jZWxpbmcgbmV3IHRyeS4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBleGNsdWRlIHRpY2tldHMgd2hpY2ggd2VyZSBjcmVhdGVkIGluIHRoaXMgcnVuIGFuZCBieSBjaGFuY2UgZ290IHRoZSBjdXJyZW50IFRpY2tldElECiAgICAgICAgICAgIGVsc2lmICggIXsgcmV2ZXJzZSAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259LT4lKiB9LT57ICRUaWNrZXR7VGlja2V0SUR9IH0gKSB7CiAgICAgICAgICAgICAgICAkREJUaWNrZXRJRCA9ICRUaWNrZXR7VGlja2V0SUR9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFBhcmFte0lkZW50aWZpZXJ9e1RpY2tldE51bWJlcn0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIHByZXZpb3VzbHkgaW1wb3J0ZWQgdGlja2V0cyBvZiB0aGlzIHJ1bgogICAgICAgICAgICBpZiAoICRTZWxmLT57VGlja2V0TnVtYmVySURSZWxhdGlvbn17ICRUaWNrZXR7VGlja2V0TnVtYmVyfSB9ICkgewoKICAgICAgICAgICAgICAgICMgd2Ugc2lsZW50bHkgc2tpcCB0aGlzIHRpY2tldCwgaWYgaXQgYWxyZWFkeSBoYXMgYmVlbiBpbXBvcnRlZAogICAgICAgICAgICAgICAgIyB0aGlzIHNpdHVhdGlvbiB3aWxsIGFsd2F5cyBvY2N1ciB3aGVuIGFydGljbGVzIGFyZSBub3QgaW1wb3J0ZWQgc2VwYXJhdGVseQogICAgICAgICAgICAgICAgIyBmb3IgdGhlIHNha2Ugb2YgY29uc2lzdGVuY3ksIHdlIHRyZWF0IG90aGVyIHNpdHVhdGlvbnMgdGhlIHNhbWUsIGFsdGhvdWdoIHRoZXkgYXJlIGxlc3MgY2xlYXIKICAgICAgICAgICAgICAgICMKICAgICAgICAgICAgICAgICMgQXJ0aWNsZXMgd2hpY2ggZm9sbG93IG9uIHNlcGFyYXRlIGxpbmVzIHdvdWxkIHN0aWxsIGJlIGltcG9ydGVkIGluIHRoaXMgY2FzZS4KICAgICAgICAgICAgICAgIG15ICRQcmlvID0gISRQYXJhbXtPYmplY3REYXRhfXtBcnRpY2xlU2VwYXJhdGVMaW5lc30KICAgICAgICAgICAgICAgICAgICAmJiAkU2VsZi0+e0xhc3RUaWNrZXRJRH0gPT0gJFNlbGYtPntUaWNrZXROdW1iZXJJRFJlbGF0aW9ufXsgJFRpY2tldHtUaWNrZXROdW1iZXJ9IH0gPyAnZGVidWcnIDogJ2luZm8nOwogICAgICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICRQcmlvLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJTa2lwcGluZyB0aWNrZXQgY3JlYXRpb24gZm9yIGVudGl0eSAkUGFyYW17Q291bnRlcn0gKFRpY2tldE51bWJlciAkVGlja2V0e1RpY2tldE51bWJlcn0pIGFzIGl0IHdhcyBoYW5kbGVkIGJlZm9yZS4iCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFNlbGYtPntMYXN0VGlja2V0SUR9ID0gJFNlbGYtPntUaWNrZXROdW1iZXJJRFJlbGF0aW9ufXsgJFRpY2tldHtUaWNrZXROdW1iZXJ9IH07CgogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGFzdFRpY2tldElEfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBleGlzdGluZyBidXQgdW5kZWZpbmVkIGVudHJ5IG1lYW5zIHByZXZpb3VzIGVycm9yIC0gd2Ugc2tpcCBhbmQgZG8gbm90aGluZwogICAgICAgICAgICBlbHNpZiAoIGV4aXN0cyAkU2VsZi0+e1RpY2tldE51bWJlcklEUmVsYXRpb259eyAkVGlja2V0e1RpY2tldE51bWJlcn0gfSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJUaWNrZXROdW1iZXIgJFRpY2tldHtUaWNrZXROdW1iZXJ9IHdhcyBpbmNvcnJlY3RseSBpbXBvcnRlZCBiZWZvcmUgY2FuY2VsaW5nIG5ldyB0cnkuIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZXhjbHVkZSB0aWNrZXRzIHdoaWNoIHdlcmUgY3JlYXRlZCBpbiB0aGlzIHJ1biBhbmQgYnkgY2hhbmNlIGdvdCB0aGUgY3VycmVudCBUaWNrZXROdW1iZXIKICAgICAgICAgICAgIyBUT0RPOiBob3cgaXMgQ3JlYXRlZE51bWJlcnMgcHJvdmlkZWQgd2l0aCBjb250ZW50ID8KICAgICAgICAgICAgZWxzaWYgKCAhJFNlbGYtPntDcmVhdGVkTnVtYmVyc317ICRUaWNrZXR7VGlja2V0TnVtYmVyfSB9ICkgewogICAgICAgICAgICAgICAgJERCVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRJRExvb2t1cCgKICAgICAgICAgICAgICAgICAgICBUaWNrZXROdW1iZXIgPT4gJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgJ0ZvciB0aWNrZXQgY29ycmVsYXRpb24gY2hlY2tzIGVpdGhlciBUaWNrZXRJRCBvciBUaWNrZXROdW1iZXIgaGFzIHRvIGJlIGluY2x1ZGVkIGFzIGlkZW50aWZpZXIuIChVc2luZyBubyBpZGVudGlmaWVyIHRvIGp1c3QgY3JlYXRlIG5ldyB0aWNrZXRzIGlzIGFsc28gcG9zc2libGUuKScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJERCVGlja2V0SUQpIHsKICAgICAgICAgICAgJURCVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkREJUaWNrZXRJRCwKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNpbGVudCAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyB2ZXJpZnkgd2hldGhlciB3ZSByZWFsbHkgZ290IHRoZSByaWdodCB0aWNrZXQsIGFsbCBpZGVudGlmaWVycyBtdXN0IG1hdGNoCiAgICBpZiAoJURCVGlja2V0KSB7CiAgICAgICAgQVRUUjoKICAgICAgICBmb3IgbXkgJEF0dHIgKCBrZXlzICRQYXJhbXtJZGVudGlmaWVyfS0+JSogKSB7CiAgICAgICAgICAgIGlmICggJERCVGlja2V0eyRBdHRyfSBuZSAkVGlja2V0eyRBdHRyfSApIHsKICAgICAgICAgICAgICAgICVEQlRpY2tldCA9ICgpOwoKICAgICAgICAgICAgICAgIGxhc3QgQVRUUjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGp1c3QgdXBkYXRlIHRoZSB0aWNrZXQgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50CiAgICBpZiAoJURCVGlja2V0KSB7CgogICAgICAgICMgVGhlcmUgYXJlIGNhc2VzIHdoZW4gYSB0aWNrZXQgdXBkYXRlIHNob3VsZCBub3QgdGFrZSBwbGFjZS4gQ3VycmVudGx5IHR3bwogICAgICAgICMgb2YgdGhlc2UgY2FzZXMgYXJlIHN1cHBvcnRlZC4gSW4gYm90aCBvZiB0aGVzZSBjYXNlcyBubyBhcnRpY2xlcwogICAgICAgICMgYXJlIGltcG9ydGVkIHVudGlsIGEgbmV3IHRpY2tldCBpcyBlbmNvdW50ZXJlZC4KICAgICAgICB7CiAgICAgICAgICAgICMgVXBkYXRlIG9ubHkgdGlja2V0cyB0aGF0IGFyZSBub3Qgb3duZWQgYnkgYSBzcGVjaWZpYyBhZ2VudC4gVXN1YWxseSB0aGlzIHNwZWNpYWwgYWdlbnQKICAgICAgICAgICAgIyBpcyB0aGUgZGVmYXVsdCBhZ2VudCBvZiBhIHByZXZpb3VzIGltcG9ydC4gVGhlIHVzZSBjYXNlIGlzIHdoZW4gYWRkaXRpb25hbCB1c2VycwogICAgICAgICAgICAjIGFyZSBhcmUgYWN0aXZhdGVkIGFmdGVyIGFuIGluaXRpYWwgaW1wb3J0IG9mIHRoZSB0aWNrZXRzLgogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkUGFyYW17T2JqZWN0RGF0YX0tPntBbGxvd2VkT3duZXJJblRhcmdldH0KICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgICAkREJUaWNrZXR7T3duZXJ9IG5lICRQYXJhbXtPYmplY3REYXRhfS0+e0FsbG93ZWRPd25lckluVGFyZ2V0fQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB1bmRlZiAkU2VsZi0+e0xhc3RUaWNrZXRJRH07CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xhc3RUaWNrZXRXYXNTa2lwcGVkfSA9IDE7CgogICAgICAgICAgICAgICAgcmV0dXJuICdUaWNrZXQgc2tpcHBlZCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgRG9uJ3QgbWVzcyB3aXRoIGV4aXN0aW5nIHRpY2tldHMuCiAgICAgICAgICAgIGlmICggJFBhcmFte09iamVjdERhdGF9LT57U2tpcEV4aXN0aW5nVGlja2V0c30gKSB7CiAgICAgICAgICAgICAgICB1bmRlZiAkU2VsZi0+e0xhc3RUaWNrZXRJRH07CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xhc3RUaWNrZXRXYXNTa2lwcGVkfSA9IDE7CgogICAgICAgICAgICAgICAgcmV0dXJuICdUaWNrZXQgc2tpcHBlZCc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRTdGF0dXMgPSAnVGlja2V0IG5vdCBjaGFuZ2VkJzsKICAgICAgICBteSAkVGlja2V0VXBkYXRlZFN0YXR1cyA9ICdUaWNrZXQgdXBkYXRlZCc7CgogICAgICAgICMgZGVjaWRlIHdoZXRoZXIgdGhlIG9sZCB2YWx1ZXMgc2hvdWxkIGJlIGtlcHQKICAgICAgICBteSAkU2tpcEVtcHR5ID0gJFBhcmFte09iamVjdERhdGF9e0VtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXN9OwoKICAgICAgICAjIGN1c3RvbWVyCiAgICAgICAgJFRpY2tldHtDdXN0b21lcklEfSAgICAgfHw9ICRTa2lwRW1wdHkgPyAkREJUaWNrZXR7Q3VzdG9tZXJJRH0gICAgIDogJFBhcmFte09iamVjdERhdGF9e0N1c3RvbWVySUR9OwogICAgICAgICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9IHx8PSAkU2tpcEVtcHR5ID8gJERCVGlja2V0e0N1c3RvbWVyVXNlcklEfSA6ICRQYXJhbXtPYmplY3REYXRhfXtDdXN0b21lclVzZXJJRH07CiAgICAgICAgJERCVGlja2V0e0N1c3RvbWVySUR9ICAgICAvLz0gJyc7CiAgICAgICAgJERCVGlja2V0e0N1c3RvbWVyVXNlcklEfSAvLz0gJyc7CgogICAgICAgIGlmICggKCAhJFRpY2tldHtDdXN0b21lcklEfSAmJiAkREJUaWNrZXR7Q3VzdG9tZXJJRH0gKSB8fCAoICEkVGlja2V0e0N1c3RvbWVyVXNlcklEfSAmJiAkREJUaWNrZXR7Q3VzdG9tZXJVc2VySUR9ICkgKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlVuZXhwZWN0ZWQgc3RhdGUgZW5jb3VudGVyZWQgZm9yIGV4aXN0aW5nIFRpY2tldElEICRUaWNrZXR7VGlja2V0SUR9IChFbnRpdHkgJFBhcmFte0NvdW50ZXJ9KTogIgogICAgICAgICAgICAgICAgICAgIC4gIlRpY2tldCBjdXN0b21lciBjYW4gbm90IGJlIGVtcHRpZWQgLSBub3QgYSByZWFsIGNocm9ub2xvZ2ljYWwgdXBkYXRlOyBpZ25vcmluZyB0aGlzLCBhbmQga2VlcGluZyBDdXN0b21lcihVc2VyKUlELiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICB7CiAgICAgICAgICAgIG15ICRVcGRhdGUgPSAkVGlja2V0e0N1c3RvbWVySUR9ICYmICRUaWNrZXR7Q3VzdG9tZXJJRH0gbmUgJERCVGlja2V0e0N1c3RvbWVySUR9ID8gMSA6CiAgICAgICAgICAgICAgICAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSAmJiAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSBuZSAkREJUaWNrZXR7Q3VzdG9tZXJVc2VySUR9ID8gMSA6IDA7CgogICAgICAgICAgICBpZiAoJFVwZGF0ZSkgewogICAgICAgICAgICAgICAgJFN0YXR1cyA9ICRUaWNrZXRVcGRhdGVkU3RhdHVzOwogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDdXN0b21lclNldCgKICAgICAgICAgICAgICAgICAgICBObyAgICAgICA9PiAkVGlja2V0e0N1c3RvbWVySUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXIgICAgID0+ICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCB1cGRhdGUgQ3VzdG9tZXIoVXNlcikgZm9yIFRpY2tldElEICREQlRpY2tldHtUaWNrZXRJRH0iLAogICAgICAgICAgICAgICAgKSB1bmxlc3MgJFN1Y2Nlc3M7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdGl0bGUKICAgICAgICAkVGlja2V0e1RpdGxlfSB8fD0KICAgICAgICAgICAgKCBkZWZpbmVkICRUaWNrZXR7VGl0bGV9ICYmICRUaWNrZXR7VGl0bGV9IGVxICcwJyApID8gJzAnIDoKICAgICAgICAgICAgJFNraXBFbXB0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJERCVGlja2V0e1RpdGxlfSA6CiAgICAgICAgICAgICRQYXJhbXtPYmplY3REYXRhfXtTdWJqZWN0fSAgICAgICAgICAgICAgICAgICAgICAgICA/ICRQYXJhbXtPYmplY3REYXRhfXtTdWJqZWN0fSA6ICcnOwoKICAgICAgICBpZiAoICRUaWNrZXR7VGl0bGV9IG5lICREQlRpY2tldHtUaXRsZX0gKSB7CiAgICAgICAgICAgICRTdGF0dXMgPSAkVGlja2V0VXBkYXRlZFN0YXR1czsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRUaXRsZVVwZGF0ZSgKICAgICAgICAgICAgICAgIFRpdGxlICAgID0+ICRUaWNrZXR7VGl0bGV9LAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJERCVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCB1cGRhdGUgVGl0bGUgZm9yIFRpY2tldElEICREQlRpY2tldHtUaWNrZXRJRH0iLAogICAgICAgICAgICApIHVubGVzcyAkU3VjY2VzczsKICAgICAgICB9CgogICAgICAgICMgcXVldWUKICAgICAgICBpZiAoICEkVGlja2V0e1F1ZXVlSUR9ICYmICRUaWNrZXR7UXVldWV9ICkgewogICAgICAgICAgICAkVGlja2V0e1F1ZXVlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPlF1ZXVlTG9va3VwKAogICAgICAgICAgICAgICAgUXVldWUgPT4gJFRpY2tldHtRdWV1ZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRUaWNrZXR7UXVldWVJRH0gfHw9ICRTa2lwRW1wdHkgPyAkREJUaWNrZXR7UXVldWVJRH0gOiAkUGFyYW17T2JqZWN0RGF0YX17UXVldWVJRH07CgogICAgICAgIGlmICggJFRpY2tldHtRdWV1ZUlEfSBuZSAkREJUaWNrZXR7UXVldWVJRH0gKSB7CiAgICAgICAgICAgICRTdGF0dXMgPSAkVGlja2V0VXBkYXRlZFN0YXR1czsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRRdWV1ZVNldCgKICAgICAgICAgICAgICAgIFF1ZXVlSUQgID0+ICRUaWNrZXR7UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHVwZGF0ZSBRdWV1ZSBmb3IgVGlja2V0SUQgJERCVGlja2V0e1RpY2tldElEfSIsCiAgICAgICAgICAgICkgdW5sZXNzICRTdWNjZXNzOwogICAgICAgIH0KCiAgICAgICAgIyBuZWVkIGZvciBjaGVja2luZyB0aGUgYWN0aXZhdGVkIGZlYXR1cmVzOiBUaWNrZXQ6OlR5cGUsIFRpY2tldDo6UmVzcG9uc2libGUsIFRpY2tldDo6U2VydmljZQogICAgICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgICAgICAjIHR5cGUKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpUeXBlJykgKSB7CiAgICAgICAgICAgIGlmICggISRUaWNrZXR7VHlwZUlEfSAmJiAkVGlja2V0e1R5cGV9ICkgewogICAgICAgICAgICAgICAgJFRpY2tldHtUeXBlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKS0+VHlwZUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICRUaWNrZXR7VHlwZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRUaWNrZXR7VHlwZUlEfSB8fD0gJFNraXBFbXB0eSA/ICREQlRpY2tldHtUeXBlSUR9IDogJFBhcmFte09iamVjdERhdGF9e1R5cGVJRH07CgogICAgICAgICAgICBpZiAoICRUaWNrZXR7VHlwZUlEfSBuZSAkREJUaWNrZXR7VHlwZUlEfSApIHsKICAgICAgICAgICAgICAgICRTdGF0dXMgPSAkVGlja2V0VXBkYXRlZFN0YXR1czsKICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0VHlwZVNldCgKICAgICAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAkVGlja2V0e1R5cGVJRH0sCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJERCVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHVwZGF0ZSBUeXBlIGZvciBUaWNrZXRJRCAkREJUaWNrZXR7VGlja2V0SUR9IiwKICAgICAgICAgICAgICAgICkgdW5sZXNzICRTdWNjZXNzOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpTZXJ2aWNlJykgKSB7CgogICAgICAgICAgICAjIHNlcnZpY2UKICAgICAgICAgICAgaWYgKCAhJFRpY2tldHtTZXJ2aWNlSUR9ICYmICRUaWNrZXR7U2VydmljZX0gKSB7CiAgICAgICAgICAgICAgICAkVGlja2V0e1NlcnZpY2VJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJFRpY2tldHtTZXJ2aWNlfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFRpY2tldHtTZXJ2aWNlSUR9IHx8PSAkU2tpcEVtcHR5ID8gJERCVGlja2V0e1NlcnZpY2VJRH0gOiAkUGFyYW17T2JqZWN0RGF0YX17U2VydmljZUlEfTsKICAgICAgICAgICAgJERCVGlja2V0e1NlcnZpY2VJRH0gLy89ICcnOwoKICAgICAgICAgICAgaWYgKCAhJFRpY2tldHtTZXJ2aWNlSUR9ICYmICREQlRpY2tldHtTZXJ2aWNlSUR9ICkgewogICAgICAgICAgICAgICAgJExvZ09iamVjdC0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJVbmV4cGVjdGVkIHN0YXRlIGVuY291bnRlcmVkIGZvciBleGlzdGluZyBUaWNrZXRJRCAkVGlja2V0e1RpY2tldElEfSAoRW50aXR5ICRQYXJhbXtDb3VudGVyfSk6ICIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiU2VydmljZXMgY2FuIG5vdCBiZSBlbXB0aWVkIC0gbm90IGEgcmVhbCBjaHJvbm9sb2dpY2FsIHVwZGF0ZTsgaWdub3JpbmcgdGhpcywgYW5kIGtlZXBpbmcgdGhlIFNlcnZpY2UuIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJFRpY2tldHtTZXJ2aWNlSUR9ICYmICRUaWNrZXR7U2VydmljZUlEfSBuZSAkREJUaWNrZXR7U2VydmljZUlEfSApIHsKICAgICAgICAgICAgICAgICRTdGF0dXMgPSAkVGlja2V0VXBkYXRlZFN0YXR1czsKICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VydmljZVNldCgKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJFRpY2tldHtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHVwZGF0ZSBTZXJ2aWNlIGZvciBUaWNrZXRJRCAkREJUaWNrZXR7VGlja2V0SUR9IiwKICAgICAgICAgICAgICAgICkgdW5sZXNzICRTdWNjZXNzOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIFNMQQogICAgICAgICAgICBpZiAoICEkVGlja2V0e1NMQUlEfSAmJiAkVGlja2V0e1NMQX0gKSB7CiAgICAgICAgICAgICAgICAkVGlja2V0e1NMQUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKS0+U0xBTG9va3VwKAogICAgICAgICAgICAgICAgICAgIFNMQSA9PiAkVGlja2V0e1NMQX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRUaWNrZXR7U0xBSUR9IHx8PSAkU2tpcEVtcHR5ID8gJERCVGlja2V0e1NMQUlEfSA6ICRQYXJhbXtPYmplY3REYXRhfXtTTEFJRH07CiAgICAgICAgICAgICREQlRpY2tldHtTTEFJRH0gLy89ICcnOwoKICAgICAgICAgICAgaWYgKCAhJFRpY2tldHtTTEFJRH0gJiYgJERCVGlja2V0e1NMQUlEfSApIHsKICAgICAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVW5leHBlY3RlZCBzdGF0ZSBlbmNvdW50ZXJlZCBmb3IgZXhpc3RpbmcgVGlja2V0SUQgJFRpY2tldHtUaWNrZXRJRH0gKEVudGl0eSAkUGFyYW17Q291bnRlcn0pOiAiCiAgICAgICAgICAgICAgICAgICAgICAgIC4gIlNMQXMgY2FuIG5vdCBiZSBlbXB0aWVkIC0gbm90IGEgcmVhbCBjaHJvbm9sb2dpY2FsIHVwZGF0ZTsgaWdub3JpbmcgdGhpcywgYW5kIGtlZXBpbmcgdGhlIFNMQS4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkVGlja2V0e1NMQUlEfSAmJiAkVGlja2V0e1NMQUlEfSBuZSAkREJUaWNrZXR7U0xBSUR9ICkgewogICAgICAgICAgICAgICAgJFN0YXR1cyA9ICRUaWNrZXRVcGRhdGVkU3RhdHVzOwogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTTEFTZXQoCiAgICAgICAgICAgICAgICAgICAgU0xBSUQgICAgPT4gJFRpY2tldHtTTEFJRH0sCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJERCVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHVwZGF0ZSBTTEEgZm9yIFRpY2tldElEICREQlRpY2tldHtUaWNrZXRJRH0iLAogICAgICAgICAgICAgICAgKSB1bmxlc3MgJFN1Y2Nlc3M7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3duZXIKICAgICAgICBpZiAoICEkVGlja2V0e093bmVySUR9ICYmICRUaWNrZXR7T3duZXJ9ICkgewogICAgICAgICAgICAkVGlja2V0e093bmVySUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxvb2t1cCgKICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGlja2V0e093bmVyfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJFRpY2tldHtPd25lcklEfSB8fD0gJFNraXBFbXB0eSA/ICREQlRpY2tldHtPd25lcklEfSA6ICRQYXJhbXtPYmplY3REYXRhfXtPd25lcklEfTsKCiAgICAgICAgaWYgKCAhJFRpY2tldHtPd25lcklEfSAmJiAkREJUaWNrZXR7T3duZXJJRH0gKSB7CiAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlVuZXhwZWN0ZWQgc3RhdGUgZW5jb3VudGVyZWQgZm9yIGV4aXN0aW5nIFRpY2tldElEICRUaWNrZXR7VGlja2V0SUR9IChFbnRpdHkgJFBhcmFte0NvdW50ZXJ9KTogIgogICAgICAgICAgICAgICAgICAgIC4gIk93bmVycyBjYW4gbm90IGJlIGVtcHRpZWQgLSBub3QgYSByZWFsIGNocm9ub2xvZ2ljYWwgdXBkYXRlOyBpZ25vcmluZyB0aGlzLCBhbmQga2VlcGluZyB0aGUgT3duZXIuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICggJFRpY2tldHtPd25lcklEfSAmJiAkVGlja2V0e093bmVySUR9IG5lICREQlRpY2tldHtPd25lcklEfSApIHsKICAgICAgICAgICAgJFN0YXR1cyA9ICRUaWNrZXRVcGRhdGVkU3RhdHVzOwogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldE93bmVyU2V0KAogICAgICAgICAgICAgICAgTmV3VXNlcklEID0+ICRUaWNrZXR7T3duZXJJRH0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJERCVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgdXBkYXRlIE93bmVyIGZvciBUaWNrZXRJRCAkREJUaWNrZXR7VGlja2V0SUR9IiwKICAgICAgICAgICAgKSB1bmxlc3MgJFN1Y2Nlc3M7CiAgICAgICAgfQoKICAgICAgICAjIGxvY2sKICAgICAgICBpZiAoICEkVGlja2V0e0xvY2tJRH0gJiYgJFRpY2tldHtMb2NrfSApIHsKICAgICAgICAgICAgJFRpY2tldHtMb2NrSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvY2snKS0+TG9ja0xvb2t1cCgKICAgICAgICAgICAgICAgIExvY2sgPT4gJFRpY2tldHtMb2NrfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJFRpY2tldHtMb2NrSUR9IHx8PSAkU2tpcEVtcHR5ID8gJERCVGlja2V0e0xvY2tJRH0gOiAkUGFyYW17T2JqZWN0RGF0YX17TG9ja0lEfTsKCiAgICAgICAgIyBjaGVjayB3aGV0aGVyIGFuIG93bmVyIGV4aXN0cyBoZXJlIC0gaWYgbm90IHRyeWluZyB0byBsb2NrIHdpbGwgZmFpbAogICAgICAgIGlmICggJFRpY2tldHtPd25lcklEfSAmJiAkVGlja2V0e0xvY2tJRH0gbmUgJERCVGlja2V0e0xvY2tJRH0gKSB7CiAgICAgICAgICAgICRTdGF0dXMgPSAkVGlja2V0VXBkYXRlZFN0YXR1czsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRMb2NrU2V0KAogICAgICAgICAgICAgICAgTG9ja0lEICAgPT4gJFRpY2tldHtMb2NrSUR9LAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJERCVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCB1cGRhdGUgTG9jayBmb3IgVGlja2V0SUQgJERCVGlja2V0e1RpY2tldElEfSIsCiAgICAgICAgICAgICkgdW5sZXNzICRTdWNjZXNzOwogICAgICAgIH0KCiAgICAgICAgIyByZXNwb25zaWJsZQogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlJlc3BvbnNpYmxlJykgKSB7CiAgICAgICAgICAgIGlmICggISRUaWNrZXR7UmVzcG9uc2libGVJRH0gJiYgJFRpY2tldHtSZXNwb25zaWJsZX0gKSB7CiAgICAgICAgICAgICAgICAkVGlja2V0e1Jlc3BvbnNpYmxlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRpY2tldHtSZXNwb25zaWJsZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRUaWNrZXR7UmVzcG9uc2libGVJRH0gfHw9ICRTa2lwRW1wdHkgPyAkREJUaWNrZXR7UmVzcG9uc2libGVJRH0gOiAkUGFyYW17T2JqZWN0RGF0YX17UmVzcG9uc2libGVJRH07CgogICAgICAgICAgICBpZiAoICEkVGlja2V0e1Jlc3BvbnNpYmxlSUR9ICYmICREQlRpY2tldHtSZXNwb25zaWJsZUlEfSApIHsKICAgICAgICAgICAgICAgICRMb2dPYmplY3QtPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVW5leHBlY3RlZCBzdGF0ZSBlbmNvdW50ZXJlZCBmb3IgZXhpc3RpbmcgVGlja2V0SUQgJFRpY2tldHtUaWNrZXRJRH0gKEVudGl0eSAkUGFyYW17Q291bnRlcn0pOiAiCiAgICAgICAgICAgICAgICAgICAgICAgIC4gIlJlc3BvbnNpYmxlcyBjYW4gbm90IGJlIGVtcHRpZWQgLSBub3QgYSByZWFsIGNocm9ub2xvZ2ljYWwgdXBkYXRlOyBpZ25vcmluZyB0aGlzLCBhbmQga2VlcGluZyB0aGUgUmVzcG9uc2libGUuIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJFRpY2tldHtSZXNwb25zaWJsZUlEfSAmJiAkVGlja2V0e1Jlc3BvbnNpYmxlSUR9IG5lICREQlRpY2tldHtSZXNwb25zaWJsZUlEfSApIHsKICAgICAgICAgICAgICAgICRTdGF0dXMgPSAkVGlja2V0VXBkYXRlZFN0YXR1czsKICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0UmVzcG9uc2libGVTZXQoCiAgICAgICAgICAgICAgICAgICAgTmV3VXNlcklEID0+ICRUaWNrZXR7UmVzcG9uc2libGVJRH0sCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgdXBkYXRlIFJlc3BvbnNpYmxlIGZvciBUaWNrZXRJRCAkREJUaWNrZXR7VGlja2V0SUR9IiwKICAgICAgICAgICAgICAgICkgdW5sZXNzICRTdWNjZXNzOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHByaW9yaXR5CiAgICAgICAgaWYgKCAhJFRpY2tldHtQcmlvcml0eUlEfSAmJiAkVGlja2V0e1ByaW9yaXR5fSApIHsKICAgICAgICAgICAgJFRpY2tldHtQcmlvcml0eUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScpLT5Qcmlvcml0eUxvb2t1cCgKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICRUaWNrZXR7UHJpb3JpdHl9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkVGlja2V0e1ByaW9yaXR5SUR9IHx8PSAkU2tpcEVtcHR5ID8gJERCVGlja2V0e1ByaW9yaXR5SUR9IDogJFBhcmFte09iamVjdERhdGF9e1ByaW9yaXR5SUR9OwoKICAgICAgICBpZiAoICRUaWNrZXR7UHJpb3JpdHlJRH0gbmUgJERCVGlja2V0e1ByaW9yaXR5SUR9ICkgewogICAgICAgICAgICAkU3RhdHVzID0gJFRpY2tldFVwZGF0ZWRTdGF0dXM7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0UHJpb3JpdHlTZXQoCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEID0+ICRUaWNrZXR7UHJpb3JpdHlJRH0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCB1cGRhdGUgUHJpb3JpdHkgZm9yIFRpY2tldElEICREQlRpY2tldHtUaWNrZXRJRH0iLAogICAgICAgICAgICApIHVubGVzcyAkU3VjY2VzczsKICAgICAgICB9CgogICAgICAgICMgc3RhdGUKICAgICAgICBpZiAoICEkVGlja2V0e1N0YXRlSUR9ICYmICRUaWNrZXR7U3RhdGV9ICkgewogICAgICAgICAgICAkVGlja2V0e1N0YXRlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRlJyktPlN0YXRlTG9va3VwKAogICAgICAgICAgICAgICAgU3RhdGUgPT4gJFRpY2tldHtTdGF0ZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRUaWNrZXR7U3RhdGVJRH0gfHw9ICRTa2lwRW1wdHkgPyAkREJUaWNrZXR7U3RhdGVJRH0gOiAkUGFyYW17T2JqZWN0RGF0YX17U3RhdGVJRH07CgogICAgICAgIGlmICggJFRpY2tldHtTdGF0ZUlEfSBuZSAkREJUaWNrZXR7U3RhdGVJRH0gKSB7CiAgICAgICAgICAgICRTdGF0dXMgPSAkVGlja2V0VXBkYXRlZFN0YXR1czsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdGF0ZVNldCgKICAgICAgICAgICAgICAgIFN0YXRlSUQgID0+ICRUaWNrZXR7U3RhdGVJRH0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHVwZGF0ZSBTdGF0ZSBmb3IgVGlja2V0SUQgJERCVGlja2V0e1RpY2tldElEfSIsCiAgICAgICAgICAgICkgdW5sZXNzICRTdWNjZXNzOwogICAgICAgIH0KCiAgICAgICAgIyBhcmNoaXZlIGZsYWcKICAgICAgICAkVGlja2V0e0FyY2hpdmVGbGFnfSB8fD0gJFNraXBFbXB0eSA/ICREQlRpY2tldHtBcmNoaXZlRmxhZ30gOiAkUGFyYW17T2JqZWN0RGF0YX17QXJjaGl2ZUZsYWd9OwoKICAgICAgICBpZiAoICRUaWNrZXR7QXJjaGl2ZUZsYWd9IG5lICREQlRpY2tldHtBcmNoaXZlRmxhZ30gKSB7CiAgICAgICAgICAgICRTdGF0dXMgPSAkVGlja2V0VXBkYXRlZFN0YXR1czsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRBcmNoaXZlRmxhZ1NldCgKICAgICAgICAgICAgICAgIEFyY2hpdmVGbGFnID0+ICRUaWNrZXR7QXJjaGl2ZUZsYWd9LAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgPT4gJERCVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCB1cGRhdGUgQXJjaGl2ZUZsYWcgZm9yIFRpY2tldElEICREQlRpY2tldHtUaWNrZXRJRH0iLAogICAgICAgICAgICApIHVubGVzcyAkU3VjY2VzczsKICAgICAgICB9CiAgICB9CgogICAgIyBBIG5ldyB0aWNrZXQgd2lsbCBiZSBjcmVhdGVkLiBDb2xsZWN0IHRoZSBpbnB1dCBmb3IgVGlja2V0Q3JlYXRlIGluICVEQlRpY2tldC4KICAgIGVsc2UgewogICAgICAgICRTdGF0dXMgPSAnVGlja2V0IGNyZWF0ZWQnOwoKICAgICAgICAjIGN1c3RvbWVyCiAgICAgICAgJERCVGlja2V0e0N1c3RvbWVySUR9ICAgPSAkVGlja2V0e0N1c3RvbWVySUR9ICAgICB8fCAkUGFyYW17T2JqZWN0RGF0YX17Q3VzdG9tZXJJRH07CiAgICAgICAgJERCVGlja2V0e0N1c3RvbWVyVXNlcn0gPSAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSB8fCAkUGFyYW17T2JqZWN0RGF0YX17Q3VzdG9tZXJVc2VySUR9OwoKICAgICAgICAjIHRpdGxlCiAgICAgICAgJERCVGlja2V0e1RpdGxlfSA9ICggJFRpY2tldHtUaXRsZX0gfHwgKCBkZWZpbmVkICRUaWNrZXR7VGl0bGV9ICYmICRUaWNrZXR7VGl0bGV9IGVxICcwJyApICkKICAgICAgICAgICAgPwogICAgICAgICAgICAkVGlja2V0e1RpdGxlfQogICAgICAgICAgICA6CiAgICAgICAgICAgICRQYXJhbXtPYmplY3REYXRhfXtTdWJqZWN0fTsKCiAgICAgICAgIyBxdWV1ZQogICAgICAgIGlmICggISRUaWNrZXR7UXVldWVJRH0gJiYgJFRpY2tldHtRdWV1ZX0gKSB7CiAgICAgICAgICAgICRUaWNrZXR7UXVldWVJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVMb29rdXAoCiAgICAgICAgICAgICAgICBRdWV1ZSA9PiAkVGlja2V0e1F1ZXVlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJERCVGlja2V0e1F1ZXVlSUR9ID0gJFRpY2tldHtRdWV1ZUlEfSB8fCAkUGFyYW17T2JqZWN0RGF0YX17UXVldWVJRH07CgogICAgICAgICMgbmVlZCBmb3IgY2hlY2tpbmcgdGhlIGFjdGl2YXRlZCBmZWF0dXJlczogVGlja2V0OjpUeXBlLCBUaWNrZXQ6OlJlc3BvbnNpYmxlLCBUaWNrZXQ6OlNlcnZpY2UKICAgICAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICAgICAgIyB0eXBlCiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ1RpY2tldDo6VHlwZScpICkgewogICAgICAgICAgICBpZiAoICEkVGlja2V0e1R5cGVJRH0gJiYgJFRpY2tldHtUeXBlfSApIHsKICAgICAgICAgICAgICAgICRUaWNrZXR7VHlwZUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyktPlR5cGVMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAkVGlja2V0e1R5cGV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkREJUaWNrZXR7VHlwZUlEfSA9ICRUaWNrZXR7VHlwZUlEfSB8fCAkUGFyYW17T2JqZWN0RGF0YX17VHlwZUlEfTsKICAgICAgICB9CgogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSApIHsKCiAgICAgICAgICAgICMgc2VydmljZQogICAgICAgICAgICBpZiAoICEkVGlja2V0e1NlcnZpY2VJRH0gJiYgJFRpY2tldHtTZXJ2aWNlfSApIHsKICAgICAgICAgICAgICAgICRUaWNrZXR7U2VydmljZUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkVGlja2V0e1NlcnZpY2V9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkREJUaWNrZXR7U2VydmljZUlEfSA9ICRUaWNrZXR7U2VydmljZUlEfSB8fCAkUGFyYW17T2JqZWN0RGF0YX17U2VydmljZUlEfTsKCiAgICAgICAgICAgICMgc2xhCiAgICAgICAgICAgIGlmICggISRUaWNrZXR7U0xBSUR9ICYmICRUaWNrZXR7U0xBfSApIHsKICAgICAgICAgICAgICAgICRUaWNrZXR7U0xBSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpLT5TTEFMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgU0xBID0+ICRUaWNrZXR7U0xBfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJERCVGlja2V0e1NMQUlEfSA9ICRUaWNrZXR7U0xBSUR9IHx8ICRQYXJhbXtPYmplY3REYXRhfXtTTEFJRH07CiAgICAgICAgfQoKICAgICAgICAjIG93bmVyCiAgICAgICAgaWYgKCAhJFRpY2tldHtPd25lcklEfSAmJiAkVGlja2V0e093bmVyfSApIHsKICAgICAgICAgICAgJFRpY2tldHtPd25lcklEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRpY2tldHtPd25lcn0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICREQlRpY2tldHtPd25lcklEfSA9ICRUaWNrZXR7T3duZXJJRH0gfHwgJFBhcmFte09iamVjdERhdGF9e093bmVySUR9OwoKICAgICAgICAjIGxvY2sKICAgICAgICBpZiAoICEkVGlja2V0e0xvY2tJRH0gJiYgJFRpY2tldHtMb2NrfSApIHsKICAgICAgICAgICAgJFRpY2tldHtMb2NrSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvY2snKS0+TG9ja0xvb2t1cCgKICAgICAgICAgICAgICAgIExvY2sgPT4gJFRpY2tldHtMb2NrfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJERCVGlja2V0e0xvY2tJRH0gPSAkVGlja2V0e0xvY2tJRH0gfHwgJFBhcmFte09iamVjdERhdGF9e0xvY2tJRH07CgogICAgICAgICMgcmVzcG9uc2libGUKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnVGlja2V0OjpSZXNwb25zaWJsZScpICkgewogICAgICAgICAgICBpZiAoICEkVGlja2V0e1Jlc3BvbnNpYmxlSUR9ICYmICRUaWNrZXR7UmVzcG9uc2libGV9ICkgewogICAgICAgICAgICAgICAgJFRpY2tldHtSZXNwb25zaWJsZUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRUaWNrZXR7UmVzcG9uc2libGV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkREJUaWNrZXR7UmVzcG9uc2libGVJRH0gPSAkVGlja2V0e1Jlc3BvbnNpYmxlSUR9IHx8ICRQYXJhbXtPYmplY3REYXRhfXtSZXNwb25zaWJsZUlEfTsKICAgICAgICB9CgogICAgICAgICMgcHJpb3JpdHkKICAgICAgICBpZiAoICEkVGlja2V0e1ByaW9yaXR5SUR9ICYmICRUaWNrZXR7UHJpb3JpdHl9ICkgewogICAgICAgICAgICAkVGlja2V0e1ByaW9yaXR5SUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5JyktPlByaW9yaXR5TG9va3VwKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJFRpY2tldHtQcmlvcml0eX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICREQlRpY2tldHtQcmlvcml0eUlEfSA9ICRUaWNrZXR7UHJpb3JpdHlJRH0gfHwgJFBhcmFte09iamVjdERhdGF9e1ByaW9yaXR5SUR9OwoKICAgICAgICAjIHN0YXRlCiAgICAgICAgaWYgKCAhJFRpY2tldHtTdGF0ZUlEfSAmJiAkVGlja2V0e1N0YXRlfSApIHsKICAgICAgICAgICAgJFRpY2tldHtTdGF0ZUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpLT5TdGF0ZUxvb2t1cCgKICAgICAgICAgICAgICAgIFN0YXRlID0+ICRUaWNrZXR7U3RhdGV9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkREJUaWNrZXR7U3RhdGVJRH0gPSAkVGlja2V0e1N0YXRlSUR9IHx8ICRQYXJhbXtPYmplY3REYXRhfXtTdGF0ZUlEfTsKCiAgICAgICAgIyBhcmNoaXZlIGZsYWcKICAgICAgICAkREJUaWNrZXR7QXJjaGl2ZUZsYWd9ID0gJFRpY2tldHtBcmNoaXZlRmxhZ30gfHwgJFBhcmFte09iamVjdERhdGF9e0FyY2hpdmVGbGFnfTsKCiAgICAgICAgIyBIYW5kbGUgcGVuZGluZyB0cmFuc2FjdGlvbiBldmVudHMgb2YgdGhlIHByZXZpb3VzbHkgY3JlYXRlZCB0aWNrZXQKICAgICAgICAjIGJlZm9yZSBjcmVhdGluZyBhIG5ldyB0aWNrZXQuCiAgICAgICAgJFRpY2tldE9iamVjdC0+RXZlbnRIYW5kbGVyVHJhbnNhY3Rpb247CgogICAgICAgICMgQ3JlYXRlIGEgbmV3IHRpY2tldC4gVGhlIHRyYW5zYWN0aW9uIGV2ZW50cyBnZW5lcmF0ZWQgaGVyZSB3aWxsIGJlIGhhbmRsZWQKICAgICAgICAjIGJlZm9yZSB0aGUgbmV4dCB0aWNrZXQgY3JlYXRpb24gb3IgZHVyaW5nIGdsb2JhbCBkZXN0cnVjdGlvbi4KICAgICAgICAkREJUaWNrZXR7VGlja2V0SUR9ID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgICAgICAgICAlREJUaWNrZXQsCiAgICAgICAgICAgIFROICAgICA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0gLy8gJycsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ0NvdWxkIG5vdCBjcmVhdGUgbmV3IHRpY2tldCcsCiAgICAgICAgKSB1bmxlc3MgJERCVGlja2V0e1RpY2tldElEfTsKCiAgICAgICAgJERCVGlja2V0e1RpY2tldE51bWJlcn0gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXROdW1iZXJMb29rdXAoCiAgICAgICAgICAgIFRpY2tldElEID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkVGlja2V0e0NyZWF0ZWR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fSAvLz0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgICAgICAgICByZXR1cm4gdW5sZXNzICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgICAgIFNRTCAgPT4gIlVQREFURSB0aWNrZXQgU0VUIGNyZWF0ZV90aW1lID0gPyBXSEVSRSBpZCA9ID8iLAogICAgICAgICAgICAgICAgQmluZCA9PiBbIFwkVGlja2V0e0NyZWF0ZWR9LCBcJERCVGlja2V0e1RpY2tldElEfSBdLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBGZXRjaCBhZGRpdGlvbmFsIGRhdGEgZnJvbSB0aGUgc291cmNlIGluc3RhbGxhdGlvbiBpZiBjb25maWd1cmVkLgogICAgICAgIG15ICRTeW5jREJDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ltcG9ydEV4cG9ydDo6VGlja2V0OjpTeW5jaHJvbml6ZVdpdGhGb3JlaWduREInKTsKICAgICAgICBpZiAoJFN5bmNEQkNvbmZpZykgewogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT5fU3luY2hyb25pemVFeHRlbmRlZERCRW50cmllcygKICAgICAgICAgICAgICAgIEZvcmVpZ25EQiAgICAgICA9PiAkU3luY0RCQ29uZmlnLAogICAgICAgICAgICAgICAgRm9yZWlnblRpY2tldElEID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBleHRlbmRlZCBEQiBlbnRyaWVzIGZvciB0aWNrZXQgJERCVGlja2V0e1RpY2tldElEfSIsCiAgICAgICAgICAgICkgdW5sZXNzICRTdWNjZXNzOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwogICAgbXkgJVN0YW5kYXJkTXVsdGlTZWxlY3QgICAgICAgPSBtYXAgeyAkXyA9PiAxIH0gcXcoIE11bHRpc2VsZWN0IERhdGFiYXNlIFdlYlNlcnZpY2UgKTsKCiAgICAjIGR5bmFtaWMgZmllbGRzCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJEF0dHIgKCBrZXlzICVUaWNrZXQgKSB7CgogICAgICAgICMgb25seSBoYW5kbGUgZHluYW1pYyBmaWVsZHMKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCB1bmxlc3MgJEF0dHIgPX4gbS9eRHluYW1pY0ZpZWxkXyguKykkLzsKCiAgICAgICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgTmFtZSA9PiAkMSwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aGUgY3VycmVudCB2YWx1ZQogICAgICAgIG15ICREQlZhbHVlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlR2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgbXVsdGkgc2VsZWN0IGZpZWxkcyBuZWVkIHNwZWNpYWwgdHJlYXRtZW50CiAgICAgICAgaWYgKCAkU3RhbmRhcmRNdWx0aVNlbGVjdHsgJER5bmFtaWNGaWVsZENvbmZpZy0+e0ZpZWxkVHlwZX0gfSB8fCByZWYgJERCVmFsdWUgZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJFRpY2tldHskQXR0cn0gPSAkVGlja2V0eyRBdHRyfSA/IFsgbWFwIHsgZGVjb2RlKCAnVVRGLTgnLCBkZWNvZGVfYmFzZTY0KCRfKSApIH0gc3BsaXQoIC8jIyMvLCAkVGlja2V0eyRBdHRyfSApIF0gOiBbXTsKICAgICAgICB9CgogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIHVubGVzcyAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVJc0RpZmZlcmVudCgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIFZhbHVlMSAgICAgICAgICAgICA9PiAkVGlja2V0eyRBdHRyfSwKICAgICAgICAgICAgVmFsdWUyICAgICAgICAgICAgID0+ICREQlZhbHVlLAogICAgICAgICk7CgogICAgICAgIGlmICggJFN0YXR1cyBlcSAnVGlja2V0IG5vdCBjaGFuZ2VkJyApIHsKICAgICAgICAgICAgJFN0YXR1cyA9ICdUaWNrZXQgdXBkYXRlZCc7CiAgICAgICAgfQoKICAgICAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5GaWVsZFZhbHVlVmFsaWRhdGUoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFRpY2tldHskQXR0cn0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIGlmICgkU3VjY2VzcykgewoKICAgICAgICAgICAgIyBzZXQgdGhlIHZhbHVlCiAgICAgICAgICAgICRTdWNjZXNzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlU2V0KAogICAgICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJERCVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVGlja2V0eyRBdHRyfSwKICAgICAgICAgICAgICAgIEV4dGVybmFsU291cmNlICAgICA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgdXBkYXRlICRBdHRyIHRvICckVGlja2V0eyRBdHRyfScgZm9yIFRpY2tldElEICREQlRpY2tldHtUaWNrZXRJRH0iLAogICAgICAgICkgdW5sZXNzICRTdWNjZXNzOwogICAgfQoKICAgIGlmICggJFBhcmFte0lkZW50aWZpZXJ9e1RpY2tldElEfSB8fCAkUGFyYW17T2JqZWN0RGF0YX17SW5jbHVkZUFydGljbGVzfSApIHsKCiAgICAgICAgIyBUT0RPOiB3aHkgdGhlIGNoZWNrIG9uIEluY2x1ZGVBcnRpY2xlcwogICAgICAgIGlmICggJFRpY2tldHtUaWNrZXRJRH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57VGlja2V0SURSZWxhdGlvbn17ICRUaWNrZXR7VGlja2V0SUR9IH0gPSAkREJUaWNrZXR7VGlja2V0SUR9OwogICAgICAgIH0KICAgIH0KICAgIGlmICggJFBhcmFte0lkZW50aWZpZXJ9e1RpY2tldE51bWJlcn0gKSB7CiAgICAgICAgJFNlbGYtPntUaWNrZXROdW1iZXJJRFJlbGF0aW9ufXsgJFRpY2tldHtUaWNrZXROdW1iZXJ9IH0gPSAkREJUaWNrZXR7VGlja2V0SUR9OwogICAgfQoKICAgICMgcmVtZW1iZXIgdGhlIHRpY2tldCBJRCBzbyB0aGF0IGFydGljbGVzIGNhbiBiZSBhdHRhY2hlZCB0byBpdAogICAgJFNlbGYtPntMYXN0VGlja2V0SUR9ID0gJERCVGlja2V0e1RpY2tldElEfTsKCiAgICByZXR1cm4gJFN0YXR1czsKfQoKc3ViIF9JbXBvcnRBcnRpY2xlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJUFydGljbGUgPSAkUGFyYW17QXJ0aWNsZX0tPiUqOwoKICAgIG15ICRUaWNrZXRJRCA9CiAgICAgICAgJEFydGljbGV7VGlja2V0SUR9ICYmICRTZWxmLT57VGlja2V0SURSZWxhdGlvbn17ICRBcnRpY2xle1RpY2tldElEfSB9ID8gJFNlbGYtPntUaWNrZXRJRFJlbGF0aW9ufXsgJEFydGljbGV7VGlja2V0SUR9IH0gOgogICAgICAgICRTZWxmLT57TGFzdFRpY2tldElEfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICRTZWxmLT57TGFzdFRpY2tldElEfSA6ICcnOwoKICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICVQYXJhbSwKICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgZmluZCBuZXcgVGlja2V0SUQgZm9yIEFydGljbGUiLAogICAgKSB1bmxlc3MgJFRpY2tldElEOwoKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgICMgYXZvaWQgZHVwbGljYXRlIGFydGljbGVzIGlmIEFydGljbGVJRCBpcyBnaXZlbgogICAgaWYgKCAkUGFyYW17SWRlbnRpZmllcn0gJiYgJFBhcmFte0lkZW50aWZpZXJ9e0FydGljbGVJRH0gJiYgJEFydGljbGV7QXJ0aWNsZUlEfSApIHsKICAgICAgICBteSBAREJBcnRpY2xlcyA9ICRBcnRpY2xlT2JqZWN0LT5BcnRpY2xlTGlzdCgKICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICdBcnRpY2xlIHNraXBwZWQnIGlmIEBEQkFydGljbGVzOwogICAgfQoKICAgIG15ICVWYWxpZEltcG9ydENoYW5uZWwgPSBtYXAgeyAkXyA9PiAxIH0gcXcoIEVtYWlsIEludGVybmFsIFBob25lICk7CiAgICBteSAkQ2hhbm5lbE5hbWUgICAgICAgID0gJEFydGljbGV7QXJ0aWNsZUJhY2tlbmR9IHx8ICRQYXJhbXtPYmplY3REYXRhfXtBcnRpY2xlQmFja2VuZH07CgogICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgJVBhcmFtLAogICAgICAgIE1lc3NhZ2UgPT4gIickQ2hhbm5lbE5hbWUnIGlzIChjdXJyZW50bHkpIG5vdCBhIHN1cHBvcnRlZCBBcnRpY2xlQmFja2VuZCIsCiAgICApIHVubGVzcyAkVmFsaWRJbXBvcnRDaGFubmVseyRDaGFubmVsTmFtZX07CgogICAgbXkgJENvbmZpZ09iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRBcnRpY2xlQmFja2VuZE9iamVjdCA9ICRBcnRpY2xlT2JqZWN0LT5CYWNrZW5kRm9yQ2hhbm5lbCggQ2hhbm5lbE5hbWUgPT4gJENoYW5uZWxOYW1lICk7CgogICAgaWYgKCAkQ2hhbm5lbE5hbWUgZXEgJ0VtYWlsJyAmJiAhJEFydGljbGV7TWVzc2FnZUlEfSApIHsKICAgICAgICBteSAkVGltZSAgID0gJEtlcm5lbDo6T00tPkNyZWF0ZSgnS2VybmVsOjpTeXN0ZW06OkRhdGVUaW1lJyktPlRvRXBvY2goKTsKICAgICAgICBteSAkUmFuZG9tID0gcmFuZCA5OTk5OTk7CiAgICAgICAgbXkgJEZRRE4gICA9ICRDb25maWdPYmplY3QtPkdldCgnRlFETicpOwogICAgICAgICRBcnRpY2xle01lc3NhZ2VJRH0gPSAiPCRUaW1lLiRSYW5kb21cQCRGUUROPiI7CiAgICB9CgogICAgbXkgJEhpc3RvcnlDb21tZW50ID0gJyUlSW1wb3J0ZWQgQXJ0aWNsZSc7CiAgICBpZiAoICRBcnRpY2xle1RpY2tldElEfSB8fCAkQXJ0aWNsZXtBcnRpY2xlSUR9ICkgewogICAgICAgICRIaXN0b3J5Q29tbWVudCAuPSAnIC0gTGVnYWN5JzsKICAgICAgICAkSGlzdG9yeUNvbW1lbnQgLj0gJEFydGljbGV7VGlja2V0SUR9ICA/ICIgVElEOiAkQXJ0aWNsZXtUaWNrZXRJRH07IiAgOiAnJzsKICAgICAgICAkSGlzdG9yeUNvbW1lbnQgLj0gJEFydGljbGV7QXJ0aWNsZUlEfSA/ICIgQUlEOiAkQXJ0aWNsZXtBcnRpY2xlSUR9OyIgOiAnJzsKICAgIH0KCiAgICAjIEhhbmRsZSBwZW5kaW5nIHRyYW5zYWN0aW9uIGV2ZW50cyBvZiB0aGUgcHJldmlvdXNseSBjcmVhdGVkIGFydGljbGUKICAgICMgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IGFydGljbGUuCiAgICAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkV2ZW50SGFuZGxlclRyYW5zYWN0aW9uOwogICAgJEFydGljbGVPYmplY3QtPkV2ZW50SGFuZGxlclRyYW5zYWN0aW9uOwoKICAgIG15ICRBcnRpY2xlSUQgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICAgICAgTm9BZ2VudE5vdGlmeSAgICAgICAgPT4gMSwKICAgICAgICBUaWNrZXRJRCAgICAgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgU2VuZGVyVHlwZSAgICAgICAgICAgPT4gJEFydGljbGV7U2VuZGVyVHlwZX0gfHwgJFBhcmFte09iamVjdERhdGF9e1NlbmRlclR5cGV9LAogICAgICAgIElzVmlzaWJsZUZvckN1c3RvbWVyID0+IGRlZmluZWQgJEFydGljbGV7SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9CiAgICAgICAgICAgICYmICRBcnRpY2xle0lzVmlzaWJsZUZvckN1c3RvbWVyfSBuZSAnJyA/ICRBcnRpY2xle0lzVmlzaWJsZUZvckN1c3RvbWVyfSA6ICRQYXJhbXtPYmplY3REYXRhfXtJc1Zpc2libGVGb3JDdXN0b21lcn0gLy8gMCwKICAgICAgICBGcm9tICAgICAgICAgICA9PiAkQXJ0aWNsZXtGcm9tfSwKICAgICAgICBUbyAgICAgICAgICAgICA9PiAkQXJ0aWNsZXtUb30sCiAgICAgICAgQ2MgICAgICAgICAgICAgPT4gJEFydGljbGV7Q2N9LAogICAgICAgIEJjYyAgICAgICAgICAgID0+ICRBcnRpY2xle0JjY30sCiAgICAgICAgUmVwbHlUbyAgICAgICAgPT4gJEFydGljbGV7UmVwbHlUb30sCiAgICAgICAgSW5SZXBseVRvICAgICAgPT4gJEFydGljbGV7SW5SZXBseVRvfSwKICAgICAgICBSZWZlcmVuY2VzICAgICA9PiAkQXJ0aWNsZXtSZWZlcmVuY2VzfSwKICAgICAgICBTdWJqZWN0ICAgICAgICA9PiAkQXJ0aWNsZXtTdWJqZWN0fSAgfHwgJFBhcmFte09iamVjdERhdGF9e1N1YmplY3R9LAogICAgICAgIEJvZHkgICAgICAgICAgID0+ICRBcnRpY2xle0JvZHl9ICAgICB8fCAkUGFyYW17T2JqZWN0RGF0YX17Qm9keX0sCiAgICAgICAgQ2hhcnNldCAgICAgICAgPT4gJEFydGljbGV7Q2hhcnNldH0gIHx8ICd1dGYtOCcsCiAgICAgICAgTWltZVR5cGUgICAgICAgPT4gJEFydGljbGV7TWltZVR5cGV9IHx8ICd0ZXh0L3BsYWluJywKICAgICAgICBIaXN0b3J5VHlwZSAgICA9PiAnTWlzYycsCiAgICAgICAgSGlzdG9yeUNvbW1lbnQgPT4gJEhpc3RvcnlDb21tZW50LAogICAgICAgIE1lc3NhZ2VJRCAgICAgID0+ICRBcnRpY2xle01lc3NhZ2VJRH0sCiAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgJVBhcmFtLAogICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGFydGljbGUiLAogICAgKSB1bmxlc3MgJEFydGljbGVJRDsKCiAgICBpZiAoICRBcnRpY2xle0NyZWF0ZVRpbWV9ICkgewogICAgICAgICRTZWxmLT57REJPYmplY3R9IC8vPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgcmV0dXJuIHVubGVzcyAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gIlVQREFURSBhcnRpY2xlIFNFVCBjcmVhdGVfdGltZSA9ID8gV0hFUkUgaWQgPSA/IiwKICAgICAgICAgICAgQmluZCA9PiBbIFwkQXJ0aWNsZXtDcmVhdGVUaW1lfSwgXCRBcnRpY2xlSUQgXSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRTeW5jREJDb25maWcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ltcG9ydEV4cG9ydDo6VGlja2V0OjpTeW5jaHJvbml6ZVdpdGhGb3JlaWduREInKTsKICAgIGlmICgkU3luY0RCQ29uZmlnKSB7CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+X1N5bmNocm9uaXplRXh0ZW5kZWREQkVudHJpZXMoCiAgICAgICAgICAgIEZvcmVpZ25EQiAgICAgICAgPT4gJFN5bmNEQkNvbmZpZywKICAgICAgICAgICAgRm9yZWlnbkFydGljbGVJRCA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBleHRlbmRlZCBEQiBlbnRyaWVzIGZvciB0aWNrZXQgJEFydGljbGVJRCIsCiAgICAgICAgKSB1bmxlc3MgJFN1Y2Nlc3M7CiAgICB9CgogICAgIyBhdHRhY2htZW50cwogICAgaWYgKCAkUGFyYW17T2JqZWN0RGF0YX17SW5jbHVkZUF0dGFjaG1lbnRzfSAmJiAkQXJ0aWNsZXtBdHRhY2htZW50c30gKSB7CiAgICAgICAgZm9yIG15ICRBdHRhY2htZW50U3RyaW5nICggJEFydGljbGV7QXR0YWNobWVudHN9LT5AKiApIHsKICAgICAgICAgICAgbXkgJUF0dGFjaG1lbnQgPSBzcGxpdCggLyMjIy8sICRBdHRhY2htZW50U3RyaW5nLCAtMSApOwoKICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBrZXlzICVBdHRhY2htZW50ICkgewogICAgICAgICAgICAgICAgJEF0dGFjaG1lbnR7JEtleX0gPSAkQXR0YWNobWVudHskS2V5fSBlcSAnJyA/ICcnIDogZGVjb2RlX2Jhc2U2NCggJEF0dGFjaG1lbnR7JEtleX0gKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgS0VZOgogICAgICAgICAgICBmb3IgbXkgJEtleSAocXcoIEZpbGVuYW1lIENvbnRlbnRUeXBlIERpc3Bvc2l0aW9uICkpIHsKICAgICAgICAgICAgICAgIG5leHQgS0VZIHVubGVzcyAkQXR0YWNobWVudHskS2V5fTsKCiAgICAgICAgICAgICAgICAkQXR0YWNobWVudHskS2V5fSA9IEVuY29kZTo6ZGVjb2RlKCAnVVRGLTgnLCAkQXR0YWNobWVudHskS2V5fSApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZVdyaXRlQXR0YWNobWVudCgKICAgICAgICAgICAgICAgICVBdHRhY2htZW50LAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiRXJyb3Igd2l0aCBpbXBvcnRpbmcgYW4gYXR0YWNobWVudCBmb3IgYXJ0aWNsZSAkQXJ0aWNsZUlEIiwKICAgICAgICAgICAgKSB1bmxlc3MgJFN1Y2Nlc3M7CiAgICAgICAgfQogICAgfQoKICAgICMgcGxhaW4gZW1haWwKICAgIGlmICggJEFydGljbGV7UGxhaW5FbWFpbH0gKSB7CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVXcml0ZVBsYWluKAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgRW1haWwgICAgID0+ICRBcnRpY2xle1BsYWluRW1haWx9LAogICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBNZXNzYWdlID0+ICJFcnJvciB3aXRoIGltcG9ydGluZyB0aGUgcGxhaW4gZW1haWwgZm9yIGFydGljbGUgJEFydGljbGVJRCIsCiAgICAgICAgKSB1bmxlc3MgJFN1Y2Nlc3M7CiAgICB9CgogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKICAgIG15ICVTdGFuZGFyZE11bHRpU2VsZWN0ICAgICAgID0gbWFwIHsgJF8gPT4gMSB9IHF3KCBNdWx0aXNlbGVjdCBEYXRhYmFzZSBXZWJTZXJ2aWNlICk7CgogICAgIyBkeW5hbWljIGZpZWxkcwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICRBdHRyICgga2V5cyAlQXJ0aWNsZSApIHsKICAgICAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnOwogICAgICAgIGlmICggJEF0dHIgPX4gL15EeW5hbWljRmllbGRfKC4rKSQvICkgewogICAgICAgICAgICAkRHluYW1pY0ZpZWxkQ29uZmlnID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICAgICAgTmFtZSA9PiAkMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdGhlIGN1cnJlbnQgdmFsdWUKICAgICAgICBteSAkREJWYWx1ZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZUdldCgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIG11bHRpIHNlbGVjdCBmaWVsZHMgbmVlZCBzcGVjaWFsIHRyZWF0bWVudAogICAgICAgIGlmICggJFN0YW5kYXJkTXVsdGlTZWxlY3R7ICREeW5hbWljRmllbGRDb25maWctPntGaWVsZFR5cGV9IH0gfHwgcmVmICREQlZhbHVlIGVxICdBUlJBWScgKSB7CiAgICAgICAgICAgICRBcnRpY2xleyRBdHRyfSA9ICRBcnRpY2xleyRBdHRyfSA/IFsgbWFwIHsgZGVjb2RlKCAnVVRGLTgnLCBkZWNvZGVfYmFzZTY0KCRfKSApIH0gc3BsaXQoIC8jIyMvLCAkQXJ0aWNsZXskQXR0cn0gKSBdIDogW107CiAgICAgICAgfQoKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCB1bmxlc3MgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlSXNEaWZmZXJlbnQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZTEgICAgICAgICAgICAgPT4gJEFydGljbGV7JEF0dHJ9LAogICAgICAgICAgICBWYWx1ZTIgICAgICAgICAgICAgPT4gJERCVmFsdWUsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RmllbGRWYWx1ZVZhbGlkYXRlKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRBcnRpY2xleyRBdHRyfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRTdWNjZXNzKSB7CgogICAgICAgICAgICAjIHNldCB0aGUgdmFsdWUKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRBcnRpY2xleyRBdHRyfSwKICAgICAgICAgICAgICAgIEV4dGVybmFsU291cmNlICAgICA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgdXBkYXRlICRBdHRyIGZvciBBcnRpY2xlSUQgJEFydGljbGVJRCIsCiAgICAgICAgKSB1bmxlc3MgJFN1Y2Nlc3M7CiAgICB9CgogICAgcmV0dXJuICdBcnRpY2xlIGNyZWF0ZWQnOwp9CgpzdWIgX0ltcG9ydEVycm9yIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPntFcnJvcn0gPSAkUGFyYW17TWVzc2FnZX0gfHwgJyc7CgogICAgaWYgKCBleGlzdHMgJFBhcmFte1RpY2tldH0gKSB7CiAgICAgICAgJFNlbGYtPntMYXN0VGlja2V0SUR9ID0gdW5kZWY7CgogICAgICAgIGlmICggJFBhcmFte0lkZW50aWZpZXJ9ICYmICRQYXJhbXtJZGVudGlmaWVyfXtUaWNrZXRJRH0gJiYgJFBhcmFte1RpY2tldH17VGlja2V0SUR9ICkgewogICAgICAgICAgICAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259eyAkUGFyYW17VGlja2V0fXtUaWNrZXRJRH0gfSA9IHVuZGVmOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRQYXJhbXtJZGVudGlmaWVyfSAmJiAkUGFyYW17SWRlbnRpZmllcn17VGlja2V0TnVtYmVyfSAmJiAkUGFyYW17VGlja2V0fXtUaWNrZXROdW1iZXJ9ICkgewogICAgICAgICAgICAkU2VsZi0+e1RpY2tldE51bWJlcklEUmVsYXRpb259eyAkUGFyYW17VGlja2V0fXtUaWNrZXROdW1iZXJ9IH0gPSB1bmRlZjsKICAgICAgICB9CiAgICB9CgogICAgZWxzaWYgKCBleGlzdHMgJFBhcmFte0FydGljbGV9ICkgewogICAgICAgIG15ICRJbXBvcnRlZFRJRCA9ICRQYXJhbXtBcnRpY2xlfXtUaWNrZXRJRH0gPyAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259eyAkUGFyYW17QXJ0aWNsZX17VGlja2V0SUR9IH0gOiAkU2VsZi0+e0xhc3RUaWNrZXRJRH07CiAgICAgICAgbXkgJEV4dHJhSW5mbyAgID0gJFBhcmFte0FydGljbGV9e1RpY2tldElEfSA/ICIgT3JpZ2luaWFsIFRpY2tldElEOiAkUGFyYW17QXJ0aWNsZX17VGlja2V0SUR9OyIgICAgICA6ICcnOwogICAgICAgICRFeHRyYUluZm8gICAgIC49ICRJbXBvcnRlZFRJRCAgICAgICAgICAgICAgID8gIiBJbXBvcnRlZCBUaWNrZXRJRDogJEltcG9ydGVkVElEOyIgICAgICAgICAgICAgICAgIDogJyc7CiAgICAgICAgJEV4dHJhSW5mbyAgICAgLj0gJFBhcmFte0FydGljbGV9e0FydGljbGVJRH0gPyAiIE9yaWdpbmlhbCBBcnRpY2xlSUQ6ICRQYXJhbXtBcnRpY2xlfXtBcnRpY2xlSUR9OyIgOiAnJzsKICAgICAgICAkU2VsZi0+e0Vycm9yfSAuPSAkRXh0cmFJbmZvOwogICAgfQoKICAgIHJldHVybjsKfQoKc3ViIF9TeW5jaHJvbml6ZUV4dGVuZGVkREJFbnRyaWVzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgaWYgKCAhJFBhcmFte0ZvcmVpZ25EQn17RGF0YWJhc2VEU059ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBhIERhdGFiYXNlRFNOIGluIHRoZSBGb3JlaWduREIgc2V0dGluZ3MnLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoICEkUGFyYW17VGlja2V0SUR9IHx8ICEoICggJFBhcmFte0FydGljbGVJRH0gJiYgJFBhcmFte0ZvcmVpZ25BcnRpY2xlSUR9IHx8ICRQYXJhbXtGb3JlaWduVGlja2V0SUR9ICkgKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVGlja2V0SUQgYW5kIGVpdGhlciBBcnRpY2xlSUQgYW5kIEZvcmVpZ25BcnRpY2xlSUQgb3IgRm9yZWlnblRpY2tldElEIScsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggISRTZWxmLT57RkRCT2JqZWN0fSB8fCAhJFNlbGYtPntEQk9iamVjdH0gKSB7CiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0gID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CiAgICAgICAgJFNlbGYtPntGREJPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgICAgICRQYXJhbXtGb3JlaWduREJ9LT4lKiwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFBhcmFte0FydGljbGVJRH0gKSB7CgogICAgICAgICMgYXJ0aWNsZV9mbGFnCiAgICAgICAgcmV0dXJuIHVubGVzcyAkU2VsZi0+e0ZEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgPT4gJ1NFTEVDVCBjcmVhdGVfYnkgRlJPTSBhcnRpY2xlX2ZsYWcgV0hFUkUgYXJ0aWNsZV9pZCA9ID8gQU5EIGFydGljbGVfa2V5ID0gPyBBTkQgYXJ0aWNsZV92YWx1ZSA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtGb3JlaWduQXJ0aWNsZUlEfSwgXCdTZWVuJywgXDEgXSwKICAgICAgICApOwoKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0ZEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgcmV0dXJuIHVubGVzcyAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGFydGljbGVfZmxhZyAoYXJ0aWNsZV9pZCwgYXJ0aWNsZV9rZXksIGFydGljbGVfdmFsdWUsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnkpJyAuCiAgICAgICAgICAgICAgICAgICAgJ1ZBTFVFUyAoPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0FydGljbGVJRH0sIFwnU2VlbicsIFwxLCBcJFJvd1swXSBdLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBhcnRpY2xlX2hpc3RvcnkKICAgICAgICByZXR1cm4gdW5sZXNzICRTZWxmLT57RkRCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgbmFtZSwgaGlzdG9yeV90eXBlX2lkLCB0eXBlX2lkLCBxdWV1ZV9pZCwgb3duZXJfaWQsIHByaW9yaXR5X2lkLCBzdGF0ZV9pZCwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSAnIC4KICAgICAgICAgICAgICAgICdGUk9NIHRpY2tldF9oaXN0b3J5IFdIRVJFIGFydGljbGVfaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Rm9yZWlnbkFydGljbGVJRH0gXSwKICAgICAgICApOwoKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0ZEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgcmV0dXJuIHVubGVzcyAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4KICAgICAgICAgICAgICAgICAgICAnSU5TRVJUIElOVE8gdGlja2V0X2hpc3RvcnkgKHRpY2tldF9pZCwgYXJ0aWNsZV9pZCwgbmFtZSwgaGlzdG9yeV90eXBlX2lkLCB0eXBlX2lkLCBxdWV1ZV9pZCwgb3duZXJfaWQsIHByaW9yaXR5X2lkLCBzdGF0ZV9pZCwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSknCiAgICAgICAgICAgICAgICAgICAgLgogICAgICAgICAgICAgICAgICAgICdWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pJywKICAgICAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1RpY2tldElEfSwgXCRQYXJhbXtBcnRpY2xlSUR9LCAoIG1hcCB7IFwkXyB9IEBSb3cgKSBdLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgIyB0aWNrZXRfZmxhZwogICAgcmV0dXJuIHVubGVzcyAkU2VsZi0+e0ZEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAnU0VMRUNUIGNyZWF0ZV9ieSBGUk9NIHRpY2tldF9mbGFnIFdIRVJFIHRpY2tldF9pZCA9ID8gQU5EIHRpY2tldF9rZXkgPSA/IEFORCB0aWNrZXRfdmFsdWUgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtGb3JlaWduVGlja2V0SUR9LCBcJ1NlZW4nLCBcMSBdLAogICAgKTsKCiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0ZEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICByZXR1cm4gdW5sZXNzICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyB0aWNrZXRfZmxhZyAodGlja2V0X2lkLCB0aWNrZXRfa2V5LCB0aWNrZXRfdmFsdWUsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnkpJyAuCiAgICAgICAgICAgICAgICAnVkFMVUVTICg/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtUaWNrZXRJRH0sIFwnU2VlbicsIFwxLCBcJFJvd1swXSBdLAogICAgICAgICk7CiAgICB9CgogICAgIyB0aWNrZXRfaGlzdG9yeQogICAgcmV0dXJuIHVubGVzcyAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gdGlja2V0X2hpc3RvcnkgV0hFUkUgdGlja2V0X2lkID0gPyBBTkQgKGFydGljbGVfaWQgSVMgTlVMTCBPUiBhcnRpY2xlX2lkID0gMCknLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1RpY2tldElEfSBdLAogICAgKTsKCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JyktPkhpc3RvcnlBZGQoCiAgICAgICAgTmFtZSAgICAgICAgID0+ICJcJVwlSW1wb3J0ZWQgVGlja2V0IC0gTGVnYWN5IFRpY2tldElEOiAkUGFyYW17Rm9yZWlnblRpY2tldElEfSIsCiAgICAgICAgSGlzdG9yeVR5cGUgID0+ICdNaXNjJywKICAgICAgICBUaWNrZXRJRCAgICAgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICBDcmVhdGVVc2VySUQgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIHVubGVzcyAkU2VsZi0+e0ZEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgbmFtZSwgaGlzdG9yeV90eXBlX2lkLCB0eXBlX2lkLCBxdWV1ZV9pZCwgb3duZXJfaWQsIHByaW9yaXR5X2lkLCBzdGF0ZV9pZCwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSAnIC4KICAgICAgICAgICAgJ0ZST00gdGlja2V0X2hpc3RvcnkgV0hFUkUgdGlja2V0X2lkID0gPyBBTkQgKGFydGljbGVfaWQgSVMgTlVMTCBPUiBhcnRpY2xlX2lkID0gMCknLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0ZvcmVpZ25UaWNrZXRJRH0gXSwKICAgICk7CgogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntGREJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcmV0dXJuIHVubGVzcyAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgIFNRTCA9PgogICAgICAgICAgICAgICAgJ0lOU0VSVCBJTlRPIHRpY2tldF9oaXN0b3J5ICh0aWNrZXRfaWQsIG5hbWUsIGhpc3RvcnlfdHlwZV9pZCwgdHlwZV9pZCwgcXVldWVfaWQsIG93bmVyX2lkLCBwcmlvcml0eV9pZCwgc3RhdGVfaWQsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpJwogICAgICAgICAgICAgICAgLgogICAgICAgICAgICAgICAgJ1ZBTFVFUyAoPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtUaWNrZXRJRH0sICggbWFwIHsgXCRfIH0gQFJvdyApIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGxpbmtfcmVsYXRpb24KICAgIG15ICRMaW5rT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxpbmtPYmplY3QnKTsKICAgIG15ICRGb3JlaWduVGlja2V0T2JqZWN0SUQ7CgogICAgbXkgJUZvcmVpZ25MaW5rT2JqZWN0czsKICAgIG15ICVMT2JqZWN0SURzOwoKICAgIHJldHVybiB1bmxlc3MgJFNlbGYtPntGREJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gIlNFTEVDVCBpZCxuYW1lIEZST00gbGlua19vYmplY3QgIiwKICAgICAgICBCaW5kID0+IFtdLAogICAgKTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57RkRCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRGb3JlaWduTGlua09iamVjdHN7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICAgICAgJExPYmplY3RJRHN7ICRSb3dbMV0gfSAgICAgICAgID0gJExpbmtPYmplY3QtPk9iamVjdExvb2t1cCgKICAgICAgICAgICAgTmFtZSA9PiAkUm93WzFdLAogICAgICAgICk7CgogICAgICAgIGlmICggJFJvd1sxXSBlcSAnVGlja2V0JyApIHsKICAgICAgICAgICAgJEZvcmVpZ25UaWNrZXRPYmplY3RJRCA9ICRSb3dbMF07CiAgICAgICAgfQogICAgfQoKICAgIG15ICVGb3JlaWduTGlua1R5cGVzOwogICAgbXkgJUxUeXBlSURzOwoKICAgIHJldHVybiB1bmxlc3MgJFNlbGYtPntGREJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gIlNFTEVDVCBpZCxuYW1lIEZST00gbGlua190eXBlICIsCiAgICAgICAgQmluZCA9PiBbXSwKICAgICk7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0ZEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRm9yZWlnbkxpbmtUeXBlc3sgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgICAgICAkTFR5cGVJRHN7ICRSb3dbMV0gfSAgICAgICAgID0gJExpbmtPYmplY3QtPlR5cGVMb29rdXAoCiAgICAgICAgICAgIE5hbWUgICA9PiAkUm93WzFdLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIG15ICVEaXJlY3Rpb24gPSAoCiAgICAgICAgc291cmNlID0+ICd0YXJnZXQnLAogICAgICAgIHRhcmdldCA9PiAnc291cmNlJywKICAgICk7CgogICAgZm9yIG15ICRLZXkgKCBrZXlzICVEaXJlY3Rpb24gKSB7CgogICAgICAgIHJldHVybiB1bmxlc3MgJFNlbGYtPntGREJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gIlNFTEVDVCAkS2V5IiAuICJfb2JqZWN0X2lkLCAkS2V5IiAuICJfa2V5LCB0eXBlX2lkLCBzdGF0ZV9pZCBGUk9NIGxpbmtfcmVsYXRpb24gIiAuCiAgICAgICAgICAgICAgICAiV0hFUkUgJERpcmVjdGlvbnskS2V5fV9vYmplY3RfaWQgPSA/IEFORCAkRGlyZWN0aW9ueyRLZXl9X2tleSA9ID8iLAogICAgICAgICAgICBCaW5kID0+IFsgXCRGb3JlaWduVGlja2V0T2JqZWN0SUQsIFwkUGFyYW17Rm9yZWlnblRpY2tldElEfSBdLAogICAgICAgICk7CgogICAgICAgIExJTks6CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntGREJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgICAgICAkUm93WzBdID0gJExPYmplY3RJRHN7ICRGb3JlaWduTGlua09iamVjdHN7ICRSb3dbMF0gfSB9OwogICAgICAgICAgICAkUm93WzJdID0gJExUeXBlSURzeyAkRm9yZWlnbkxpbmtUeXBlc3sgJFJvd1syXSB9IH07CgogICAgICAgICAgICAjIGRlYWwgd2l0aCBvdGhlciBpbXBvcnRlZCB0aWNrZXRzCiAgICAgICAgICAgIGlmICggJFJvd1swXSA9PSAkTE9iamVjdElEc3tUaWNrZXR9ICkgewogICAgICAgICAgICAgICAgbmV4dCBMSU5LIGlmICRSb3dbMV0gPiAkUGFyYW17Rm9yZWlnblRpY2tldElEfTsKCiAgICAgICAgICAgICAgICAkUm93WzFdID0gZXhpc3RzICRTZWxmLT57VGlja2V0SURSZWxhdGlvbn17ICRSb3dbMV0gfSA/ICRTZWxmLT57VGlja2V0SURSZWxhdGlvbn17ICRSb3dbMV0gfSA6ICRSb3dbMV07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB1bmxlc3MgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICAgICAgU1FMID0+CiAgICAgICAgICAgICAgICAgICAgIklOU0VSVCBJTlRPIGxpbmtfcmVsYXRpb24gKCREaXJlY3Rpb257JEtleX1fb2JqZWN0X2lkLCAkRGlyZWN0aW9ueyRLZXl9X2tleSwgJEtleVxfb2JqZWN0X2lkLCAkS2V5XF9rZXksIHR5cGVfaWQsIHN0YXRlX2lkLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5KSAiIC4KICAgICAgICAgICAgICAgICAgICAiVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPykiLAogICAgICAgICAgICAgICAgQmluZCA9PiBbIFwkTE9iamVjdElEc3tUaWNrZXR9LCBcJFBhcmFte1RpY2tldElEfSwgKCBtYXAgeyBcJF8gfSBAUm93ICksIFwxIF0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgdGlja2V0X3dhdGNoZXIKICAgICMgVE9ETwoKICAgICMgZm9ybV9kcmFmdAogICAgIyBUT0RPCgogICAgIyBjYWxlbmRlcl9hcHBvaW50bWVudF90aWNrZXQKICAgICMgVE9ETwoKICAgIHJldHVybiAxOwp9CgoxOwo=</File>
        <File Location="Kernel/Output/HTML/ImportExport/LayoutDateTime.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjYgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJbXBvcnRFeHBvcnQ6OkxheW91dERhdGVUaW1lOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkltcG9ydEV4cG9ydDo6TGF5b3V0RGF0ZVRpbWUgLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBERVNDUklQVElPTgoKQWxsIGxheW91dCBmdW5jdGlvbnMgZm9yIERhdGVUaW1lIGVsZW1lbnRzIGluIEltcG9ydC9FeHBvcnQuCgo9Y3V0Cgo9aGVhZDIgbmV3KCkKCkNyZWF0ZSBhbiBvYmplY3QKCiAgICBteSAkQmFja2VuZE9iamVjdCA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJbXBvcnRFeHBvcnQ6OkxheW91dERhdGVUaW1lLT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIHJldHVybiBibGVzcyB7fSwgJFR5cGU7Cn0KCj1oZWFkMiBGb3JtSW5wdXRDcmVhdGUoKQoKQ3JlYXRlIGEgaW5wdXQgc3RyaW5nCgogICAgbXkgJFZhbHVlID0gJEJhY2tlbmRPYmplY3QtPkZvcm1JbnB1dENyZWF0ZSgKICAgICAgICBJdGVtICAgPT4gJEl0ZW1SZWYsCiAgICAgICAgUHJlZml4ID0+ICdQcmVmaXg6OicsICAjIChvcHRpb25hbCkKICAgICAgICBWYWx1ZSAgPT4gJ1ZhbHVlJywgICAgICMgKG9wdGlvbmFsKQogICAgICAgIENsYXNzICA9PiAnTW9kZXJuaXplJyAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEZvcm1JbnB1dENyZWF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17SXRlbX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEl0ZW0hJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkUHJlZml4ID0gJFBhcmFte1ByZWZpeH0gfHwgJFBhcmFte0l0ZW19e0lucHV0fXtQcmVmaXh9IHx8ICcnOwogICAgJFByZWZpeCAuPSAkUGFyYW17SXRlbX17S2V5fTsKCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlCiAgICAkUGFyYW17VmFsdWV9IHx8PSAkUGFyYW17SXRlbX0tPntJbnB1dH0tPntWYWx1ZURlZmF1bHR9OwoKICAgIGlmICggJFBhcmFte1ZhbHVlfSApIHsKICAgICAgICBteSAoICRZZWFyLCAkTW9udGgsICREYXksICRIb3VyLCAkTWludXRlLCAkU2Vjb25kICkgPSAkUGFyYW17VmFsdWV9ID1+CiAgICAgICAgICAgIG17IFxBICggXGR7NH0gKSAtICggXGR7Mn0gKSAtICggXGR7Mn0gKSBccyAoIFxkezJ9ICkgOiAoIFxkezJ9ICkgOiAoIFxkezJ9ICkgXHogfXhtczsKCiAgICAgICAgIyBJZiBhIHZhbHVlIGlzIHNlbnQgdGhpcyB2YWx1ZSBtdXN0IGJlIGFjdGl2ZSwgdGhlbiB0aGUgVXNlZCBwYXJ0IG5lZWRzIHRvIGJlIHNldCB0byAxCiAgICAgICAgIyAgIG90aGVyd2lzZSB1c2VyIGNhbiBlYXNpbHkgZm9yZ2V0IHRvIG1hcmsgdGhlIGNoZWNrYm94IGFuZCB0aGlzIGNvdWxkIGxlYWQgaW50byBkYXRhCiAgICAgICAgIyAgIGxvc3QgKEJ1ZyM4MjU4KS4KICAgICAgICAkUGFyYW17ICRQcmVmaXggLiAnVXNlZCcgfSAgID0gMTsKICAgICAgICAkUGFyYW17ICRQcmVmaXggLiAnWWVhcicgfSAgID0gJFllYXI7CiAgICAgICAgJFBhcmFteyAkUHJlZml4IC4gJ01vbnRoJyB9ICA9ICRNb250aDsKICAgICAgICAkUGFyYW17ICRQcmVmaXggLiAnRGF5JyB9ICAgID0gJERheTsKICAgICAgICAkUGFyYW17ICRQcmVmaXggLiAnSG91cicgfSAgID0gJEhvdXI7CiAgICAgICAgJFBhcmFteyAkUHJlZml4IC4gJ01pbnV0ZScgfSA9ICRNaW51dGU7CiAgICB9CgogICAgJFBhcmFteyAkUHJlZml4IC4gJ1ZhbHVlJyB9ICAgID0gJFBhcmFte0l0ZW19e0lucHV0fXtSZXF1aXJlZH07CiAgICAkUGFyYW17ICRQcmVmaXggLiAnT3B0aW9uYWwnIH0gPSAkUGFyYW17SXRlbX17SW5wdXR9e09wdGlvbmFsfTsKICAgICRQYXJhbXsgJFByZWZpeCAuICdDbGFzcycgfSAgICA9ICRQYXJhbXtJdGVtfXtJbnB1dH17Q2xhc3N9OwoKICAgICMgZ2VuZXJhdGUgb3B0aW9uIHN0cmluZwogICAgbXkgJFN0cmluZyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKS0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgICVQYXJhbSwKICAgICAgICBQcmVmaXggPT4gJFByZWZpeCwKICAgICAgICBGb3JtYXQgPT4gJ0RhdGVJbnB1dEZvcm1hdExvbmcnLAogICAgKTsKCiAgICByZXR1cm4gJFN0cmluZzsKfQoKPWhlYWQyIEZvcm1EYXRhR2V0KCkKCkdldCBmb3JtIGRhdGEKCiAgICBteSAkRm9ybURhdGEgPSAkQmFja2VuZE9iamVjdC0+Rm9ybURhdGFHZXQoCiAgICAgICAgSXRlbSAgID0+ICRJdGVtUmVmLAogICAgICAgIFByZWZpeCA9PiAnUHJlZml4OjonLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIEZvcm1EYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRQYXJhbU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKCiAgICBteSAkUHJlZml4ID0gJFBhcmFte1ByZWZpeH0gfHwgJFBhcmFte0l0ZW19e0lucHV0fXtQcmVmaXh9IHx8ICcnOwogICAgJFByZWZpeCAuPSAkUGFyYW17SXRlbX17S2V5fTsKCiAgICBteSAlVmFsdWVzOwogICAgZm9yIG15ICRUeXBlIChxdyhVc2VkIFllYXIgTW9udGggRGF5IEhvdXIgTWludXRlKSkgewogICAgICAgICRWYWx1ZXN7ICRQcmVmaXggLiAkVHlwZSB9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSgKICAgICAgICAgICAgUGFyYW0gPT4gJFByZWZpeCAuICRUeXBlLAogICAgICAgICkgfHwgMDsKICAgIH0KCiAgICBteSAkRm9ybURhdGE7CiAgICBpZiAoICRWYWx1ZXN7ICRQcmVmaXggLiAnVXNlZCcgfSApIHsKCiAgICAgICAgIyBhZGQgYSBsZWFkaW5nIHplcm8gZm9yIGRhdGUgcGFydHMgdGhhdCBjb3VsZCBiZSBsZXNzIHRoYW4gdGVuIHRvIGdlbmVyYXRlIGEgY29ycmVjdAogICAgICAgICMgdGltZSBzdGFtcAogICAgICAgIGZvciBteSAkVHlwZSAocXcoTW9udGggRGF5IEhvdXIgTWludXRlIFNlY29uZCkpIHsKICAgICAgICAgICAgJFZhbHVlc3sgJFByZWZpeCAuICRUeXBlIH0gPSBzcHJpbnRmICIlMDJkIiwgJFZhbHVlc3sgJFByZWZpeCAuICRUeXBlIH07CiAgICAgICAgfQoKICAgICAgICBteSAkWWVhciAgID0gJFZhbHVlc3sgJFByZWZpeCAuICdZZWFyJyB9ICAgfHwgJzAwMDAnOwogICAgICAgIG15ICRNb250aCAgPSAkVmFsdWVzeyAkUHJlZml4IC4gJ01vbnRoJyB9ICB8fCAnMDAnOwogICAgICAgIG15ICREYXkgICAgPSAkVmFsdWVzeyAkUHJlZml4IC4gJ0RheScgfSAgICB8fCAnMDAnOwogICAgICAgIG15ICRIb3VyICAgPSAkVmFsdWVzeyAkUHJlZml4IC4gJ0hvdXInIH0gICB8fCAnMDAnOwogICAgICAgIG15ICRNaW51dGUgPSAkVmFsdWVzeyAkUHJlZml4IC4gJ01pbnV0ZScgfSB8fCAnMDAnOwogICAgICAgIG15ICRTZWNvbmQgPSAkVmFsdWVzeyAkUHJlZml4IC4gJ1NlY29uZCcgfSB8fCAnMDAnOwoKICAgICAgICAkRm9ybURhdGEgPQogICAgICAgICAgICAkWWVhciAuICctJyAuICRNb250aCAuICctJyAuICREYXkgLiAnICcgLiAkSG91ciAuICc6JyAuICRNaW51dGUgLiAnOicgLiAkU2Vjb25kOwogICAgfQoKICAgIHJldHVybiAkRm9ybURhdGEgaWYgJEZvcm1EYXRhOwogICAgcmV0dXJuICRGb3JtRGF0YSBpZiAhJFBhcmFte0l0ZW19e0lucHV0fXtSZXF1aXJlZH07CgogICAgIyBzZXQgaW52YWxpZCBwYXJhbQogICAgJFBhcmFte0l0ZW19LT57Rm9ybX0tPntJbnZhbGlkfSA9IDE7CgogICAgcmV0dXJuICRGb3JtRGF0YTsKfQoKMTsK</File>
        <File Location="doc/en/RotherOSS-ImportExportTicketZnuny.pdf" Permission="644" Encode="Base64">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</File>
    </Filelist>
</otrs_package>