<?xml version="1.0" encoding="utf-8" ?>
<otrs_package version="1.1">
    <Name>ImportExportTicket</Name>
    <Version>10.1.4</Version>
    <Vendor>Rother OSS GmbH</Vendor>
    <URL>https://otobo.io/</URL>
    <License>GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007</License>
    <ChangeLog Date="2026-10-30 07:56:41" Version="10.1.4">Updated translations.</ChangeLog>
    <ChangeLog Date="2025-02-26 14:15:37" Version="10.1.3">- Issue #10: Improving TicketSearch for exporting tickets.</ChangeLog>
    <ChangeLog Date="2022-09-05 06:10:23" Version="10.1.2">Fix article identification.</ChangeLog>
    <ChangeLog Date="2022-08-31 06:42:25" Version="10.1.1">ImportExport plugin for tickets.</ChangeLog>
    <Description Lang="en">Ticket backend for the ImportExport module.</Description>
    <Framework>10.1.x</Framework>
    <PackageRequired Version="10.1.2">ImportExport</PackageRequired>
    <BuildCommitID>99177ad942e0ff3c8f4052baa220a5a4a5802efe</BuildCommitID>
    <BuildDate>2026-10-30 07:56:45</BuildDate>
    <BuildHost>opms.rother-oss.com</BuildHost>
    <Filelist>
        <File Location="Kernel/Config/Files/XML/ImportExportTicket.xml" Permission="660" Encode="Base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJBcHBsaWNhdGlvbiI+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmRSZWdpc3RyYXRpb24jIyNUaWNrZXQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+T2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6U3luY2hyb25pemVXaXRoRm9yZWlnbkRCIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPklmIGFjdGl2YXRlZCBhZGRpdGlvbmFsIGRhdGEgc3VjaCBhcyB0aGUgaGlzdG9yeSBhbmQgbGlua3Mgd2lsbCBiZSByZWFkIGZyb20gYSBmb3JlaWduIERCIGNvbnRhaW5pbmcgdGhlIGV4cG9ydGVkIHRpY2tldHMgYW5kIGFkZGVkIHRvIHRoZSBpbXBvcnRlZCB0aWNrZXRzIG9uIHRoaXMgc3lzdGVtLiBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBjcmVhdGVkLCBub3QgZm9yIHVwZGF0ZWQgdGlja2V0cy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRhdGFiYXNlRFNOIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRhdGFiYXNlVXNlciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEYXRhYmFzZVB3Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMDEtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPlF1ZXVlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik90aGVyU3lzdGVtTWlzYyI+TWlzYzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDAyLUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij5BcnRpY2xlX0R5bmFtaWNGaWVsZF9Ob011bHRpPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik90aGVyU3lzdGVtNSI+NzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDAzLUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAwNC1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMDUtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDA2LUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAwNy1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMDgtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDA5LUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAxMC1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMTEtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDEyLUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAxMy1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMTQtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDE1LUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAxNi1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMTctQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDE4LUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAxOS1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMjAtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDIxLUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAyMi1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMjMtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDI0LUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAyNS1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgo=</File>
        <File Location="Kernel/System/ImportExport/ObjectBackend/Ticket.pm" Permission="660" Encode="Base64">IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjQgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmlvLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDsKCnVzZSB2NS4yNDsKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKIyBjb3JlIG1vZHVsZXMKdXNlIEVuY29kZTsKdXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0IGRlY29kZV9iYXNlNjQpOwoKIyBDUEFOIG1vZHVsZXMKCiMgT1RPQk8gbW9kdWxlcwp1c2UgS2VybmVsOjpMYW5ndWFnZSBxdyhUcmFuc2xhdGFibGUpOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvY2snLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U0xBJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN0YXRlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6VGlja2V0OjpBcnRpY2xlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VHlwZScsCiAgICAnS2VybmVsOjpTeXN0ZW06OlVzZXInLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldCAtIGltcG9ydC9leHBvcnQgYmFja2VuZCBmb3IgdGlja2V0cwoKPWhlYWQxIERFU0NSSVBUSU9OCgpBbGwgZnVuY3Rpb25zIHRvIGltcG9ydCBhbmQgZXhwb3J0IHRpY2tldHMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwoKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0gewogICAgICAgIENvbmZpZ09iamVjdCAgICAgICAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKSwKICAgICAgICBJbXBvcnRFeHBvcnRPYmplY3QgICAgID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKSwKICAgICAgICBUaWNrZXRJRFJlbGF0aW9uICAgICAgID0+IHt9LAogICAgICAgIFRpY2tldE51bWJlcklEUmVsYXRpb24gPT4ge30sCiAgICB9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIE9iamVjdEF0dHJpYnV0ZXNHZXQoKQoKZ2V0IHRoZSBvYmplY3QgYXR0cmlidXRlcyBvZiBhbiBvYmplY3QgYXMgYSByZWYgdG8gYW4gYXJyYXkgb2YgaGFzaCByZWZlcmVuY2VzCgogICAgbXkgJEF0dHJpYnV0ZXMgPSAkT2JqZWN0QmFja2VuZC0+T2JqZWN0QXR0cmlidXRlc0dldCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0QXR0cmlidXRlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdAogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAlUXVldWVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPlF1ZXVlTGlzdCgpOwogICAgbXkgJVN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpLT5TdGF0ZUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgbXkgJVByaW9yaXR5TGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScpLT5Qcmlvcml0eUxpc3QoCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CiAgICBteSAlTG9ja0xpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9jaycpLT5Mb2NrTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlVXNlckxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTGlzdCgpOwoKICAgIG15IEBBdHRyaWJ1dGVzID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1F1ZXVlSUQnLAogICAgICAgICAgICBOYW1lICA9PiAnRGVmYXVsdCBRdWV1ZScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgPT4gXCVRdWV1ZUxpc3QsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICApOwoKICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpY2tldDo6VHlwZScpICkgewogICAgICAgIG15ICVUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyktPlR5cGVMaXN0KAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQEF0dHJpYnV0ZXMsIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1R5cGVJRCcsCiAgICAgICAgICAgIE5hbWUgID0+ICdEZWZhdWx0IFR5cGUnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlVHlwZUxpc3QgfHwge30sCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH07CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGlja2V0OjpTZXJ2aWNlJykgKSB7CiAgICAgICAgbXkgJVNlcnZpY2VMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgIHB1c2ggQEF0dHJpYnV0ZXMsIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1NlcnZpY2VJRCcsCiAgICAgICAgICAgIE5hbWUgID0+ICdEZWZhdWx0IFNlcnZpY2UnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVTZXJ2aWNlTGlzdCB8fCB7fSwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAwLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgfSwKICAgICAgICB9OwoKICAgICAgICBteSAlU0xBTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKS0+U0xBTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAQXR0cmlidXRlcywgewogICAgICAgICAgICBLZXkgICA9PiAnU0xBSUQnLAogICAgICAgICAgICBOYW1lICA9PiAnRGVmYXVsdCBTTEEnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVTTEFMaXN0IHx8IHt9LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDAsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH07CiAgICB9CgogICAgbXkgJVNlbmRlclR5cGUgPSBtYXAgeyAkXyA9PiAkXyB9IHF3KGFnZW50IGN1c3RvbWVyIHN5c3RlbSk7CgogICAgcHVzaCBAQXR0cmlidXRlcywgKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1N0YXRlSUQnLAogICAgICAgICAgICBOYW1lICA9PiAnRGVmYXVsdCBzdGF0ZScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgPT4gXCVTdGF0ZUxpc3QsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnUHJpb3JpdHlJRCcsCiAgICAgICAgICAgIE5hbWUgID0+ICdEZWZhdWx0IHByaW9yaXR5JywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiBcJVByaW9yaXR5TGlzdCwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdPd25lcklEJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0RlZmF1bHQgb3duZXInLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlVXNlckxpc3QsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnUmVzcG9uc2libGVJRCcsCiAgICAgICAgICAgIE5hbWUgID0+ICdEZWZhdWx0IHJlc3BvbnNpYmxlJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlVXNlckxpc3QsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMCwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdMb2NrSUQnLAogICAgICAgICAgICBOYW1lICA9PiAnRGVmYXVsdCBsb2NrJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiBcJUxvY2tMaXN0LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0N1c3RvbWVySUQnLAogICAgICAgICAgICBOYW1lICA9PiAnRGVmYXVsdCBDdXN0b21lcklEJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIFJlcXVpcmVkICA9PiAwLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDI1MCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0N1c3RvbWVyVXNlcklEJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0RlZmF1bHQgQ3VzdG9tZXJVc2VySUQnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgUmVxdWlyZWQgID0+IDAsCiAgICAgICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMjUwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQXJjaGl2ZUZsYWcnLAogICAgICAgICAgICBOYW1lICA9PiAnRGVmYXVsdCBBcmNoaXZlRmxhZycsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7IG1hcCB7ICRfID0+ICRfIH0gcXcoIHkgbiApIH0sCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICAgICAgVmFsdWVEZWZhdWx0ID0+ICduJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0luY2x1ZGVBcnRpY2xlcycsCiAgICAgICAgICAgIE5hbWUgID0+ICdJbXBvcnQvRXhwb3J0IGFydGljbGVzJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnQ2hlY2tib3gnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQXJ0aWNsZUJhY2tlbmQnLAogICAgICAgICAgICBOYW1lICA9PiAnRGVmYXVsdCBCYWNrZW5kJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsgbWFwIHsgJF8gPT4gJF8gfSBxdyggRW1haWwgUGhvbmUgSW50ZXJuYWwgKSB9LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgICAgIFZhbHVlRGVmYXVsdCA9PiAnbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdTdWJqZWN0JywKICAgICAgICAgICAgTmFtZSAgPT4gJ0RlZmF1bHQgc3ViamVjdCcsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMCwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgIE1heExlbmd0aCAgICA9PiAyNTAsCiAgICAgICAgICAgICAgICBWYWx1ZURlZmF1bHQgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpY2tldEltcG9ydDo6RGVmYXVsdFN1YmplY3QnKSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0JvZHknLAogICAgICAgICAgICBOYW1lICA9PiAnRGVmYXVsdCBib2R5JywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAwLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgICAgID0+IDUwLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoICAgID0+IDI1MCwKICAgICAgICAgICAgICAgIFZhbHVlRGVmYXVsdCA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGlja2V0SW1wb3J0OjpEZWZhdWx0Qm9keScpLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnU2VuZGVyVHlwZScsCiAgICAgICAgICAgIE5hbWUgID0+ICdEZWZhdWx0IHNlbmRlciB0eXBlJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiBcJVNlbmRlclR5cGUsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCA9PiAxLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdJc1Zpc2libGVUb0N1c3RvbWVyJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0RlZmF1bHQgaXMgdmlzaWJsZSB0byBjdXN0b21lcicsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0NoZWNrYm94JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVTZXBhcmF0ZUxpbmVzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1N0b3JlIGFydGljbGVzIG9uIHNlcGFyYXRlIGxpbmVzIGluZGljYXRlZCBieSBhIGJsYW5rIGZpcnN0IGVudHJ5JywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnQ2hlY2tib3gnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnSW5jbHVkZUF0dGFjaG1lbnRzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0ltcG9ydC9FeHBvcnQgYXR0YWNobWVudHMgKGFzIHRoZSBsYXN0IGVudHJpZXMgcGVyIGxpbmUpJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnQ2hlY2tib3gnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcycsCiAgICAgICAgICAgIE5hbWUgID0+ICdFbXB0eSBmaWVsZHMgaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZXMgYXJlIGtlcHQnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdDaGVja2JveCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuIFxAQXR0cmlidXRlczsKfQoKPWhlYWQyIE1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KCkKCmdldCB0aGUgbWFwcGluZyBhdHRyaWJ1dGVzIG9mIGFuIG9iamVjdCBhcyBhcnJheS9oYXNoIHJlZmVyZW5jZQoKICAgIG15ICRBdHRyaWJ1dGVzID0gJE9iamVjdEJhY2tlbmQtPk1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTWFwcGluZ09iamVjdEF0dHJpYnV0ZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBvYmplY3QgZGF0YQogICAgbXkgJE9iamVjdERhdGEgPSAkU2VsZi0+e0ltcG9ydEV4cG9ydE9iamVjdH0tPk9iamVjdERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIFtdIGlmICEkT2JqZWN0RGF0YTsKICAgIHJldHVybiBbXSBpZiByZWYgJE9iamVjdERhdGEgbmUgJ0hBU0gnOwoKICAgIG15IEBFbGVtZW50TGlzdCA9IG1hcCB7IHsgS2V5ID0+ICRfLCBWYWx1ZSA9PiAkXyB9IH0KICAgICAgICBxdyggVGlja2V0SUQgVGlja2V0TnVtYmVyIFRpdGxlIFR5cGUgVHlwZUlEIFF1ZXVlIFF1ZXVlSUQgU2VydmljZSBTZXJ2aWNlSUQgU0xBCiAgICAgICAgU0xBSUQgU3RhdGUgU3RhdGVJRCBQcmlvcml0eSBQcmlvcml0eUlEIEN1c3RvbWVySUQgQ3VzdG9tZXJVc2VySUQgT3duZXIgT3duZXJJRCBMb2NrCiAgICAgICAgTG9ja0lEIFJlc3BvbnNpYmxlIFJlc3BvbnNpYmxlSUQgQXJjaGl2ZUZsYWcgQ3JlYXRlZCApOwoKICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CgogICAgIyBjb2x1bW5zIGZvciBkeW5hbWljIGZpZWxkcwogICAgbXkgJER5bkZpZWxkTGlzdCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3QoCiAgICAgICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgICAgICBSZXN1bHRUeXBlID0+ICdIQVNIJywKICAgICk7CiAgICBwdXNoIEBFbGVtZW50TGlzdCwgbWFwIHsgeyBLZXkgPT4gIkR5bmFtaWNGaWVsZF8kXyIsIFZhbHVlID0+ICJEeW5hbWljRmllbGRfJF8iIH0gfSBzb3J0IHZhbHVlcyAleyREeW5GaWVsZExpc3R9OwoKICAgIGlmICggJE9iamVjdERhdGEtPntJbmNsdWRlQXJ0aWNsZXN9ICkgewogICAgICAgIGlmICggJE9iamVjdERhdGEtPntBcnRpY2xlU2VwYXJhdGVMaW5lc30gKSB7CiAgICAgICAgICAgIHB1c2ggQEVsZW1lbnRMaXN0LCB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnQXJ0aWNsZV9UaWNrZXRJRCcsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnQXJ0aWNsZV9UaWNrZXRJRCcsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAjIGNvbHVtbnMgZm9yIGFydGljbGVzCiAgICAgICAgcHVzaCBARWxlbWVudExpc3QsIG1hcCB7IHsgS2V5ID0+ICJBcnRpY2xlXyRfIiwgVmFsdWUgPT4gIkFydGljbGVfJF8iIH0gfQogICAgICAgICAgICBxdyggQXJ0aWNsZUlEIEFydGljbGVCYWNrZW5kIEZyb20gVG8gQ2MgQmNjIFN1YmplY3QgQm9keSBTZW5kZXJUeXBlIElzVmlzaWJsZUZvckN1c3RvbWVyCiAgICAgICAgICAgIE1lc3NhZ2VJRCBSZXBseVRvIEluUmVwbHlUbyBSZWZlcmVuY2VzIENoYXJzZXQgTWltZVR5cGUgUGxhaW5FbWFpbCBDcmVhdGVUaW1lICk7CgogICAgICAgICMgY29sdW1ucyBmb3IgYXJ0aWNsZSBkeW5hbWljIGZpZWxkcwogICAgICAgIG15ICREeW5GaWVsZExpc3QgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0KAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICdBcnRpY2xlJywKICAgICAgICAgICAgUmVzdWx0VHlwZSA9PiAnSEFTSCcsCiAgICAgICAgKTsKICAgICAgICBwdXNoIEBFbGVtZW50TGlzdCwKICAgICAgICAgICAgbWFwIHsgeyBLZXkgPT4gIkFydGljbGVfRHluYW1pY0ZpZWxkXyRfIiwgVmFsdWUgPT4gIkFydGljbGVfRHluYW1pY0ZpZWxkXyRfIiB9IH0KICAgICAgICAgICAgdmFsdWVzICV7JER5bkZpZWxkTGlzdH07CiAgICB9CgogICAgcmV0dXJuIFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdLZXknLAogICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ0tleScpLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXEBFbGVtZW50TGlzdCwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0lkZW50aWZpZXInLAogICAgICAgICAgICBOYW1lICA9PiBUcmFuc2xhdGFibGUoJ0lkZW50aWZpZXInKSwKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnQ2hlY2tib3gnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICBdOwp9Cgo9aGVhZDIgU2VhcmNoQXR0cmlidXRlc0dldCgpCgpnZXQgdGhlIHNlYXJjaCBvYmplY3QgYXR0cmlidXRlcyBvZiBhbiBvYmplY3QgYXMgYXJyYXkvaGFzaCByZWZlcmVuY2UKCiAgICBteSAkQXR0cmlidXRlTGlzdCA9ICRPYmplY3RCYWNrZW5kLT5TZWFyY2hBdHRyaWJ1dGVzR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgU2VhcmNoQXR0cmlidXRlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgIG5vdGUgdGhhdCB0aGVyZSBpcyBubyBzZWFyY2ggYnkgb3duZXIgb3IgcmVzcG9uc2libGUKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIFRPRE86IHdoeSBpcyB0aGUgT2JqZWN0RGF0YSBuZWVkZWQgaGVyZT8KICAgICMgZ2V0IG9iamVjdCBkYXRhCiAgICBteSAkT2JqZWN0RGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKS0+T2JqZWN0RGF0YUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICByZXR1cm4gW10gdW5sZXNzICRPYmplY3REYXRhOwogICAgcmV0dXJuIFtdIHVubGVzcyByZWYgJE9iamVjdERhdGEgZXEgJ0hBU0gnOwoKICAgIG15ICVRdWV1ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVMaXN0KCk7CgogICAgbXkgJVN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpLT5TdGF0ZUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIG15ICVQcmlvcml0eUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKS0+UHJpb3JpdHlMaXN0KAogICAgICAgIFZhbGlkID0+IDEsCiAgICApOwoKICAgIG15IEBBdHRyaWJ1dGVzID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1F1ZXVlSURzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUXVldWVMaXN0LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDAsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgICAgID0+IDUsCiAgICAgICAgICAgICAgICBNdWx0aXBsZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgKTsKCiAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaWNrZXQ6OlR5cGUnKSApIHsKICAgICAgICBteSAlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpLT5UeXBlTGlzdCgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBBdHRyaWJ1dGVzLCB7CiAgICAgICAgICAgIEtleSAgID0+ICdUeXBlSURzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1R5cGUnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVUeXBlTGlzdCB8fCB7fSwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAwLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiA1LAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSApIHsKICAgICAgICBteSAlU2VydmljZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAQXR0cmlidXRlcywgewogICAgICAgICAgICBLZXkgICA9PiAnU2VydmljZUlEcycsCiAgICAgICAgICAgIE5hbWUgID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlU2VydmljZUxpc3QgfHwge30sCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMCwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBTaXplICAgICAgICAgPT4gNSwKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH07CgogICAgICAgIG15ICVTTEFMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpLT5TTEFMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBBdHRyaWJ1dGVzLCB7CiAgICAgICAgICAgIEtleSAgID0+ICdTTEFJRHMnLAogICAgICAgICAgICBOYW1lICA9PiAnU0xBJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlU0xBTGlzdCB8fCB7fSwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAwLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiA1LAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKICAgIH0KCiAgICBwdXNoIEBBdHRyaWJ1dGVzLAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1N0YXRlSURzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1N0YXRlJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlU3RhdGVMaXN0LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDAsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgICAgID0+IDUsCiAgICAgICAgICAgICAgICBNdWx0aXBsZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1ByaW9yaXR5SURzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1ByaW9yaXR5JywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUHJpb3JpdHlMaXN0LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDAsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAxLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgICAgID0+IDUsCiAgICAgICAgICAgICAgICBNdWx0aXBsZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0N1c3RvbWVySUQnLAogICAgICAgICAgICBOYW1lICA9PiAnQ3VzdG9tZXJJRCcsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMjUwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0Q3JlYXRlVGltZU9sZGVyTWludXRlcycsCiAgICAgICAgICAgIE5hbWUgID0+ICdUaWNrZXQgQ3JlYXRlIFRpbWUgKG9sZGVyKSBbbWluXScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMjUwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0Q3JlYXRlVGltZU5ld2VyTWludXRlcycsCiAgICAgICAgICAgIE5hbWUgID0+ICdUaWNrZXQgQ3JlYXRlIFRpbWUgKG5ld2VyKSBbbWluXScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gMjUwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnVGlja2V0Q2hhbmdlVGltZU9sZGVyTWludXRlcycsCiAgICAgICAgICAgIE5hbWUgID0+ICdUaWNrZXQgQ2hhbmdlIFRpbWUgKG9sZGVyKSBbbWluXScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICBTaXplICAgICAgPT4gNTAsCiAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNTAsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXRDaGFuZ2VUaW1lTmV3ZXJNaW51dGVzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1RpY2tldCBDaGFuZ2UgVGltZSAobmV3ZXIpIFttaW5dJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICAgICAgfSwKICAgICAgICB9OwoKICAgIG15ICVEYXRlUmVzdHJpY3Rpb25zID0gKAogICAgICAgIFRpY2tldENyZWF0ZVRpbWVPbGRlckRhdGUgICAgID0+ICdUaWNrZXQgQ3JlYXRlIFRpbWUgKGJlZm9yZSknLAogICAgICAgIFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgICAgID0+ICdUaWNrZXQgQ3JlYXRlIFRpbWUgKGFmdGVyKScsCiAgICAgICAgVGlja2V0TGFzdENoYW5nZVRpbWVPbGRlckRhdGUgPT4gJ1RpY2tldCBMYXN0IENoYW5nZSBUaW1lIChiZWZvcmUpJywKICAgICAgICBUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyRGF0ZSA9PiAnVGlja2V0IExhc3QgQ2hhbmdlIFRpbWUgKGFmdGVyKScsCiAgICApOwoKICAgIGZvciBteSAkS2V5ICgga2V5cyAlRGF0ZVJlc3RyaWN0aW9ucyApIHsKICAgICAgICBwdXNoIEBBdHRyaWJ1dGVzLCB7CiAgICAgICAgICAgIEtleSAgID0+ICRLZXksCiAgICAgICAgICAgIE5hbWUgID0+ICREYXRlUmVzdHJpY3Rpb25zeyRLZXl9LAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAnRGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT3B0aW9uYWwgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiBcQEF0dHJpYnV0ZXM7Cn0KCj1oZWFkMiBFeHBvcnREYXRhR2V0KCkKCmdldCBleHBvcnQgZGF0YSBhcyBDPDJELWFycmF5LWhhc2g+IHJlZmVyZW5jZQoKICAgIG15ICRFeHBvcnREYXRhID0gJE9iamVjdEJhY2tlbmQtPkV4cG9ydERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBFeHBvcnREYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgb2JqZWN0IGRhdGEKICAgIG15ICRPYmplY3REYXRhID0gJFNlbGYtPntJbXBvcnRFeHBvcnRPYmplY3R9LT5PYmplY3REYXRhR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgb2JqZWN0IGRhdGEKICAgIGlmICggISRPYmplY3REYXRhIHx8IHJlZiAkT2JqZWN0RGF0YSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBvYmplY3QgZGF0YSBmb3VuZCBmb3IgdGhlIHRlbXBsYXRlIGlkICRQYXJhbXtUZW1wbGF0ZUlEfSIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IHRoZSBtYXBwaW5nIGxpc3QKICAgIG15ICRNYXBwaW5nTGlzdCA9ICRTZWxmLT57SW1wb3J0RXhwb3J0T2JqZWN0fS0+TWFwcGluZ0xpc3QoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayB0aGUgbWFwcGluZyBsaXN0CiAgICBpZiAoICEkTWFwcGluZ0xpc3QgfHwgcmVmICRNYXBwaW5nTGlzdCBuZSAnQVJSQVknIHx8ICFAeyRNYXBwaW5nTGlzdH0gKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gdmFsaWQgbWFwcGluZyBsaXN0IGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJFBhcmFte1RlbXBsYXRlSUR9IiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSB0aGUgbWFwcGluZyBvYmplY3QgbGlzdAogICAgbXkgQE1hcHBpbmdPYmplY3RMaXN0OwogICAgZm9yIG15ICRNYXBwaW5nSUQgKCBAeyRNYXBwaW5nTGlzdH0gKSB7CgogICAgICAgICMgZ2V0IG1hcHBpbmcgb2JqZWN0IGRhdGEKICAgICAgICBteSAkTWFwcGluZ09iamVjdERhdGEgPSAkU2VsZi0+e0ltcG9ydEV4cG9ydE9iamVjdH0tPk1hcHBpbmdPYmplY3REYXRhR2V0KAogICAgICAgICAgICBNYXBwaW5nSUQgPT4gJE1hcHBpbmdJRCwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgbWFwcGluZyBvYmplY3QgZGF0YQogICAgICAgIGlmICggISRNYXBwaW5nT2JqZWN0RGF0YSB8fCByZWYgJE1hcHBpbmdPYmplY3REYXRhIG5lICdIQVNIJyApIHsKCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyB2YWxpZCBtYXBwaW5nIGxpc3QgZm91bmQgZm9yIHRoZSB0ZW1wbGF0ZSBpZCAkUGFyYW17VGVtcGxhdGVJRH0iLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcHVzaCBATWFwcGluZ09iamVjdExpc3QsICRNYXBwaW5nT2JqZWN0RGF0YTsKICAgIH0KCiAgICAjIGdldCBzZWFyY2ggZGF0YQogICAgbXkgJFNlYXJjaERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPlNlYXJjaERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgbXkgJUlzU2VsZWN0aW9uID0gbWFwIHsgJF8gPT4gMSB9IHF3KCBUeXBlSURzIFF1ZXVlSURzIFNlcnZpY2VJRHMgU0xBSURzIFN0YXRlSURzIFByaW9yaXR5SURzIEN1c3RvbWVySUQgKTsKCiAgICBteSAlU2VhcmNoRGF0YVByZXBhcmVkOwogICAgS0VZOgogICAgZm9yIG15ICRLZXkgKCBrZXlzICRTZWFyY2hEYXRhLT4lKiApIHsKICAgICAgICBuZXh0IEtFWSBpZiAhZGVmaW5lZCAkU2VhcmNoRGF0YS0+eyRLZXl9OwoKICAgICAgICAkU2VhcmNoRGF0YVByZXBhcmVkeyRLZXl9ID0gJElzU2VsZWN0aW9ueyRLZXl9ID8gWyBzcGxpdCAnIyMjIyMnLCAkU2VhcmNoRGF0YS0+eyRLZXl9IF0gOiAkU2VhcmNoRGF0YS0+eyRLZXl9OwogICAgfQoKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyBTZWFyY2ggYWxsIFRpY2tldF9JRHMKICAgIG15IEBUaWNrZXRJRHMgPSBzb3J0IHsgJGEgPD0+ICRiIH0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgICAgIExpbWl0ICA9PiAxXzAwMF8wMDBfMDAwLAogICAgICAgICVTZWFyY2hEYXRhUHJlcGFyZWQsCiAgICAgICAgUmVzdWx0ID0+ICdBUlJBWScsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgIG15IEBFeHBvcnREYXRhOwogICAgbXkgJVRpY2tldERhdGE7CiAgICBteSAlQXJ0aWNsZURhdGE7CgogICAgbXkgQFRpY2tldE1hcHBpbmc7CiAgICBteSBAQXJ0aWNsZU1hcHBpbmc7CiAgICBteSAkVGlja2V0TWFwcGluZ0xhc3Q7CiAgICBteSAkQXJ0aWNsZU1hcHBpbmdMYXN0ID0gMDsgICAgIyBpbiBjYXNlIG9mIHNlcGFyYXRlIGxpbmVzIGFuIGVtcHR5IGVudHJ5IHdpbGwgcHJlY2VkZSAodGh1cyBub3QgLTEpCiAgICBteSAkU3RvcmVQbGFpbkVtYWlsICAgID0gMDsKCiAgICBmb3IgbXkgJGkgKCAwIC4uICQjTWFwcGluZ09iamVjdExpc3QgKSB7CgogICAgICAgICMgaGFuZGxlIGVtcHR5IGtleQogICAgICAgIGlmICggISRNYXBwaW5nT2JqZWN0TGlzdFskaV17S2V5fSApIHsKICAgICAgICAgICAgJFRpY2tldE1hcHBpbmdbJGlde0tleX0gPSAnJzsKICAgICAgICAgICAgaWYgKCAhJE9iamVjdERhdGEtPntBcnRpY2xlU2VwYXJhdGVMaW5lc30gKSB7CiAgICAgICAgICAgICAgICAkVGlja2V0TWFwcGluZ0xhc3QgPSAkaTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBhcnRpY2xlIGtleXMKICAgICAgICBlbHNpZiAoICRNYXBwaW5nT2JqZWN0TGlzdFskaV17S2V5fSA9fiAvXkFydGljbGVfKC4rKSQvICkgewogICAgICAgICAgICBpZiAoICRPYmplY3REYXRhLT57QXJ0aWNsZVNlcGFyYXRlTGluZXN9ICkgewogICAgICAgICAgICAgICAgcHVzaCBAQXJ0aWNsZU1hcHBpbmcsICRNYXBwaW5nT2JqZWN0TGlzdFskaV07CiAgICAgICAgICAgICAgICAkQXJ0aWNsZU1hcHBpbmdbICsrJEFydGljbGVNYXBwaW5nTGFzdCBde0tleX0gPSAkMTsKICAgICAgICAgICAgICAgICRUaWNrZXRNYXBwaW5nWyRpXXtLZXl9ID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkQXJ0aWNsZU1hcHBpbmdbJGldICAgICAgPSAkTWFwcGluZ09iamVjdExpc3RbJGldOwogICAgICAgICAgICAgICAgJEFydGljbGVNYXBwaW5nWyRpXXtLZXl9ID0gJDE7CiAgICAgICAgICAgICAgICAkQXJ0aWNsZU1hcHBpbmdMYXN0ICAgICAgPSAkaTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkMSBlcSAnUGxhaW5FbWFpbCcgKSB7CiAgICAgICAgICAgICAgICAkU3RvcmVQbGFpbkVtYWlsID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB0aWNrZXQga2V5cwogICAgICAgIGVsc2UgewogICAgICAgICAgICAkVGlja2V0TWFwcGluZ1skaV0gPSAkTWFwcGluZ09iamVjdExpc3RbJGldOwogICAgICAgICAgICAkVGlja2V0TWFwcGluZ0xhc3QgPSAkaTsKICAgICAgICB9CiAgICB9CgogICAgIyBleHBvcnQgdGlja2V0cyAuLi4KICAgIGZvciBteSAkVGlja2V0SUQgKEBUaWNrZXRJRHMpIHsKCiAgICAgICAgJVRpY2tldERhdGEgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRHZXQoCiAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBkYXRhIHRvIHRoZSBleHBvcnQgZGF0YSBhcnJheQogICAgICAgIG15IEBUaWNrZXRJdGVtOwogICAgICAgIGZvciBteSAkaSAoIDAgLi4gJFRpY2tldE1hcHBpbmdMYXN0ICkgewoKICAgICAgICAgICAgIyBleHRyYWN0IGtleQogICAgICAgICAgICBteSAkS2V5ID0gJFRpY2tldE1hcHBpbmdbJGlde0tleX07CgogICAgICAgICAgICAkVGlja2V0SXRlbVskaV0gPSAkS2V5ICYmIGRlZmluZWQgJFRpY2tldERhdGF7JEtleX0KICAgICAgICAgICAgICAgID8gSXNBcnJheVJlZldpdGhEYXRhKCAkVGlja2V0RGF0YXskS2V5fSApCiAgICAgICAgICAgICAgICAgICAgPyBqb2luKCAnIyMjJywgKCBtYXAgeyBlbmNvZGVfYmFzZTY0KCBFbmNvZGU6OmVuY29kZSggJ1VURi04JywgJF8gKSApIH0gJFRpY2tldERhdGF7JEtleX0tPkAqICkgKQogICAgICAgICAgICAgICAgICAgIDogJFRpY2tldERhdGF7JEtleX0KICAgICAgICAgICAgICAgIDogJyc7CiAgICAgICAgfQoKICAgICAgICBpZiAoICEkT2JqZWN0RGF0YS0+e0luY2x1ZGVBcnRpY2xlc30gfHwgJE9iamVjdERhdGEtPntBcnRpY2xlU2VwYXJhdGVMaW5lc30gKSB7CiAgICAgICAgICAgIHB1c2ggQEV4cG9ydERhdGEsIFxAVGlja2V0SXRlbTsKICAgICAgICB9CgogICAgICAgIGlmICggJE9iamVjdERhdGEtPntJbmNsdWRlQXJ0aWNsZXN9ICkgewoKICAgICAgICAgICAgIyBHZXQgYXJ0aWNsZSBkYXRhLgogICAgICAgICAgICBteSBAQXJ0aWNsZXMgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkQXJ0aWNsZUNvdW50ID0gMDsKICAgICAgICAgICAgZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZXMpIHsKCiAgICAgICAgICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoICV7JEFydGljbGV9ICk7CgogICAgICAgICAgICAgICAgbXkgJUFydGljbGVGdWxsID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgICAgPT4gJEFydGljbGUtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRBcnRpY2xlRnVsbHtBcnRpY2xlQmFja2VuZH0gPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkNoYW5uZWxOYW1lR2V0KCk7CgogICAgICAgICAgICAgICAgaWYgKCAkU3RvcmVQbGFpbkVtYWlsICYmICRBcnRpY2xlQmFja2VuZE9iamVjdC0+Y2FuKCdBcnRpY2xlUGxhaW4nKSApIHsKICAgICAgICAgICAgICAgICAgICAkQXJ0aWNsZUZ1bGx7UGxhaW5FbWFpbH0gPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVQbGFpbigKICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSBAQXJ0aWNsZUl0ZW0gPSAkT2JqZWN0RGF0YS0+e0FydGljbGVTZXBhcmF0ZUxpbmVzfSA/ICgnJykgOiBAVGlja2V0SXRlbTsKICAgICAgICAgICAgICAgIEFSVElDTEVNQVA6CiAgICAgICAgICAgICAgICBmb3IgbXkgJGkgKCAwIC4uICRBcnRpY2xlTWFwcGluZ0xhc3QgKSB7CgogICAgICAgICAgICAgICAgICAgICMgZW1wdHkgZmllbGRzIGFyZSBkb25lIGluIHRoZSB0aWNrZXQgcGFydAogICAgICAgICAgICAgICAgICAgIG5leHQgQVJUSUNMRU1BUCB1bmxlc3MgJEFydGljbGVNYXBwaW5nWyRpXTsKCiAgICAgICAgICAgICAgICAgICAgIyBleHRyYWN0IGtleQogICAgICAgICAgICAgICAgICAgIG15ICRLZXkgPSAkQXJ0aWNsZU1hcHBpbmdbJGlde0tleX07CgogICAgICAgICAgICAgICAgICAgICRBcnRpY2xlSXRlbVskaV0gPSBkZWZpbmVkICRBcnRpY2xlRnVsbHskS2V5fQogICAgICAgICAgICAgICAgICAgICAgICA/IElzQXJyYXlSZWZXaXRoRGF0YSggJEFydGljbGVGdWxseyRLZXl9ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gam9pbiggJyMjIycsICggbWFwIHsgZW5jb2RlX2Jhc2U2NCggRW5jb2RlOjplbmNvZGUoICdVVEYtOCcsICRfICkgKSB9ICRBcnRpY2xlRnVsbHskS2V5fS0+QCogKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRBcnRpY2xlRnVsbHskS2V5fQogICAgICAgICAgICAgICAgICAgICAgICA6ICcnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggJE9iamVjdERhdGEtPntJbmNsdWRlQXR0YWNobWVudHN9ICYmICRBcnRpY2xlQmFja2VuZE9iamVjdC0+Y2FuKCdBcnRpY2xlQXR0YWNobWVudEluZGV4JykgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJUluZGV4ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudEluZGV4KAogICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGUtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVJbmRleCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUF0dGFjaG1lbnQgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVBdHRhY2htZW50KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZS0+e0FydGljbGVJRH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlSUQgICAgPT4gJEtleSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkS2V5IChxdyggRmlsZW5hbWUgQ29udGVudFR5cGUgRGlzcG9zaXRpb24gKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEF0dGFjaG1lbnR7JEtleX0gPSBFbmNvZGU6OmVuY29kZSggJ1VURi04JywgJEF0dGFjaG1lbnR7JEtleX0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJEF0dGFjaG1lbnRTdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkS2V5IChxdyggRmlsZW5hbWUgQ29udGVudElEIENvbnRlbnRUeXBlIERpc3Bvc2l0aW9uIENvbnRlbnQgQ29udGVudEFsdGVybmF0aXZlICkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBdHRhY2htZW50eyRLZXl9IC8vPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBdHRhY2htZW50U3RyaW5nIC49ICRBdHRhY2htZW50U3RyaW5nID8gJyMjIycgOiAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBdHRhY2htZW50U3RyaW5nIC49ICRLZXkgLiAnIyMjJyAuIGVuY29kZV9iYXNlNjQoICRBdHRhY2htZW50eyRLZXl9ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEFydGljbGVJdGVtLCAkQXR0YWNobWVudFN0cmluZzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcHVzaCBARXhwb3J0RGF0YSwgXEBBcnRpY2xlSXRlbTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXEBFeHBvcnREYXRhOwp9Cgo9aGVhZDIgSW1wb3J0RGF0YVNhdmUoKQoKaW1wb3J0cyBhIHNpbmdsZSBlbnRpdHkgb2YgdGhlIGltcG9ydCBkYXRhLiBUaGUgQzxUZW1wbGF0ZUlEPiBwb2ludHMgdG8gdGhlIGRlZmluaXRpb24Kb2YgdGhlIGN1cnJlbnQgaW1wb3J0LiBDPEltcG9ydERhdGFSb3c+IGhvbGRzIHRoZSBkYXRhLiBDPENvdW50ZXI+IGlzIG9ubHkgdXNlZCBpbgplcnJvciBtZXNzYWdlcywgZm9yIGluZGljYXRpbmcgd2hpY2ggaXRlbSB3YXMgbm90IGltcG9ydGVkIHN1Y2Nlc3NmdWxseS4KClRoZSBkZWNpc2lvbiB3aGF0IGNvbnN0aXR1dGUgYW4gZW1wdHkgdmFsdWUgaXMgYSBiaXQgaGFpcnkuIEhlcmUgYXJlIHRoZSBydWxlcy4KRmllbGRzIHRoYXQgYXJlIG5vdCBldmVuIG1lbnRpb25lZCBpbiB0aGUgSW1wb3J0IGRlZmluaXRpb24gYXJlIGVtcHR5LiBUaGVzZSBhcmUgdGhlICdub3QgZGVmaW5lZCcgZmllbGRzLgpFbXB0eSBzdHJpbmdzIGFuZCB1bmRlZmluZWQgdmFsdWVzIGNvbnN0aXR1dGUgZW1wdHkgZmllbGRzLgpGaWVsZHMgd2l0aCB3aXRoIG9ubHkgb25lIG9yIG1vcmUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFyZSBub3QgZW1wdHkuCkZpZWxkcyB3aXRoIHRoZSBkaWdpdCAnMCcgYXJlIG5vdCBlbXB0eS4KCiAgICBteSAoICRUaWNrZXRJRCwgJFJldENvZGUgKSA9ICRPYmplY3RCYWNrZW5kLT5JbXBvcnREYXRhU2F2ZSgKICAgICAgICBUZW1wbGF0ZUlEICAgID0+IDEyMywKICAgICAgICBJbXBvcnREYXRhUm93ID0+ICRBcnJheVJlZiwKICAgICAgICBDb3VudGVyICAgICAgID0+IDM2NywKICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICApOwoKQW4gZW1wdHkgQzxUaWNrZXRJRD4gaW5kaWNhdGVzIGZhaWx1cmUuIE90aGVyd2lzZSBpdCBpbmRpY2F0ZXMgdGhlCmxvY2F0aW9uIG9mIHRoZSBpbXBvcnRlZCBkYXRhLgpDPFJldENvZGU+IGlzIGVpdGhlciAnQ3JlYXRlZCcsICdVcGRhdGVkJyBvciAnU2tpcHBlZCcuICdDcmVhdGVkJyBtZWFucyB0aGF0IGEgbmV3CnRpY2tldCBoYXMgYmVlbiBjcmVhdGVkLiAnVXBkYXRlZCcgbWVhbnMgdGhhdCB0aGUgdGlja2V0IGhhcyBiZWVuIHVwZGF0ZWQuICdTa2lwcGVkJwptZWFucyB0aGF0IHRoZSBkYXRhIGlzIGlkZW50aWNhbCBhbmQgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCgpObyBjb2RlcyBoYXZlIHlldCBiZWVuIGRlZmluZWQgZm9yIHRoZSBmYWlsdXJlIGNhc2UuCgo9Y3V0CgpzdWIgSW1wb3J0RGF0YVNhdmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBJbXBvcnREYXRhUm93IENvdW50ZXIgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpbXBvcnQgZGF0YSByb3cKICAgIGlmICggcmVmICRQYXJhbXtJbXBvcnREYXRhUm93fSBuZSAnQVJSQVknICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06IEltcG9ydERhdGFSb3cgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UiLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBvYmplY3QgZGF0YSwgdGhhdCBpcyB0aGUgY29uZmlnIG9mIHRoaXMgdGVtcGxhdGUKICAgIG15ICRPYmplY3REYXRhID0gJFNlbGYtPntJbXBvcnRFeHBvcnRPYmplY3R9LT5PYmplY3REYXRhR2V0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgb2JqZWN0IGRhdGEKICAgIGlmICggISRPYmplY3REYXRhIHx8IHJlZiAkT2JqZWN0RGF0YSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgIC4gIk5vIG9iamVjdCBkYXRhIGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJyRQYXJhbXtUZW1wbGF0ZUlEfSciLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGp1c3QgZm9yIGNvbnZlbmllbmNlCiAgICBteSAkRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyA9ICRPYmplY3REYXRhLT57RW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlc307CgogICAgIyBnZXQgYW5kIGNoZWNrIHRoZSBtYXBwaW5nIGxpc3QKICAgIG15ICRNYXBwaW5nTGlzdCA9ICRTZWxmLT57SW1wb3J0RXhwb3J0T2JqZWN0fS0+TWFwcGluZ0xpc3QoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CiAgICBpZiAoICEkTWFwcGluZ0xpc3QgfHwgcmVmICRNYXBwaW5nTGlzdCBuZSAnQVJSQVknIHx8ICFAeyRNYXBwaW5nTGlzdH0gKSB7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PgogICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAuICJObyB2YWxpZCBtYXBwaW5nIGxpc3QgZm91bmQgZm9yIHRoZSB0ZW1wbGF0ZSBpZCAnJFBhcmFte1RlbXBsYXRlSUR9JyIsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIHRoZSBtYXBwaW5nIG9iamVjdCBsaXN0CiAgICAjIFRPRE86IHdoeSBpcyB0aGlzIGNhbGxlZCBmb3IgZXZlcnkgcm93IG9mIHRoZSBpbXBvcnQgZmlsZSA/CiAgICBteSBATWFwcGluZ09iamVjdExpc3Q7CiAgICBmb3IgbXkgJE1hcHBpbmdJRCAoIEB7JE1hcHBpbmdMaXN0fSApIHsKCiAgICAgICAgIyBnZXQgbWFwcGluZyBvYmplY3QgZGF0YQogICAgICAgIG15ICRNYXBwaW5nT2JqZWN0RGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKS0+TWFwcGluZ09iamVjdERhdGFHZXQoCiAgICAgICAgICAgIE1hcHBpbmdJRCA9PiAkTWFwcGluZ0lELAogICAgICAgICAgICBVc2VySUQgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICAgICAgaWYgKCAhJE1hcHBpbmdPYmplY3REYXRhIHx8IHJlZiAkTWFwcGluZ09iamVjdERhdGEgbmUgJ0hBU0gnICkgewoKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4KICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgICAgICAuICJObyBtYXBwaW5nIG9iamVjdCBkYXRhIGZvdW5kIGZvciB0aGUgbWFwcGluZyBpZCAnJE1hcHBpbmdJRCciLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcHVzaCBATWFwcGluZ09iamVjdExpc3QsICRNYXBwaW5nT2JqZWN0RGF0YTsKICAgIH0KCiAgICAjIHByZXBhcmUgaW1wb3J0IGRhdGEKICAgIG15ICVUaWNrZXQ7CiAgICBteSAlQXJ0aWNsZTsKICAgIG15ICVJZGVudGlmaWVyOwoKICAgIG15ICRNYXBwaW5nQ29uZmlnID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCcpIC8vIHt9OwogICAgbXkgJVZhbHVlTWFwICAgICAgPSBtYXAgeyAkXy0+e0tleX0gPT4gJF8tPntNYXB9IH0gdmFsdWVzICRNYXBwaW5nQ29uZmlnLT4lKjsKCiAgICAjIGhhbmRsZSBhIHNlcGFyYXRlIGFydGljbGUKICAgICMgVE9ETzogd2hhdCBhYm91dCAiMCIgPwogICAgaWYgKCAkT2JqZWN0RGF0YS0+e0luY2x1ZGVBcnRpY2xlc30gJiYgJE9iamVjdERhdGEtPntBcnRpY2xlU2VwYXJhdGVMaW5lc30gJiYgISRQYXJhbXtJbXBvcnREYXRhUm93fVswXSApIHsKCiAgICAgICAgIyBoYW5kbGluZyBhbiBhcnRpY2xlIGFuIGEgc2VwYXJhdGUgbGluZQogICAgICAgIG15ICRpID0gMTsKICAgICAgICBNQVBQSU5HT0JKRUNUREFUQToKICAgICAgICBmb3IgbXkgJE1hcHBpbmdPYmplY3REYXRhIChATWFwcGluZ09iamVjdExpc3QpIHsKCiAgICAgICAgICAgIGlmICggJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSA9fiAvXkFydGljbGVfKC4rKSQvICkgewogICAgICAgICAgICAgICAgbXkgJFZhbHVlID0gJFBhcmFte0ltcG9ydERhdGFSb3d9WyAkaSsrIF07CiAgICAgICAgICAgICAgICAkQXJ0aWNsZXskMX0gPSBkZWZpbmVkICRWYWx1ZSAmJiAkVmFsdWVNYXB7ICRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX0gfSAmJiBkZWZpbmVkICRWYWx1ZU1hcHsgJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSB9eyRWYWx1ZX0KICAgICAgICAgICAgICAgICAgICA/ICRWYWx1ZU1hcHsgJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSB9eyRWYWx1ZX0gOiAkVmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBuZXh0IE1BUFBJTkdPQkpFQ1REQVRBOwogICAgICAgICAgICB9CgogICAgICAgICAgICBuZXh0IE1BUFBJTkdPQkpFQ1REQVRBIHVubGVzcyAkTWFwcGluZ09iamVjdERhdGEtPntJZGVudGlmaWVyfTsKCiAgICAgICAgICAgIGlmICggJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSBuZSAnQXJ0aWNsZV9BcnRpY2xlSUQnICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PgogICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiQXJ0aWNsZXMgY2FuIG9ubHkgYmUgaWRlbnRpZmllZCB2aWEgJ0FydGljbGVfQXJ0aWNsZUlEJyBub3QgYnkgJyRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX0nLiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggISRQYXJhbXtJbXBvcnREYXRhUm93fVsgJGkgLSAxIF0gKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgICAgICAgICAuICInQXJ0aWNsZV9BcnRpY2xlSUQnIGNhbiBub3QgYmUgZW1wdHkgb3IgMCB3aGVuIHVzZWQgYXMgaWRlbnRpZmllci4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJElkZW50aWZpZXJ7QXJ0aWNsZX17QXJ0aWNsZUlEfSA9IDE7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRPYmplY3REYXRhLT57SW5jbHVkZUF0dGFjaG1lbnRzfSAmJiAkaSA8PSAkI3sgJFBhcmFte0ltcG9ydERhdGFSb3d9IH0gKSB7CgogICAgICAgICAgICAjIHRoZSBsYXN0IGFuZCB1bm1hcHBlZCBlbnRyaWVzIGFyZSBhdHRhY2htZW50cwogICAgICAgICAgICAkQXJ0aWNsZXtBdHRhY2htZW50c30gPSBbIEB7ICRQYXJhbXtJbXBvcnREYXRhUm93fSB9WyAkaSAuLiAkI3sgJFBhcmFte0ltcG9ydERhdGFSb3d9IH0gXSBdOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGhhbmRsaW5nIGEgdGlja2V0IGxpbmUKICAgICAgICBNQVBQSU5HT0JKRUNUREFUQToKICAgICAgICBmb3IgbXkgJGkgKCAwIC4uICQjTWFwcGluZ09iamVjdExpc3QgKSB7CgogICAgICAgICAgICBteSAkTWFwcGluZ09iamVjdERhdGEgPSAkTWFwcGluZ09iamVjdExpc3RbJGldOwoKICAgICAgICAgICAgbXkgJFZhbHVlID0gJFBhcmFte0ltcG9ydERhdGFSb3d9WyRpXTsKICAgICAgICAgICAgJFZhbHVlID0gZGVmaW5lZCAkVmFsdWUgJiYgJFZhbHVlTWFweyAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9IH0gJiYgZGVmaW5lZCAkVmFsdWVNYXB7ICRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX0gfXskVmFsdWV9CiAgICAgICAgICAgICAgICA/ICRWYWx1ZU1hcHsgJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSB9eyRWYWx1ZX0gOiAkVmFsdWU7CgogICAgICAgICAgICBpZiAoICRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX0gPX4gbS9eQXJ0aWNsZV8oLispJC8gKSB7CiAgICAgICAgICAgICAgICBuZXh0IE1BUFBJTkdPQkpFQ1REQVRBIGlmICRPYmplY3REYXRhLT57QXJ0aWNsZVNlcGFyYXRlTGluZXN9OwogICAgICAgICAgICAgICAgbmV4dCBNQVBQSU5HT0JKRUNUREFUQSB1bmxlc3MgJE9iamVjdERhdGEtPntJbmNsdWRlQXJ0aWNsZXN9OwoKICAgICAgICAgICAgICAgICRBcnRpY2xleyQxfSA9ICRWYWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRUaWNrZXR7ICRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX0gfSA9ICRWYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZGVudGlmaWVycyBhcmUgdXN1YWxseSBUaWNrZXRJRCBvciBUaWNrZXROdW1iZXIKICAgICAgICAgICAgbmV4dCBNQVBQSU5HT0JKRUNUREFUQSB1bmxlc3MgJE1hcHBpbmdPYmplY3REYXRhLT57SWRlbnRpZmllcn07CgogICAgICAgICAgICBpZiAoICEkVmFsdWUgKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgICAgICAgICAuICInJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fScgY2FuIG5vdCBiZSBlbXB0eSBvciAwIHdoZW4gdXNlZCBhcyBpZGVudGlmaWVyLiIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9IGVxICdBcnRpY2xlX0FydGljbGVJRCcgKSB7CiAgICAgICAgICAgICAgICAkSWRlbnRpZmllcntBcnRpY2xlfXtBcnRpY2xlSUR9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX0gPX4gL15BcnRpY2xlXy8gKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgICAgICAgICAuICJDdXJyZW50bHkgb25seSBBcnRpY2xlX0FydGljbGVJRCBpcyBhIHZhbGlkIGlkZW50aWZpZXIgZm9yIGFydGljbGVzIChub3QgJyRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX0nKS4iLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkSWRlbnRpZmllcntUaWNrZXR9eyAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9IH0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICVBcnRpY2xlICYmICRPYmplY3REYXRhLT57SW5jbHVkZUF0dGFjaG1lbnRzfSAmJiAkI01hcHBpbmdPYmplY3RMaXN0IDwgJCN7ICRQYXJhbXtJbXBvcnREYXRhUm93fSB9ICkgewoKICAgICAgICAgICAgIyB0aGUgbGFzdCBhbmQgdW5tYXBwZWQgZW50cmllcyBhcmUgYXR0YWNobWVudHMKICAgICAgICAgICAgJEFydGljbGV7QXR0YWNobWVudHN9ID0gWyBAeyAkUGFyYW17SW1wb3J0RGF0YVJvd30gfVsgJCNNYXBwaW5nT2JqZWN0TGlzdCArIDEgLi4gJCN7ICRQYXJhbXtJbXBvcnREYXRhUm93fSB9IF0gXTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJFN0YXR1cyA9ICdTa2lwcGVkJzsKICAgICRTZWxmLT57RXJyb3J9ID0gJyc7CiAgICBpZiAoCiAgICAgICAgJVRpY2tldAogICAgICAgICYmCiAgICAgICAgIWV4aXN0cyAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259eyAkVGlja2V0e1RpY2tldElEfSB9CiAgICAgICAgKQogICAgewogICAgICAgICRTdGF0dXMgPSAkU2VsZi0+X0ltcG9ydFRpY2tldCgKICAgICAgICAgICAgVGlja2V0ICAgICA9PiBcJVRpY2tldCwKICAgICAgICAgICAgSWRlbnRpZmllciA9PiAkSWRlbnRpZmllcntUaWNrZXR9LAogICAgICAgICAgICBPYmplY3REYXRhID0+ICRPYmplY3REYXRhLAogICAgICAgICk7CgogICAgICAgIGlmICggISRTdGF0dXMgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgLiAiVGlja2V0SW1wb3J0OiAkU2VsZi0+e0Vycm9yfSIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJUFydGljbGUgJiYgJE9iamVjdERhdGEtPntJbmNsdWRlQXJ0aWNsZXN9ICkgewogICAgICAgIG15ICRBcnRpY2xlU3RhdHVzID0gJFNlbGYtPl9JbXBvcnRBcnRpY2xlKAogICAgICAgICAgICBBcnRpY2xlICAgID0+IFwlQXJ0aWNsZSwKICAgICAgICAgICAgSWRlbnRpZmllciA9PiAkSWRlbnRpZmllcntBcnRpY2xlfSwKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiAkT2JqZWN0RGF0YSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkQXJ0aWNsZVN0YXR1cyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4KICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgICAgICAuICJBcnRpY2xlSW1wb3J0OiAkU2VsZi0+e0Vycm9yfSIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoICRTdGF0dXMgZXEgJ1NraXBwZWQnICYmICRBcnRpY2xlU3RhdHVzIGVxICdDcmVhdGVkJyApIHsKICAgICAgICAgICAgJFN0YXR1cyA9ICdVcGRhdGVkJzsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICggJFNlbGYtPntMYXN0VGlja2V0SUR9LCAkU3RhdHVzICk7Cn0KCnN1YiBfSW1wb3J0VGlja2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFRpY2tldE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKTsKCiAgICBteSAlVGlja2V0ID0gJFBhcmFte1RpY2tldH0tPiUqOyAgICAjIGRhdGEgZnJvbSB0aGUgaW1wb3J0IGZpbGUKICAgIG15ICVEQlRpY2tldDsgICAgICAgICAgICAgICAgICAgICAgICMgVGlja2V0IGFzIHJldHJpZXZlZCBmcm9tIHRoZSBkYXRhYmFzZQogICAgbXkgJFN0YXR1cyA9ICdTa2lwcGVkJzsKCiAgICBpZiAoICRQYXJhbXtJZGVudGlmaWVyfSApIHsKICAgICAgICBteSAkREJUaWNrZXRJRDsKCiAgICAgICAgIyBUaWNrZXRJRCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgVGlja2V0TnVtYmVyCiAgICAgICAgaWYgKCAkUGFyYW17SWRlbnRpZmllcn17VGlja2V0SUR9ICkgewoKICAgICAgICAgICAgIyBjaGVjayBwcmV2aW91c2x5IGltcG9ydGVkIHRpY2tldHMgb2YgdGhpcyBydW4KICAgICAgICAgICAgaWYgKCAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259eyAkVGlja2V0e1RpY2tldElEfSB9ICkgewoKICAgICAgICAgICAgICAgICMgd2Ugc2lsZW50bHkgc2tpcCB0aGlzIHRpY2tldCwgaWYgaXQgYWxyZWFkeSBoYXMgYmVlbiBpbXBvcnRlZAogICAgICAgICAgICAgICAgIyB0aGlzIHNpdHVhdGlvbiB3aWxsIGFsd2F5cyBvY2N1ciB3aGVuIGFydGljbGVzIGFyZSBub3QgaW1wb3J0ZWQgc2VwYXJhdGVseQogICAgICAgICAgICAgICAgIyBmb3IgdGhlIHNha2Ugb2YgY29uc2lzdGVuY3ksIHdlIHRyZWF0IG90aGVyIHNpdHVhdGlvbnMgdGhlIHNhbWUsIGFsdGhvdWdoIHRoZXkgYXJlIGxlc3MgY2xlYXIKICAgICAgICAgICAgICAgIG15ICRQcmlvID0gISRQYXJhbXtPYmplY3REYXRhfXtBcnRpY2xlU2VwYXJhdGVMaW5lc30KICAgICAgICAgICAgICAgICAgICAmJiAkU2VsZi0+e0xhc3RUaWNrZXRJRH0gPT0gJFNlbGYtPntUaWNrZXRJRFJlbGF0aW9ufXsgJFRpY2tldHtUaWNrZXRJRH0gfSA/ICdkZWJ1ZycgOiAnaW5mbyc7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAkUHJpbywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiU2tpcHBpbmcgdGlja2V0IGNyZWF0aW9uIGZvciBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9IChUaWNrZXRJRCAkVGlja2V0e1RpY2tldElEfSkgYXMgaXQgd2FzIGhhbmRsZWQgYmVmb3JlLiIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xhc3RUaWNrZXRJRH0gPSAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259eyAkVGlja2V0e1RpY2tldElEfSB9OwoKICAgICAgICAgICAgICAgIHJldHVybiAkU3RhdHVzOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGV4aXN0aW5nIGJ1dCB1bmRlZmluZWQgZW50cnkgbWVhbnMgcHJldmlvdXMgZXJyb3IgLSB3ZSBza2lwIGFuZCBkbyBub3RoaW5nCiAgICAgICAgICAgIGVsc2lmICggZXhpc3RzICRTZWxmLT57VGlja2V0SURSZWxhdGlvbn17ICRUaWNrZXR7VGlja2V0SUR9IH0gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiVGlja2V0SUQgJFRpY2tldHtUaWNrZXRJRH0gd2FzIGluY29ycmVjdGx5IGltcG9ydGVkIGJlZm9yZSBjYW5jZWxpbmcgbmV3IHRyeS4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBleGNsdWRlIHRpY2tldHMgd2hpY2ggd2VyZSBjcmVhdGVkIGluIHRoaXMgcnVuIGFuZCBieSBjaGFuY2UgZ290IHRoZSBjdXJyZW50IFRpY2tldElECiAgICAgICAgICAgIGVsc2lmICggIXsgcmV2ZXJzZSAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259LT4lKiB9LT57ICRUaWNrZXR7VGlja2V0SUR9IH0gKSB7CiAgICAgICAgICAgICAgICAkREJUaWNrZXRJRCA9ICRUaWNrZXR7VGlja2V0SUR9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFBhcmFte0lkZW50aWZpZXJ9e1RpY2tldE51bWJlcn0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIHByZXZpb3VzbHkgaW1wb3J0ZWQgdGlja2V0cyBvZiB0aGlzIHJ1bgogICAgICAgICAgICBpZiAoICRTZWxmLT57VGlja2V0TnVtYmVySURSZWxhdGlvbn17ICRUaWNrZXR7VGlja2V0TnVtYmVyfSB9ICkgewoKICAgICAgICAgICAgICAgICMgd2Ugc2lsZW50bHkgc2tpcCB0aGlzIHRpY2tldCwgaWYgaXQgYWxyZWFkeSBoYXMgYmVlbiBpbXBvcnRlZAogICAgICAgICAgICAgICAgIyB0aGlzIHNpdHVhdGlvbiB3aWxsIGFsd2F5cyBvY2N1ciB3aGVuIGFydGljbGVzIGFyZSBub3QgaW1wb3J0ZWQgc2VwYXJhdGVseQogICAgICAgICAgICAgICAgIyBmb3IgdGhlIHNha2Ugb2YgY29uc2lzdGVuY3ksIHdlIHRyZWF0IG90aGVyIHNpdHVhdGlvbnMgdGhlIHNhbWUsIGFsdGhvdWdoIHRoZXkgYXJlIGxlc3MgY2xlYXIKICAgICAgICAgICAgICAgIG15ICRQcmlvID0gISRQYXJhbXtPYmplY3REYXRhfXtBcnRpY2xlU2VwYXJhdGVMaW5lc30KICAgICAgICAgICAgICAgICAgICAmJiAkU2VsZi0+e0xhc3RUaWNrZXRJRH0gPT0gJFNlbGYtPntUaWNrZXROdW1iZXJJRFJlbGF0aW9ufXsgJFRpY2tldHtUaWNrZXROdW1iZXJ9IH0gPyAnZGVidWcnIDogJ2luZm8nOwogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJFByaW8sCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlNraXBwaW5nIHRpY2tldCBjcmVhdGlvbiBmb3IgZW50aXR5ICRQYXJhbXtDb3VudGVyfSAoVGlja2V0TnVtYmVyICRUaWNrZXR7VGlja2V0TnVtYmVyfSkgYXMgaXQgd2FzIGhhbmRsZWQgYmVmb3JlLiIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xhc3RUaWNrZXRJRH0gPSAkU2VsZi0+e1RpY2tldE51bWJlcklEUmVsYXRpb259eyAkVGlja2V0e1RpY2tldE51bWJlcn0gfTsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xhc3RUaWNrZXRJRH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZXhpc3RpbmcgYnV0IHVuZGVmaW5lZCBlbnRyeSBtZWFucyBwcmV2aW91cyBlcnJvciAtIHdlIHNraXAgYW5kIGRvIG5vdGhpbmcKICAgICAgICAgICAgZWxzaWYgKCBleGlzdHMgJFNlbGYtPntUaWNrZXROdW1iZXJJRFJlbGF0aW9ufXsgJFRpY2tldHtUaWNrZXROdW1iZXJ9IH0gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiVGlja2V0TnVtYmVyICRUaWNrZXR7VGlja2V0TnVtYmVyfSB3YXMgaW5jb3JyZWN0bHkgaW1wb3J0ZWQgYmVmb3JlIGNhbmNlbGluZyBuZXcgdHJ5LiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGV4Y2x1ZGUgdGlja2V0cyB3aGljaCB3ZXJlIGNyZWF0ZWQgaW4gdGhpcyBydW4gYW5kIGJ5IGNoYW5jZSBnb3QgdGhlIGN1cnJlbnQgVGlja2V0TnVtYmVyCiAgICAgICAgICAgICMgVE9ETzogaG93IGlzIENyZWF0ZWROdW1iZXJzIHByb3ZpZGVkIHdpdGggY29udGVudCA/CiAgICAgICAgICAgIGVsc2lmICggISRTZWxmLT57Q3JlYXRlZE51bWJlcnN9eyAkVGlja2V0e1RpY2tldE51bWJlcn0gfSApIHsKICAgICAgICAgICAgICAgICREQlRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0SURMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgVG4gPT4gJFRpY2tldHtUaWNrZXROdW1iZXJ9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgJ0ZvciB0aWNrZXQgY29ycmVsYXRpb24gY2hlY2tzIGVpdGhlciBUaWNrZXRJRCBvciBUaWNrZXROdW1iZXIgaGFzIHRvIGJlIGluY2x1ZGVkIGFzIGlkZW50aWZpZXIuIChVc2luZyBubyBpZGVudGlmaWVyIHRvIGp1c3QgY3JlYXRlIG5ldyB0aWNrZXRzIGlzIGFsc28gcG9zc2libGUuKScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJERCVGlja2V0SUQpIHsKICAgICAgICAgICAgJURCVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkREJUaWNrZXRJRCwKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNpbGVudCAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyB2ZXJpZnkgd2hldGhlciB3ZSByZWFsbHkgZ290IHRoZSByaWdodCB0aWNrZXQsIGFsbCBpZGVudGlmaWVycyBtdXN0IG1hdGNoCiAgICBpZiAoJURCVGlja2V0KSB7CiAgICAgICAgQVRUUjoKICAgICAgICBmb3IgbXkgJEF0dHIgKCBrZXlzICRQYXJhbXtJZGVudGlmaWVyfS0+JSogKSB7CiAgICAgICAgICAgIGlmICggJERCVGlja2V0eyRBdHRyfSBuZSAkVGlja2V0eyRBdHRyfSApIHsKICAgICAgICAgICAgICAgICVEQlRpY2tldCA9ICgpOwoKICAgICAgICAgICAgICAgIGxhc3QgQVRUUjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGp1c3QgdXBkYXRlIHRoZSB0aWNrZXQgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50CiAgICBpZiAoJURCVGlja2V0KSB7CiAgICAgICAgJFN0YXR1cyA9ICdTa2lwcGVkJzsKICAgICAgICBteSAkU2tpcEVtcHR5ID0gJFBhcmFte09iamVjdERhdGF9e0VtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXN9OwoKICAgICAgICAjIGN1c3RvbWVyCiAgICAgICAgJFRpY2tldHtDdXN0b21lcklEfSAgICAgfHw9ICRTa2lwRW1wdHkgPyAkREJUaWNrZXR7Q3VzdG9tZXJJRH0gICAgIDogJFBhcmFte09iamVjdERhdGF9e0N1c3RvbWVySUR9OwogICAgICAgICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9IHx8PSAkU2tpcEVtcHR5ID8gJERCVGlja2V0e0N1c3RvbWVyVXNlcklEfSA6ICRQYXJhbXtPYmplY3REYXRhfXtDdXN0b21lclVzZXJJRH07CiAgICAgICAgJERCVGlja2V0e0N1c3RvbWVySUR9ICAgICAvLz0gJyc7CiAgICAgICAgJERCVGlja2V0e0N1c3RvbWVyVXNlcklEfSAvLz0gJyc7CgogICAgICAgIGlmICggKCAhJFRpY2tldHtDdXN0b21lcklEfSAmJiAkREJUaWNrZXR7Q3VzdG9tZXJJRH0gKSB8fCAoICEkVGlja2V0e0N1c3RvbWVyVXNlcklEfSAmJiAkREJUaWNrZXR7Q3VzdG9tZXJVc2VySUR9ICkgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVW5leHBlY3RlZCBzdGF0ZSBlbmNvdW50ZXJlZCBmb3IgZXhpc3RpbmcgVGlja2V0SUQgJFRpY2tldHtUaWNrZXRJRH0gKEVudGl0eSAkUGFyYW17Q291bnRlcn0pOiAiCiAgICAgICAgICAgICAgICAgICAgLiAiVGlja2V0IGN1c3RvbWVyIGNhbiBub3QgYmUgZW1wdGllZCAtIG5vdCBhIHJlYWwgY2hyb25vbG9naWNhbCB1cGRhdGU7IGlnbm9yaW5nIHRoaXMsIGFuZCBrZWVwaW5nIEN1c3RvbWVyKFVzZXIpSUQuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHsKICAgICAgICAgICAgbXkgJFVwZGF0ZSA9ICRUaWNrZXR7Q3VzdG9tZXJJRH0gJiYgJFRpY2tldHtDdXN0b21lcklEfSBuZSAkREJUaWNrZXR7Q3VzdG9tZXJJRH0gPyAxIDoKICAgICAgICAgICAgICAgICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9ICYmICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9IG5lICREQlRpY2tldHtDdXN0b21lclVzZXJJRH0gPyAxIDogMDsKCiAgICAgICAgICAgIGlmICgkVXBkYXRlKSB7CiAgICAgICAgICAgICAgICAkU3RhdHVzID0gJ1VwZGF0ZWQnOwogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDdXN0b21lclNldCgKICAgICAgICAgICAgICAgICAgICBObyAgICAgICA9PiAkVGlja2V0e0N1c3RvbWVySUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXIgICAgID0+ICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCB1cGRhdGUgQ3VzdG9tZXIoVXNlcikgZm9yIFRpY2tldElEICREQlRpY2tldHtUaWNrZXRJRH0iLAogICAgICAgICAgICAgICAgKSB1bmxlc3MgJFN1Y2Nlc3M7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgdGl0bGUKICAgICAgICAkVGlja2V0e1RpdGxlfSB8fD0KICAgICAgICAgICAgJFRpY2tldHtUaXRsZX0gZXEgJzAnICAgICAgID8gJzAnIDoKICAgICAgICAgICAgJFNraXBFbXB0eSAgICAgICAgICAgICAgICAgID8gJERCVGlja2V0e1RpdGxlfSA6CiAgICAgICAgICAgICRQYXJhbXtPYmplY3REYXRhfXtTdWJqZWN0fSA/ICRQYXJhbXtPYmplY3REYXRhfXtTdWJqZWN0fSA6ICcnOwoKICAgICAgICBpZiAoICRUaWNrZXR7VGl0bGV9IG5lICREQlRpY2tldHtUaXRsZX0gKSB7CiAgICAgICAgICAgICRTdGF0dXMgPSAnVXBkYXRlZCc7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0VGl0bGVVcGRhdGUoCiAgICAgICAgICAgICAgICBUaXRsZSAgICA9PiAkVGlja2V0e1RpdGxlfSwKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgdXBkYXRlIFRpdGxlIGZvciBUaWNrZXRJRCAkREJUaWNrZXR7VGlja2V0SUR9IiwKICAgICAgICAgICAgKSB1bmxlc3MgJFN1Y2Nlc3M7CiAgICAgICAgfQoKICAgICAgICAjIHF1ZXVlCiAgICAgICAgaWYgKCAhJFRpY2tldHtRdWV1ZUlEfSAmJiAkVGlja2V0e1F1ZXVlfSApIHsKICAgICAgICAgICAgJFRpY2tldHtRdWV1ZUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZUxvb2t1cCgKICAgICAgICAgICAgICAgIFF1ZXVlID0+ICRUaWNrZXR7UXVldWV9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkVGlja2V0e1F1ZXVlSUR9IHx8PSAkU2tpcEVtcHR5ID8gJERCVGlja2V0e1F1ZXVlSUR9IDogJFBhcmFte09iamVjdERhdGF9e1F1ZXVlSUR9OwoKICAgICAgICBpZiAoICRUaWNrZXR7UXVldWVJRH0gbmUgJERCVGlja2V0e1F1ZXVlSUR9ICkgewogICAgICAgICAgICAkU3RhdHVzID0gJ1VwZGF0ZWQnOwogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFF1ZXVlU2V0KAogICAgICAgICAgICAgICAgUXVldWVJRCAgPT4gJFRpY2tldHtRdWV1ZUlEfSwKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgdXBkYXRlIFF1ZXVlIGZvciBUaWNrZXRJRCAkREJUaWNrZXR7VGlja2V0SUR9IiwKICAgICAgICAgICAgKSB1bmxlc3MgJFN1Y2Nlc3M7CiAgICAgICAgfQoKICAgICAgICAjIHR5cGUKICAgICAgICBpZiAoICEkVGlja2V0e1R5cGVJRH0gJiYgJFRpY2tldHtUeXBlfSApIHsKICAgICAgICAgICAgJFRpY2tldHtUeXBlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKS0+VHlwZUxvb2t1cCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJFRpY2tldHtUeXBlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJFRpY2tldHtUeXBlSUR9IHx8PSAkU2tpcEVtcHR5ID8gJERCVGlja2V0e1R5cGVJRH0gOiAkUGFyYW17T2JqZWN0RGF0YX17VHlwZUlEfTsKCiAgICAgICAgaWYgKCAkVGlja2V0e1R5cGVJRH0gbmUgJERCVGlja2V0e1R5cGVJRH0gKSB7CiAgICAgICAgICAgICRTdGF0dXMgPSAnVXBkYXRlZCc7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0VHlwZVNldCgKICAgICAgICAgICAgICAgIFR5cGVJRCAgID0+ICRUaWNrZXR7VHlwZUlEfSwKICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgdXBkYXRlIFR5cGUgZm9yIFRpY2tldElEICREQlRpY2tldHtUaWNrZXRJRH0iLAogICAgICAgICAgICApIGlmICEkU3VjY2VzczsKICAgICAgICB9CgogICAgICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpY2tldDo6U2VydmljZScpICkgewoKICAgICAgICAgICAgIyBzZXJ2aWNlCiAgICAgICAgICAgIGlmICggISRUaWNrZXR7U2VydmljZUlEfSAmJiAkVGlja2V0e1NlcnZpY2V9ICkgewogICAgICAgICAgICAgICAgJFRpY2tldHtTZXJ2aWNlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICRUaWNrZXR7U2VydmljZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRUaWNrZXR7U2VydmljZUlEfSB8fD0gJFNraXBFbXB0eSA/ICREQlRpY2tldHtTZXJ2aWNlSUR9IDogJFBhcmFte09iamVjdERhdGF9e1NlcnZpY2VJRH07CiAgICAgICAgICAgICREQlRpY2tldHtTZXJ2aWNlSUR9IC8vPSAnJzsKCiAgICAgICAgICAgIGlmICggISRUaWNrZXR7U2VydmljZUlEfSAmJiAkREJUaWNrZXR7U2VydmljZUlEfSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJVbmV4cGVjdGVkIHN0YXRlIGVuY291bnRlcmVkIGZvciBleGlzdGluZyBUaWNrZXRJRCAkVGlja2V0e1RpY2tldElEfSAoRW50aXR5ICRQYXJhbXtDb3VudGVyfSk6ICIKICAgICAgICAgICAgICAgICAgICAgICAgLiAiU2VydmljZXMgY2FuIG5vdCBiZSBlbXB0aWVkIC0gbm90IGEgcmVhbCBjaHJvbm9sb2dpY2FsIHVwZGF0ZTsgaWdub3JpbmcgdGhpcywgYW5kIGtlZXBpbmcgdGhlIFNlcnZpY2UuIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJFRpY2tldHtTZXJ2aWNlSUR9ICYmICRUaWNrZXR7U2VydmljZUlEfSBuZSAkREJUaWNrZXR7U2VydmljZUlEfSApIHsKICAgICAgICAgICAgICAgICRTdGF0dXMgPSAnVXBkYXRlZCc7CiAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNlcnZpY2VTZXQoCiAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRUaWNrZXR7U2VydmljZUlEfSwKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCAgPT4gJERCVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCB1cGRhdGUgU2VydmljZSBmb3IgVGlja2V0SUQgJERCVGlja2V0e1RpY2tldElEfSIsCiAgICAgICAgICAgICAgICApIHVubGVzcyAkU3VjY2VzczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBTTEEKICAgICAgICAgICAgaWYgKCAhJFRpY2tldHtTTEFJRH0gJiYgJFRpY2tldHtTTEF9ICkgewogICAgICAgICAgICAgICAgJFRpY2tldHtTTEFJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBTTEEgPT4gJFRpY2tldHtTTEF9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkVGlja2V0e1NMQUlEfSB8fD0gJFNraXBFbXB0eSA/ICREQlRpY2tldHtTTEFJRH0gOiAkUGFyYW17T2JqZWN0RGF0YX17U0xBSUR9OwogICAgICAgICAgICAkREJUaWNrZXR7U0xBSUR9IC8vPSAnJzsKCiAgICAgICAgICAgIGlmICggISRUaWNrZXR7U0xBSUR9ICYmICREQlRpY2tldHtTTEFJRH0gKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVW5leHBlY3RlZCBzdGF0ZSBlbmNvdW50ZXJlZCBmb3IgZXhpc3RpbmcgVGlja2V0SUQgJFRpY2tldHtUaWNrZXRJRH0gKEVudGl0eSAkUGFyYW17Q291bnRlcn0pOiAiCiAgICAgICAgICAgICAgICAgICAgICAgIC4gIlNMQXMgY2FuIG5vdCBiZSBlbXB0aWVkIC0gbm90IGEgcmVhbCBjaHJvbm9sb2dpY2FsIHVwZGF0ZTsgaWdub3JpbmcgdGhpcywgYW5kIGtlZXBpbmcgdGhlIFNMQS4iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkVGlja2V0e1NMQUlEfSAmJiAkVGlja2V0e1NMQUlEfSBuZSAkREJUaWNrZXR7U0xBSUR9ICkgewogICAgICAgICAgICAgICAgJFN0YXR1cyA9ICdVcGRhdGVkJzsKICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U0xBU2V0KAogICAgICAgICAgICAgICAgICAgIFNMQUlEICAgID0+ICRUaWNrZXR7U0xBSUR9LAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCB1cGRhdGUgU0xBIGZvciBUaWNrZXRJRCAkREJUaWNrZXR7VGlja2V0SUR9IiwKICAgICAgICAgICAgICAgICkgdW5sZXNzICRTdWNjZXNzOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG93bmVyCiAgICAgICAgaWYgKCAhJFRpY2tldHtPd25lcklEfSAmJiAkVGlja2V0e093bmVyfSApIHsKICAgICAgICAgICAgJFRpY2tldHtPd25lcklEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRpY2tldHtPd25lcn0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRUaWNrZXR7T3duZXJJRH0gfHw9ICRTa2lwRW1wdHkgPyAkREJUaWNrZXR7T3duZXJJRH0gOiAkUGFyYW17T2JqZWN0RGF0YX17T3duZXJJRH07CgogICAgICAgIGlmICggISRUaWNrZXR7T3duZXJJRH0gJiYgJERCVGlja2V0e093bmVySUR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlVuZXhwZWN0ZWQgc3RhdGUgZW5jb3VudGVyZWQgZm9yIGV4aXN0aW5nIFRpY2tldElEICRUaWNrZXR7VGlja2V0SUR9IChFbnRpdHkgJFBhcmFte0NvdW50ZXJ9KTogIgogICAgICAgICAgICAgICAgICAgIC4gIk93bmVycyBjYW4gbm90IGJlIGVtcHRpZWQgLSBub3QgYSByZWFsIGNocm9ub2xvZ2ljYWwgdXBkYXRlOyBpZ25vcmluZyB0aGlzLCBhbmQga2VlcGluZyB0aGUgT3duZXIuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICggJFRpY2tldHtPd25lcklEfSAmJiAkVGlja2V0e093bmVySUR9IG5lICREQlRpY2tldHtPd25lcklEfSApIHsKICAgICAgICAgICAgJFN0YXR1cyA9ICdVcGRhdGVkJzsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRPd25lclNldCgKICAgICAgICAgICAgICAgIE5ld1VzZXJJRCA9PiAkVGlja2V0e093bmVySUR9LAogICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHVwZGF0ZSBPd25lciBmb3IgVGlja2V0SUQgJERCVGlja2V0e1RpY2tldElEfSIsCiAgICAgICAgICAgICkgdW5sZXNzICRTdWNjZXNzOwogICAgICAgIH0KCiAgICAgICAgIyBsb2NrCiAgICAgICAgaWYgKCAhJFRpY2tldHtMb2NrSUR9ICYmICRUaWNrZXR7TG9ja30gKSB7CiAgICAgICAgICAgICRUaWNrZXR7TG9ja0lEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2NrJyktPkxvY2tMb29rdXAoCiAgICAgICAgICAgICAgICBMb2NrID0+ICRUaWNrZXR7TG9ja30sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRUaWNrZXR7TG9ja0lEfSB8fD0gJFNraXBFbXB0eSA/ICREQlRpY2tldHtMb2NrSUR9IDogJFBhcmFte09iamVjdERhdGF9e0xvY2tJRH07CgogICAgICAgICMgY2hlY2sgd2hldGhlciBhbiBvd25lciBleGlzdHMgaGVyZSAtIGlmIG5vdCB0cnlpbmcgdG8gbG9jayB3aWxsIGZhaWwKICAgICAgICBpZiAoICRUaWNrZXR7T3duZXJJRH0gJiYgJFRpY2tldHtMb2NrSUR9IG5lICREQlRpY2tldHtMb2NrSUR9ICkgewogICAgICAgICAgICAkU3RhdHVzID0gJ1VwZGF0ZWQnOwogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldExvY2tTZXQoCiAgICAgICAgICAgICAgICBMb2NrSUQgICA9PiAkVGlja2V0e0xvY2tJRH0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHVwZGF0ZSBMb2NrIGZvciBUaWNrZXRJRCAkREJUaWNrZXR7VGlja2V0SUR9IiwKICAgICAgICAgICAgKSB1bmxlc3MgJFN1Y2Nlc3M7CiAgICAgICAgfQoKICAgICAgICAjIHJlc3BvbnNpYmxlCiAgICAgICAgaWYgKCAhJFRpY2tldHtSZXNwb25zaWJsZUlEfSAmJiAkVGlja2V0e1Jlc3BvbnNpYmxlfSApIHsKICAgICAgICAgICAgJFRpY2tldHtSZXNwb25zaWJsZUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRpY2tldHtSZXNwb25zaWJsZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRUaWNrZXR7UmVzcG9uc2libGVJRH0gfHw9ICRTa2lwRW1wdHkgPyAkREJUaWNrZXR7UmVzcG9uc2libGVJRH0gOiAkUGFyYW17T2JqZWN0RGF0YX17UmVzcG9uc2libGVJRH07CgogICAgICAgIGlmICggISRUaWNrZXR7UmVzcG9uc2libGVJRH0gJiYgJERCVGlja2V0e1Jlc3BvbnNpYmxlSUR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlVuZXhwZWN0ZWQgc3RhdGUgZW5jb3VudGVyZWQgZm9yIGV4aXN0aW5nIFRpY2tldElEICRUaWNrZXR7VGlja2V0SUR9IChFbnRpdHkgJFBhcmFte0NvdW50ZXJ9KTogIgogICAgICAgICAgICAgICAgICAgIC4gIlJlc3BvbnNpYmxlcyBjYW4gbm90IGJlIGVtcHRpZWQgLSBub3QgYSByZWFsIGNocm9ub2xvZ2ljYWwgdXBkYXRlOyBpZ25vcmluZyB0aGlzLCBhbmQga2VlcGluZyB0aGUgUmVzcG9uc2libGUuIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmICggJFRpY2tldHtSZXNwb25zaWJsZUlEfSAmJiAkVGlja2V0e1Jlc3BvbnNpYmxlSUR9IG5lICREQlRpY2tldHtSZXNwb25zaWJsZUlEfSApIHsKICAgICAgICAgICAgJFN0YXR1cyA9ICdVcGRhdGVkJzsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRSZXNwb25zaWJsZVNldCgKICAgICAgICAgICAgICAgIE5ld1VzZXJJRCA9PiAkVGlja2V0e1Jlc3BvbnNpYmxlSUR9LAogICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHVwZGF0ZSBSZXNwb25zaWJsZSBmb3IgVGlja2V0SUQgJERCVGlja2V0e1RpY2tldElEfSIsCiAgICAgICAgICAgICkgdW5sZXNzICRTdWNjZXNzOwogICAgICAgIH0KCiAgICAgICAgIyBwcmlvcml0eQogICAgICAgIGlmICggISRUaWNrZXR7UHJpb3JpdHlJRH0gJiYgJFRpY2tldHtQcmlvcml0eX0gKSB7CiAgICAgICAgICAgICRUaWNrZXR7UHJpb3JpdHlJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKS0+UHJpb3JpdHlMb29rdXAoCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAkVGlja2V0e1ByaW9yaXR5fSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJFRpY2tldHtQcmlvcml0eUlEfSB8fD0gJFNraXBFbXB0eSA/ICREQlRpY2tldHtQcmlvcml0eUlEfSA6ICRQYXJhbXtPYmplY3REYXRhfXtQcmlvcml0eUlEfTsKCiAgICAgICAgaWYgKCAkVGlja2V0e1ByaW9yaXR5SUR9IG5lICREQlRpY2tldHtQcmlvcml0eUlEfSApIHsKICAgICAgICAgICAgJFN0YXR1cyA9ICdVcGRhdGVkJzsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRQcmlvcml0eVNldCgKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgPT4gJFRpY2tldHtQcmlvcml0eUlEfSwKICAgICAgICAgICAgICAgIFRpY2tldElEICAgPT4gJERCVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHVwZGF0ZSBQcmlvcml0eSBmb3IgVGlja2V0SUQgJERCVGlja2V0e1RpY2tldElEfSIsCiAgICAgICAgICAgICkgdW5sZXNzICRTdWNjZXNzOwogICAgICAgIH0KCiAgICAgICAgIyBzdGF0ZQogICAgICAgIGlmICggISRUaWNrZXR7U3RhdGVJRH0gJiYgJFRpY2tldHtTdGF0ZX0gKSB7CiAgICAgICAgICAgICRUaWNrZXR7U3RhdGVJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3RhdGUnKS0+U3RhdGVMb29rdXAoCiAgICAgICAgICAgICAgICBTdGF0ZSA9PiAkVGlja2V0e1N0YXRlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJFRpY2tldHtTdGF0ZUlEfSB8fD0gJFNraXBFbXB0eSA/ICREQlRpY2tldHtTdGF0ZUlEfSA6ICRQYXJhbXtPYmplY3REYXRhfXtTdGF0ZUlEfTsKCiAgICAgICAgaWYgKCAkVGlja2V0e1N0YXRlSUR9IG5lICREQlRpY2tldHtTdGF0ZUlEfSApIHsKICAgICAgICAgICAgJFN0YXR1cyA9ICdVcGRhdGVkJzsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTdGF0ZVNldCgKICAgICAgICAgICAgICAgIFN0YXRlSUQgID0+ICRUaWNrZXR7U3RhdGVJRH0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHVwZGF0ZSBTdGF0ZSBmb3IgVGlja2V0SUQgJERCVGlja2V0e1RpY2tldElEfSIsCiAgICAgICAgICAgICkgdW5sZXNzICRTdWNjZXNzOwogICAgICAgIH0KCiAgICAgICAgIyBhcmNoaXZlIGZsYWcKICAgICAgICAkVGlja2V0e0FyY2hpdmVGbGFnfSB8fD0gJFNraXBFbXB0eSA/ICREQlRpY2tldHtBcmNoaXZlRmxhZ30gOiAkUGFyYW17T2JqZWN0RGF0YX17QXJjaGl2ZUZsYWd9OwoKICAgICAgICBpZiAoICRUaWNrZXR7QXJjaGl2ZUZsYWd9IG5lICREQlRpY2tldHtBcmNoaXZlRmxhZ30gKSB7CiAgICAgICAgICAgICRTdGF0dXMgPSAnVXBkYXRlZCc7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0QXJjaGl2ZUZsYWdTZXQoCiAgICAgICAgICAgICAgICBBcmNoaXZlRmxhZyA9PiAkVGlja2V0e0FyY2hpdmVGbGFnfSwKICAgICAgICAgICAgICAgIFRpY2tldElEICAgID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgdXBkYXRlIEFyY2hpdmVGbGFnIGZvciBUaWNrZXRJRCAkREJUaWNrZXR7VGlja2V0SUR9IiwKICAgICAgICAgICAgKSB1bmxlc3MgJFN1Y2Nlc3M7CiAgICAgICAgfQogICAgfQoKICAgICMgQSBuZXcgdGlja2V0IHdpbGwgYmUgY3JlYXRlZC4gQ29sbGVjdCB0aGUgaW5wdXQgZm9yIFRpY2tldENyZWF0ZSBpbiAlREJUaWNrZXQuCiAgICBlbHNlIHsKICAgICAgICAkU3RhdHVzID0gJ0NyZWF0ZWQnOwoKICAgICAgICAjIGN1c3RvbWVyCiAgICAgICAgJERCVGlja2V0e0N1c3RvbWVySUR9ICAgPSAkVGlja2V0e0N1c3RvbWVySUR9ICAgICB8fCAkUGFyYW17T2JqZWN0RGF0YX17Q3VzdG9tZXJJRH07CiAgICAgICAgJERCVGlja2V0e0N1c3RvbWVyVXNlcn0gPSAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSB8fCAkUGFyYW17T2JqZWN0RGF0YX17Q3VzdG9tZXJVc2VySUR9OwoKICAgICAgICAjIHRpdGxlCiAgICAgICAgJERCVGlja2V0e1RpdGxlfSA9ICRUaWNrZXR7VGl0bGV9IHx8ICRUaWNrZXR7VGl0bGV9IGVxICcwJyA/ICRUaWNrZXR7VGl0bGV9IDogJFBhcmFte09iamVjdERhdGF9e1N1YmplY3R9OwoKICAgICAgICAjIHF1ZXVlCiAgICAgICAgaWYgKCAhJFRpY2tldHtRdWV1ZUlEfSAmJiAkVGlja2V0e1F1ZXVlfSApIHsKICAgICAgICAgICAgJFRpY2tldHtRdWV1ZUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpRdWV1ZScpLT5RdWV1ZUxvb2t1cCgKICAgICAgICAgICAgICAgIFF1ZXVlID0+ICRUaWNrZXR7UXVldWV9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkREJUaWNrZXR7UXVldWVJRH0gPSAkVGlja2V0e1F1ZXVlSUR9IHx8ICRQYXJhbXtPYmplY3REYXRhfXtRdWV1ZUlEfTsKCiAgICAgICAgIyB0eXBlCiAgICAgICAgaWYgKCAhJFRpY2tldHtUeXBlSUR9ICYmICRUaWNrZXR7VHlwZX0gKSB7CiAgICAgICAgICAgICRUaWNrZXR7VHlwZUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyktPlR5cGVMb29rdXAoCiAgICAgICAgICAgICAgICBUeXBlID0+ICRUaWNrZXR7VHlwZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICREQlRpY2tldHtUeXBlSUR9ID0gJFRpY2tldHtUeXBlSUR9IHx8ICRQYXJhbXtPYmplY3REYXRhfXtUeXBlSUR9OwoKICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSApIHsKCiAgICAgICAgICAgICMgc2VydmljZQogICAgICAgICAgICBpZiAoICEkVGlja2V0e1NlcnZpY2VJRH0gJiYgJFRpY2tldHtTZXJ2aWNlfSApIHsKICAgICAgICAgICAgICAgICRUaWNrZXR7U2VydmljZUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkVGlja2V0e1NlcnZpY2V9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkREJUaWNrZXR7U2VydmljZUlEfSA9ICRUaWNrZXR7U2VydmljZUlEfSB8fCAkUGFyYW17T2JqZWN0RGF0YX17U2VydmljZUlEfTsKCiAgICAgICAgICAgICMgc2xhCiAgICAgICAgICAgIGlmICggISRUaWNrZXR7U0xBSUR9ICYmICRUaWNrZXR7U0xBfSApIHsKICAgICAgICAgICAgICAgICRUaWNrZXR7U0xBSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpLT5TTEFMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgU0xBID0+ICRUaWNrZXR7U0xBfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJERCVGlja2V0e1NMQUlEfSA9ICRUaWNrZXR7U0xBSUR9IHx8ICRQYXJhbXtPYmplY3REYXRhfXtTTEFJRH07CiAgICAgICAgfQoKICAgICAgICAjIG93bmVyCiAgICAgICAgaWYgKCAhJFRpY2tldHtPd25lcklEfSAmJiAkVGlja2V0e093bmVyfSApIHsKICAgICAgICAgICAgJFRpY2tldHtPd25lcklEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMb29rdXAoCiAgICAgICAgICAgICAgICBVc2VyTG9naW4gPT4gJFRpY2tldHtPd25lcn0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICREQlRpY2tldHtPd25lcklEfSA9ICRUaWNrZXR7T3duZXJJRH0gfHwgJFBhcmFte09iamVjdERhdGF9e093bmVySUR9OwoKICAgICAgICAjIGxvY2sKICAgICAgICBpZiAoICEkVGlja2V0e0xvY2tJRH0gJiYgJFRpY2tldHtMb2NrfSApIHsKICAgICAgICAgICAgJFRpY2tldHtMb2NrSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvY2snKS0+TG9ja0xvb2t1cCgKICAgICAgICAgICAgICAgIExvY2sgPT4gJFRpY2tldHtMb2NrfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJERCVGlja2V0e0xvY2tJRH0gPSAkVGlja2V0e0xvY2tJRH0gfHwgJFBhcmFte09iamVjdERhdGF9e0xvY2tJRH07CgogICAgICAgICMgcmVzcG9uc2libGUKICAgICAgICBpZiAoICEkVGlja2V0e1Jlc3BvbnNpYmxlSUR9ICYmICRUaWNrZXR7UmVzcG9uc2libGV9ICkgewogICAgICAgICAgICAkVGlja2V0e1Jlc3BvbnNpYmxlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxvb2t1cCgKICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGlja2V0e1Jlc3BvbnNpYmxlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJERCVGlja2V0e1Jlc3BvbnNpYmxlSUR9ID0gJFRpY2tldHtSZXNwb25zaWJsZUlEfSB8fCAkUGFyYW17T2JqZWN0RGF0YX17UmVzcG9uc2libGVJRH07CgogICAgICAgICMgcHJpb3JpdHkKICAgICAgICBpZiAoICEkVGlja2V0e1ByaW9yaXR5SUR9ICYmICRUaWNrZXR7UHJpb3JpdHl9ICkgewogICAgICAgICAgICAkVGlja2V0e1ByaW9yaXR5SUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5JyktPlByaW9yaXR5TG9va3VwKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJFRpY2tldHtQcmlvcml0eX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICREQlRpY2tldHtQcmlvcml0eUlEfSA9ICRUaWNrZXR7UHJpb3JpdHlJRH0gfHwgJFBhcmFte09iamVjdERhdGF9e1ByaW9yaXR5SUR9OwoKICAgICAgICAjIHN0YXRlCiAgICAgICAgaWYgKCAhJFRpY2tldHtTdGF0ZUlEfSAmJiAkVGlja2V0e1N0YXRlfSApIHsKICAgICAgICAgICAgJFRpY2tldHtTdGF0ZUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpLT5TdGF0ZUxvb2t1cCgKICAgICAgICAgICAgICAgIFN0YXRlID0+ICRUaWNrZXR7U3RhdGV9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkREJUaWNrZXR7U3RhdGVJRH0gPSAkVGlja2V0e1N0YXRlSUR9IHx8ICRQYXJhbXtPYmplY3REYXRhfXtTdGF0ZUlEfTsKCiAgICAgICAgIyBhcmNoaXZlIGZsYWcKICAgICAgICAkREJUaWNrZXR7QXJjaGl2ZUZsYWd9ID0gJFRpY2tldHtBcmNoaXZlRmxhZ30gfHwgJFBhcmFte09iamVjdERhdGF9e0FyY2hpdmVGbGFnfTsKCiAgICAgICAgJERCVGlja2V0e1RpY2tldElEfSA9ICRUaWNrZXRPYmplY3QtPlRpY2tldENyZWF0ZSgKICAgICAgICAgICAgJURCVGlja2V0LAogICAgICAgICAgICBUTiAgICAgPT4gJFRpY2tldHtUaWNrZXROdW1iZXJ9IC8vICcnLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBNZXNzYWdlID0+ICdDb3VsZCBub3QgY3JlYXRlIG5ldyB0aWNrZXQnLAogICAgICAgICkgdW5sZXNzICREQlRpY2tldHtUaWNrZXRJRH07CgogICAgICAgICREQlRpY2tldHtUaWNrZXROdW1iZXJ9ID0gJFRpY2tldE9iamVjdC0+VGlja2V0TnVtYmVyTG9va3VwKAogICAgICAgICAgICBUaWNrZXRJRCA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICk7CgogICAgICAgIGlmICggJFRpY2tldHtDcmVhdGVkfSApIHsKICAgICAgICAgICAgJFNlbGYtPntEQk9iamVjdH0gLy89ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICAgICAgICAgcmV0dXJuIHVubGVzcyAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgID0+ICJVUERBVEUgdGlja2V0IFNFVCBjcmVhdGVfdGltZSA9ID8gV0hFUkUgaWQgPSA/IiwKICAgICAgICAgICAgICAgIEJpbmQgPT4gWyBcJFRpY2tldHtDcmVhdGVkfSwgXCREQlRpY2tldHtUaWNrZXRJRH0gXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICRTeW5jREJDb25maWcgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OlN5bmNocm9uaXplV2l0aEZvcmVpZ25EQicpOwogICAgICAgIGlmICgkU3luY0RCQ29uZmlnKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFNlbGYtPl9TeW5jaHJvbml6ZUV4dGVuZGVkREJFbnRyaWVzKAogICAgICAgICAgICAgICAgRm9yZWlnbkRCICAgICAgID0+ICRTeW5jREJDb25maWcsCiAgICAgICAgICAgICAgICBGb3JlaWduVGlja2V0SUQgPT4gJFRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICAgICAgPT4gJERCVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHN5bmNocm9uaXplIGV4dGVuZGVkIERCIGVudHJpZXMgZm9yIHRpY2tldCAkREJUaWNrZXR7VGlja2V0SUR9IiwKICAgICAgICAgICAgKSBpZiAhJFN1Y2Nlc3M7CiAgICAgICAgfQogICAgfQoKICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwogICAgbXkgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpCYWNrZW5kJyk7CiAgICBteSAlU3RhbmRhcmRNdWx0aVNlbGVjdCAgICAgICA9IG1hcCB7ICRfID0+IDEgfSBxdyggTXVsdGlzZWxlY3QgRGF0YWJhc2UgV2ViU2VydmljZSApOwoKICAgICMgZHluYW1pYyBmaWVsZHMKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkQXR0ciAoIGtleXMgJVRpY2tldCApIHsKCiAgICAgICAgIyBvbmx5IGhhbmRsZSBkeW5hbWljIGZpZWxkcwogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIHVubGVzcyAkQXR0ciA9fiBtL15EeW5hbWljRmllbGRfKC4rKSQvOwoKICAgICAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICBOYW1lID0+ICQxLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHRoZSBjdXJyZW50IHZhbHVlCiAgICAgICAgbXkgJERCVmFsdWUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJERCVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBtdWx0aSBzZWxlY3QgZmllbGRzIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQKICAgICAgICBpZiAoICRTdGFuZGFyZE11bHRpU2VsZWN0eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57RmllbGRUeXBlfSB9IHx8IHJlZiAkREJWYWx1ZSBlcSAnQVJSQVknICkgewogICAgICAgICAgICAkVGlja2V0eyRBdHRyfSA9ICRUaWNrZXR7JEF0dHJ9ID8gWyBtYXAgeyBkZWNvZGUoICdVVEYtOCcsIGRlY29kZV9iYXNlNjQoJF8pICkgfSBzcGxpdCggJyMjIycsICRUaWNrZXR7JEF0dHJ9ICkgXSA6IFtdOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgdW5sZXNzICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZUlzRGlmZmVyZW50KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgVmFsdWUxICAgICAgICAgICAgID0+ICRUaWNrZXR7JEF0dHJ9LAogICAgICAgICAgICBWYWx1ZTIgICAgICAgICAgICAgPT4gJERCVmFsdWUsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkU3RhdHVzIGVxICdTa2lwcGVkJyApIHsKICAgICAgICAgICAgJFN0YXR1cyA9ICdVcGRhdGVkJzsKICAgICAgICB9CgogICAgICAgIG15ICRTdWNjZXNzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkZpZWxkVmFsdWVWYWxpZGF0ZSgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVGlja2V0eyRBdHRyfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRTdWNjZXNzKSB7CgogICAgICAgICAgICAjIHNldCB0aGUgdmFsdWUKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRUaWNrZXR7JEF0dHJ9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgdXBkYXRlICRBdHRyIHRvICckVGlja2V0eyRBdHRyfScgZm9yIFRpY2tldElEICREQlRpY2tldHtUaWNrZXRJRH0iLAogICAgICAgICkgdW5sZXNzICRTdWNjZXNzOwogICAgfQoKICAgIGlmICggJFBhcmFte0lkZW50aWZpZXJ9e1RpY2tldElEfSB8fCAkUGFyYW17T2JqZWN0RGF0YX17SW5jbHVkZUFydGljbGVzfSApIHsKICAgICAgICAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259eyAkVGlja2V0e1RpY2tldElEfSB9ID0gJERCVGlja2V0e1RpY2tldElEfTsKICAgIH0KICAgIGlmICggJFBhcmFte0lkZW50aWZpZXJ9e1RpY2tldE51bWJlcn0gKSB7CiAgICAgICAgJFNlbGYtPntUaWNrZXROdW1iZXJJRFJlbGF0aW9ufXsgJFRpY2tldHtUaWNrZXROdW1iZXJ9IH0gPSAkREJUaWNrZXR7VGlja2V0SUR9OwogICAgfQoKICAgICMgcmVtZW1iZXIgdGhlIHRpY2tldCBJRCBzbyB0aGF0IGFydGljbGVzIGNhbiBiZSBhdHRhY2hlZCB0byBpdAogICAgJFNlbGYtPntMYXN0VGlja2V0SUR9ID0gJERCVGlja2V0e1RpY2tldElEfTsKCiAgICByZXR1cm4gJFN0YXR1czsKfQoKc3ViIF9JbXBvcnRBcnRpY2xlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJUFydGljbGUgPSAkUGFyYW17QXJ0aWNsZX0tPiUqOwoKICAgIG15ICRUaWNrZXRJRCA9CiAgICAgICAgJEFydGljbGV7VGlja2V0SUR9ICYmICRTZWxmLT57VGlja2V0SURSZWxhdGlvbn17ICRBcnRpY2xle1RpY2tldElEfSB9ID8gJFNlbGYtPntUaWNrZXRJRFJlbGF0aW9ufXsgJEFydGljbGV7VGlja2V0SUR9IH0gOgogICAgICAgICRTZWxmLT57TGFzdFRpY2tldElEfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICRTZWxmLT57TGFzdFRpY2tldElEfSA6ICcnOwoKICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICVQYXJhbSwKICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgZmluZCBuZXcgVGlja2V0SUQgZm9yIEFydGljbGUiLAogICAgKSB1bmxlc3MgJFRpY2tldElEOwoKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgIGlmICggJFBhcmFte0lkZW50aWZpZXJ9ICYmICRQYXJhbXtJZGVudGlmaWVyfXtBcnRpY2xlSUR9ICYmICRBcnRpY2xle0FydGljbGVJRH0gKSB7CiAgICAgICAgbXkgQERCQXJ0aWNsZXMgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICk7CgogICAgICAgIHJldHVybiAnU2tpcHBlZCcgaWYgQERCQXJ0aWNsZXM7CiAgICB9CgogICAgbXkgJVZhbGlkSW1wb3J0Q2hhbm5lbCA9IG1hcCB7ICRfID0+IDEgfSBxdyggRW1haWwgSW50ZXJuYWwgUGhvbmUgKTsKICAgIG15ICRDaGFubmVsTmFtZSAgICAgICAgPSAkQXJ0aWNsZXtBcnRpY2xlQmFja2VuZH0gfHwgJFBhcmFte09iamVjdERhdGF9e0FydGljbGVCYWNrZW5kfTsKCiAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAlUGFyYW0sCiAgICAgICAgTWVzc2FnZSA9PiAiJyRDaGFubmVsTmFtZScgaXMgKGN1cnJlbnRseSkgbm90IGEgc3VwcG9ydGVkIEFydGljbGVCYWNrZW5kIiwKICAgICkgdW5sZXNzICRWYWxpZEltcG9ydENoYW5uZWx7JENoYW5uZWxOYW1lfTsKCiAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckNoYW5uZWwoIENoYW5uZWxOYW1lID0+ICRDaGFubmVsTmFtZSApOwoKICAgIGlmICggJENoYW5uZWxOYW1lIGVxICdFbWFpbCcgJiYgISRBcnRpY2xle01lc3NhZ2VJRH0gKSB7CiAgICAgICAgbXkgJFRpbWUgICA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5Ub0Vwb2NoKCk7CiAgICAgICAgbXkgJFJhbmRvbSA9IHJhbmQgOTk5OTk5OwogICAgICAgIG15ICRGUUROICAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRlFETicpOwogICAgICAgICRBcnRpY2xle01lc3NhZ2VJRH0gPSAiPCRUaW1lLiRSYW5kb21cQCRGUUROPiI7CiAgICB9CgogICAgbXkgJEhpc3RvcnlDb21tZW50ID0gJyUlSW1wb3J0ZWQgQXJ0aWNsZSc7CiAgICBpZiAoICRBcnRpY2xle1RpY2tldElEfSB8fCAkQXJ0aWNsZXtBcnRpY2xlSUR9ICkgewogICAgICAgICRIaXN0b3J5Q29tbWVudCAuPSAnIC0gTGVnYWN5JzsKICAgICAgICAkSGlzdG9yeUNvbW1lbnQgLj0gJEFydGljbGV7VGlja2V0SUR9ICA/ICIgVElEOiAkQXJ0aWNsZXtUaWNrZXRJRH07IiAgOiAnJzsKICAgICAgICAkSGlzdG9yeUNvbW1lbnQgLj0gJEFydGljbGV7QXJ0aWNsZUlEfSA/ICIgQUlEOiAkQXJ0aWNsZXtBcnRpY2xlSUR9OyIgOiAnJzsKICAgIH0KCiAgICBteSAkQXJ0aWNsZUlEID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQ3JlYXRlKAogICAgICAgIE5vQWdlbnROb3RpZnkgICAgICAgID0+IDEsCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgID0+ICRBcnRpY2xle1NlbmRlclR5cGV9IHx8ICRQYXJhbXtPYmplY3REYXRhfXtTZW5kZXJUeXBlfSwKICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiBkZWZpbmVkICRBcnRpY2xle0lzVmlzaWJsZUZvckN1c3RvbWVyfQogICAgICAgICAgICAmJiAkQXJ0aWNsZXtJc1Zpc2libGVGb3JDdXN0b21lcn0gbmUgJycgPyAkQXJ0aWNsZXtJc1Zpc2libGVGb3JDdXN0b21lcn0gOiAkUGFyYW17T2JqZWN0RGF0YX17SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9IC8vIDAsCiAgICAgICAgRnJvbSAgICAgICAgICAgPT4gJEFydGljbGV7RnJvbX0sCiAgICAgICAgVG8gICAgICAgICAgICAgPT4gJEFydGljbGV7VG99LAogICAgICAgIENjICAgICAgICAgICAgID0+ICRBcnRpY2xle0NjfSwKICAgICAgICBCY2MgICAgICAgICAgICA9PiAkQXJ0aWNsZXtCY2N9LAogICAgICAgIFJlcGx5VG8gICAgICAgID0+ICRBcnRpY2xle1JlcGx5VG99LAogICAgICAgIEluUmVwbHlUbyAgICAgID0+ICRBcnRpY2xle0luUmVwbHlUb30sCiAgICAgICAgUmVmZXJlbmNlcyAgICAgPT4gJEFydGljbGV7UmVmZXJlbmNlc30sCiAgICAgICAgU3ViamVjdCAgICAgICAgPT4gJEFydGljbGV7U3ViamVjdH0gIHx8ICRQYXJhbXtPYmplY3REYXRhfXtTdWJqZWN0fSwKICAgICAgICBCb2R5ICAgICAgICAgICA9PiAkQXJ0aWNsZXtCb2R5fSAgICAgfHwgJFBhcmFte09iamVjdERhdGF9e0JvZHl9LAogICAgICAgIENoYXJzZXQgICAgICAgID0+ICRBcnRpY2xle0NoYXJzZXR9ICB8fCAndXRmLTgnLAogICAgICAgIE1pbWVUeXBlICAgICAgID0+ICRBcnRpY2xle01pbWVUeXBlfSB8fCAndGV4dC9wbGFpbicsCiAgICAgICAgSGlzdG9yeVR5cGUgICAgPT4gJ01pc2MnLAogICAgICAgIEhpc3RvcnlDb21tZW50ID0+ICRIaXN0b3J5Q29tbWVudCwKICAgICAgICBNZXNzYWdlSUQgICAgICA9PiAkQXJ0aWNsZXtNZXNzYWdlSUR9LAogICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICApOwoKICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICVQYXJhbSwKICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgY3JlYXRlIHRoZSBhcnRpY2xlIiwKICAgICkgdW5sZXNzICRBcnRpY2xlSUQ7CgogICAgaWYgKCAkQXJ0aWNsZXtDcmVhdGVUaW1lfSApIHsKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fSAvLz0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgICAgIHJldHVybiB1bmxlc3MgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICBTUUwgID0+ICJVUERBVEUgYXJ0aWNsZSBTRVQgY3JlYXRlX3RpbWUgPSA/IFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJEFydGljbGV7Q3JlYXRlVGltZX0sIFwkQXJ0aWNsZUlEIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICBteSAkU3luY0RCQ29uZmlnID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ltcG9ydEV4cG9ydDo6VGlja2V0OjpTeW5jaHJvbml6ZVdpdGhGb3JlaWduREInKTsKICAgIGlmICgkU3luY0RCQ29uZmlnKSB7CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+X1N5bmNocm9uaXplRXh0ZW5kZWREQkVudHJpZXMoCiAgICAgICAgICAgIEZvcmVpZ25EQiAgICAgICAgPT4gJFN5bmNEQkNvbmZpZywKICAgICAgICAgICAgRm9yZWlnbkFydGljbGVJRCA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICAgICBBcnRpY2xlSUQgICAgICAgID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgIFRpY2tldElEICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBleHRlbmRlZCBEQiBlbnRyaWVzIGZvciB0aWNrZXQgJEFydGljbGVJRCIsCiAgICAgICAgKSBpZiAhJFN1Y2Nlc3M7CiAgICB9CgogICAgIyBhdHRhY2htZW50cwogICAgaWYgKCAkUGFyYW17T2JqZWN0RGF0YX17SW5jbHVkZUF0dGFjaG1lbnRzfSAmJiAkQXJ0aWNsZXtBdHRhY2htZW50c30gKSB7CiAgICAgICAgZm9yIG15ICRBdHRhY2htZW50U3RyaW5nICggJEFydGljbGV7QXR0YWNobWVudHN9LT5AKiApIHsKICAgICAgICAgICAgbXkgJUF0dGFjaG1lbnQgPSBzcGxpdCggJyMjIycsICRBdHRhY2htZW50U3RyaW5nLCAtMSApOwoKICAgICAgICAgICAgZm9yIG15ICRLZXkgKCBrZXlzICVBdHRhY2htZW50ICkgewogICAgICAgICAgICAgICAgJEF0dGFjaG1lbnR7JEtleX0gPSAkQXR0YWNobWVudHskS2V5fSBlcSAnJyA/ICcnIDogZGVjb2RlX2Jhc2U2NCggJEF0dGFjaG1lbnR7JEtleX0gKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgS0VZOgogICAgICAgICAgICBmb3IgbXkgJEtleSAocXcoIEZpbGVuYW1lIENvbnRlbnRUeXBlIERpc3Bvc2l0aW9uICkpIHsKICAgICAgICAgICAgICAgIG5leHQgS0VZIHVubGVzcyAkQXR0YWNobWVudHskS2V5fTsKCiAgICAgICAgICAgICAgICAkQXR0YWNobWVudHskS2V5fSA9IEVuY29kZTo6ZGVjb2RlKCAnVVRGLTgnLCAkQXR0YWNobWVudHskS2V5fSApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZVdyaXRlQXR0YWNobWVudCgKICAgICAgICAgICAgICAgICVBdHRhY2htZW50LAogICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiRXJyb3Igd2l0aCBpbXBvcnRpbmcgYW4gYXR0YWNobWVudCBmb3IgYXJ0aWNsZSAkQXJ0aWNsZUlEIiwKICAgICAgICAgICAgKSB1bmxlc3MgJFN1Y2Nlc3M7CiAgICAgICAgfQogICAgfQoKICAgICMgcGxhaW4gZW1haWwKICAgIGlmICggJEFydGljbGV7UGxhaW5FbWFpbH0gKSB7CiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVXcml0ZVBsYWluKAogICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgRW1haWwgICAgID0+ICRBcnRpY2xle1BsYWluRW1haWx9LAogICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBNZXNzYWdlID0+ICJFcnJvciB3aXRoIGltcG9ydGluZyB0aGUgcGxhaW4gZW1haWwgZm9yIGFydGljbGUgJEFydGljbGVJRCIsCiAgICAgICAgKSB1bmxlc3MgJFN1Y2Nlc3M7CiAgICB9CgogICAgbXkgJER5bmFtaWNGaWVsZE9iamVjdCAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CiAgICBteSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnKTsKICAgIG15ICVTdGFuZGFyZE11bHRpU2VsZWN0ICAgICAgID0gbWFwIHsgJF8gPT4gMSB9IHF3KCBNdWx0aXNlbGVjdCBEYXRhYmFzZSBXZWJTZXJ2aWNlICk7CgogICAgIyBkeW5hbWljIGZpZWxkcwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICRBdHRyICgga2V5cyAlQXJ0aWNsZSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAkQXR0ciAhfiAvXkR5bmFtaWNGaWVsZF8oLispJC87CgogICAgICAgIG15ICREeW5hbWljRmllbGRDb25maWcgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgIE5hbWUgPT4gJDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgdGhlIGN1cnJlbnQgdmFsdWUKICAgICAgICBteSAkREJWYWx1ZSA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZUdldCgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIG11bHRpIHNlbGVjdCBmaWVsZHMgbmVlZCBzcGVjaWFsIHRyZWF0bWVudAogICAgICAgIGlmICggJFN0YW5kYXJkTXVsdGlTZWxlY3R7ICREeW5hbWljRmllbGRDb25maWctPntGaWVsZFR5cGV9IH0gfHwgcmVmICREQlZhbHVlIGVxICdBUlJBWScgKSB7CiAgICAgICAgICAgICRBcnRpY2xleyRBdHRyfSA9ICRBcnRpY2xleyRBdHRyfSA/IFsgbWFwIHsgZGVjb2RlKCAnVVRGLTgnLCBkZWNvZGVfYmFzZTY0KCRfKSApIH0gc3BsaXQoICcjIyMnLCAkQXJ0aWNsZXskQXR0cn0gKSBdIDogW107CiAgICAgICAgfQoKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCB1bmxlc3MgJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlSXNEaWZmZXJlbnQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZTEgICAgICAgICAgICAgPT4gJEFydGljbGV7JEF0dHJ9LAogICAgICAgICAgICBWYWx1ZTIgICAgICAgICAgICAgPT4gJERCVmFsdWUsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+RmllbGRWYWx1ZVZhbGlkYXRlKAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRBcnRpY2xleyRBdHRyfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRTdWNjZXNzKSB7CgogICAgICAgICAgICAjIHNldCB0aGUgdmFsdWUKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRBcnRpY2xleyRBdHRyfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHVwZGF0ZSAkQXR0ciBmb3IgQXJ0aWNsZUlEICRBcnRpY2xlSUQiLAogICAgICAgICkgdW5sZXNzICRTdWNjZXNzOwogICAgfQoKICAgIHJldHVybiAnQ3JlYXRlZCc7Cn0KCnN1YiBfSW1wb3J0RXJyb3IgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkU2VsZi0+e0Vycm9yfSA9ICRQYXJhbXtNZXNzYWdlfSB8fCAnJzsKCiAgICBpZiAoIGV4aXN0cyAkUGFyYW17VGlja2V0fSApIHsKICAgICAgICAkU2VsZi0+e0xhc3RUaWNrZXRJRH0gPSB1bmRlZjsKCiAgICAgICAgaWYgKCAkUGFyYW17SWRlbnRpZmllcn0gJiYgJFBhcmFte0lkZW50aWZpZXJ9e1RpY2tldElEfSAmJiAkUGFyYW17VGlja2V0fXtUaWNrZXRJRH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57VGlja2V0SURSZWxhdGlvbn17ICRQYXJhbXtUaWNrZXR9e1RpY2tldElEfSB9ID0gdW5kZWY7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggJFBhcmFte0lkZW50aWZpZXJ9ICYmICRQYXJhbXtJZGVudGlmaWVyfXtUaWNrZXROdW1iZXJ9ICYmICRQYXJhbXtUaWNrZXR9e1RpY2tldE51bWJlcn0gKSB7CiAgICAgICAgICAgICRTZWxmLT57VGlja2V0TnVtYmVySURSZWxhdGlvbn17ICRQYXJhbXtUaWNrZXR9e1RpY2tldE51bWJlcn0gfSA9IHVuZGVmOwogICAgICAgIH0KICAgIH0KCiAgICBlbHNpZiAoIGV4aXN0cyAkUGFyYW17QXJ0aWNsZX0gKSB7CiAgICAgICAgbXkgJEltcG9ydGVkVElEID0gJFBhcmFte0FydGljbGV9e1RpY2tldElEfSA/ICRTZWxmLT57VGlja2V0SURSZWxhdGlvbn17ICRQYXJhbXtBcnRpY2xlfXtUaWNrZXRJRH0gfSA6ICRTZWxmLT57TGFzdFRpY2tldElEfTsKICAgICAgICBteSAkRXh0cmFJbmZvICAgPSAkUGFyYW17QXJ0aWNsZX17VGlja2V0SUR9ID8gIiBPcmlnaW5pYWwgVGlja2V0SUQ6ICRQYXJhbXtBcnRpY2xlfXtUaWNrZXRJRH07IiAgICAgIDogJyc7CiAgICAgICAgJEV4dHJhSW5mbyAgICAgLj0gJEltcG9ydGVkVElEICAgICAgICAgICAgICAgPyAiIEltcG9ydGVkIFRpY2tldElEOiAkSW1wb3J0ZWRUSUQ7IiAgICAgICAgICAgICAgICAgOiAnJzsKICAgICAgICAkRXh0cmFJbmZvICAgICAuPSAkUGFyYW17QXJ0aWNsZX17QXJ0aWNsZUlEfSA/ICIgT3JpZ2luaWFsIEFydGljbGVJRDogJFBhcmFte0FydGljbGV9e0FydGljbGVJRH07IiA6ICcnOwogICAgICAgICRTZWxmLT57RXJyb3J9IC49ICRFeHRyYUluZm87CiAgICB9CgogICAgcmV0dXJuOwp9CgpzdWIgX1N5bmNocm9uaXplRXh0ZW5kZWREQkVudHJpZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBpZiAoICEkUGFyYW17Rm9yZWlnbkRCfXtEYXRhYmFzZURTTn0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIGEgRGF0YWJhc2VEU04gaW4gdGhlIEZvcmVpZ25EQiBzZXR0aW5ncycsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggISRQYXJhbXtUaWNrZXRJRH0gfHwgISggKCAkUGFyYW17QXJ0aWNsZUlEfSAmJiAkUGFyYW17Rm9yZWlnbkFydGljbGVJRH0gfHwgJFBhcmFte0ZvcmVpZ25UaWNrZXRJRH0gKSApICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBUaWNrZXRJRCBhbmQgZWl0aGVyIEFydGljbGVJRCBhbmQgRm9yZWlnbkFydGljbGVJRCBvciBGb3JlaWduVGlja2V0SUQhJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCAhJFNlbGYtPntGREJPYmplY3R9IHx8ICEkU2VsZi0+e0RCT2JqZWN0fSApIHsKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fSAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKICAgICAgICAkU2VsZi0+e0ZEQk9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6REItPm5ldygKICAgICAgICAgICAgJFBhcmFte0ZvcmVpZ25EQn0tPiUqLAogICAgICAgICk7CiAgICB9CgogICAgaWYgKCAkUGFyYW17QXJ0aWNsZUlEfSApIHsKCiAgICAgICAgIyBhcnRpY2xlX2ZsYWcKICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57RkRCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICA9PiAnU0VMRUNUIGNyZWF0ZV9ieSBGUk9NIGFydGljbGVfZmxhZyBXSEVSRSBhcnRpY2xlX2lkID0gPyBBTkQgYXJ0aWNsZV9rZXkgPSA/IEFORCBhcnRpY2xlX3ZhbHVlID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0ZvcmVpZ25BcnRpY2xlSUR9LCBcJ1NlZW4nLCBcMSBdLAogICAgICAgICk7CgogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57RkRCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gYXJ0aWNsZV9mbGFnIChhcnRpY2xlX2lkLCBhcnRpY2xlX2tleSwgYXJ0aWNsZV92YWx1ZSwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSknIC4KICAgICAgICAgICAgICAgICAgICAnVkFMVUVTICg/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAogICAgICAgICAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17QXJ0aWNsZUlEfSwgXCdTZWVuJywgXDEsIFwkUm93WzBdIF0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGFydGljbGVfaGlzdG9yeQogICAgICAgIHJldHVybiBpZiAhJFNlbGYtPntGREJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gJ1NFTEVDVCBuYW1lLCBoaXN0b3J5X3R5cGVfaWQsIHR5cGVfaWQsIHF1ZXVlX2lkLCBvd25lcl9pZCwgcHJpb3JpdHlfaWQsIHN0YXRlX2lkLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5ICcgLgogICAgICAgICAgICAgICAgJ0ZST00gdGlja2V0X2hpc3RvcnkgV0hFUkUgYXJ0aWNsZV9pZCA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtGb3JlaWduQXJ0aWNsZUlEfSBdLAogICAgICAgICk7CgogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57RkRCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PgogICAgICAgICAgICAgICAgICAgICdJTlNFUlQgSU5UTyB0aWNrZXRfaGlzdG9yeSAodGlja2V0X2lkLCBhcnRpY2xlX2lkLCBuYW1lLCBoaXN0b3J5X3R5cGVfaWQsIHR5cGVfaWQsIHF1ZXVlX2lkLCBvd25lcl9pZCwgcHJpb3JpdHlfaWQsIHN0YXRlX2lkLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KScKICAgICAgICAgICAgICAgICAgICAuCiAgICAgICAgICAgICAgICAgICAgJ1ZBTFVFUyAoPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPywgPyknLAogICAgICAgICAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VGlja2V0SUR9LCBcJFBhcmFte0FydGljbGVJRH0sICggbWFwIHsgXCRfIH0gQFJvdyApIF0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIHRpY2tldF9mbGFnCiAgICByZXR1cm4gaWYgISRTZWxmLT57RkRCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICdTRUxFQ1QgY3JlYXRlX2J5IEZST00gdGlja2V0X2ZsYWcgV0hFUkUgdGlja2V0X2lkID0gPyBBTkQgdGlja2V0X2tleSA9ID8gQU5EIHRpY2tldF92YWx1ZSA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0ZvcmVpZ25UaWNrZXRJRH0sIFwnU2VlbicsIFwxIF0sCiAgICApOwoKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57RkRCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHRpY2tldF9mbGFnICh0aWNrZXRfaWQsIHRpY2tldF9rZXksIHRpY2tldF92YWx1ZSwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSknIC4KICAgICAgICAgICAgICAgICdWQUxVRVMgKD8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1RpY2tldElEfSwgXCdTZWVuJywgXDEsIFwkUm93WzBdIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHRpY2tldF9oaXN0b3J5CiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgID0+ICdERUxFVEUgRlJPTSB0aWNrZXRfaGlzdG9yeSBXSEVSRSB0aWNrZXRfaWQgPSA/IEFORCAoYXJ0aWNsZV9pZCBJUyBOVUxMIE9SIGFydGljbGVfaWQgPSAwKScsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VGlja2V0SUR9IF0sCiAgICApOwoKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnKS0+SGlzdG9yeUFkZCgKICAgICAgICBOYW1lICAgICAgICAgPT4gIlwlXCVJbXBvcnRlZCBUaWNrZXQgLSBMZWdhY3kgVGlja2V0SUQ6ICRQYXJhbXtGb3JlaWduVGlja2V0SUR9IiwKICAgICAgICBIaXN0b3J5VHlwZSAgPT4gJ01pc2MnLAogICAgICAgIFRpY2tldElEICAgICA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgICAgIENyZWF0ZVVzZXJJRCA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gaWYgISRTZWxmLT57RkRCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBuYW1lLCBoaXN0b3J5X3R5cGVfaWQsIHR5cGVfaWQsIHF1ZXVlX2lkLCBvd25lcl9pZCwgcHJpb3JpdHlfaWQsIHN0YXRlX2lkLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5ICcgLgogICAgICAgICAgICAnRlJPTSB0aWNrZXRfaGlzdG9yeSBXSEVSRSB0aWNrZXRfaWQgPSA/IEFORCAoYXJ0aWNsZV9pZCBJUyBOVUxMIE9SIGFydGljbGVfaWQgPSAwKScsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Rm9yZWlnblRpY2tldElEfSBdLAogICAgKTsKCiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0ZEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgU1FMID0+CiAgICAgICAgICAgICAgICAnSU5TRVJUIElOVE8gdGlja2V0X2hpc3RvcnkgKHRpY2tldF9pZCwgbmFtZSwgaGlzdG9yeV90eXBlX2lkLCB0eXBlX2lkLCBxdWV1ZV9pZCwgb3duZXJfaWQsIHByaW9yaXR5X2lkLCBzdGF0ZV9pZCwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSknCiAgICAgICAgICAgICAgICAuCiAgICAgICAgICAgICAgICAnVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KScsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1RpY2tldElEfSwgKCBtYXAgeyBcJF8gfSBAUm93ICkgXSwKICAgICAgICApOwogICAgfQoKICAgICMgbGlua19yZWxhdGlvbgogICAgbXkgJExpbmtPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpOwogICAgbXkgJEZvcmVpZ25UaWNrZXRPYmplY3RJRDsKCiAgICBteSAlRm9yZWlnbkxpbmtPYmplY3RzOwogICAgbXkgJUxPYmplY3RJRHM7CgogICAgcmV0dXJuIGlmICEkU2VsZi0+e0ZEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQsbmFtZSBGUk9NIGxpbmtfb2JqZWN0ICIsCiAgICAgICAgQmluZCA9PiBbXSwKICAgICk7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0ZEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRm9yZWlnbkxpbmtPYmplY3RzeyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgICAgICRMT2JqZWN0SURzeyAkUm93WzFdIH0gPSAkTGlua09iamVjdC0+T2JqZWN0TG9va3VwKAogICAgICAgICAgICBOYW1lID0+ICRSb3dbMV0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkUm93WzFdIGVxICdUaWNrZXQnICkgewogICAgICAgICAgICAkRm9yZWlnblRpY2tldE9iamVjdElEID0gJFJvd1swXTsKICAgICAgICB9CiAgICB9CgogICAgbXkgJUZvcmVpZ25MaW5rVHlwZXM7CiAgICBteSAlTFR5cGVJRHM7CgogICAgcmV0dXJuIGlmICEkU2VsZi0+e0ZEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAiU0VMRUNUIGlkLG5hbWUgRlJPTSBsaW5rX3R5cGUgIiwKICAgICAgICBCaW5kID0+IFtdLAogICAgKTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57RkRCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRGb3JlaWduTGlua1R5cGVzeyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgICAgICRMVHlwZUlEc3sgJFJvd1sxXSB9ID0gJExpbmtPYmplY3QtPlR5cGVMb29rdXAoCiAgICAgICAgICAgIE5hbWUgICA9PiAkUm93WzFdLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIG15ICVEaXJlY3Rpb24gPSAoCiAgICAgICAgc291cmNlID0+ICd0YXJnZXQnLAogICAgICAgIHRhcmdldCA9PiAnc291cmNlJywKICAgICk7CgogICAgZm9yIG15ICRLZXkgKCBrZXlzICVEaXJlY3Rpb24gKSB7CgogICAgICAgIHJldHVybiBpZiAhJFNlbGYtPntGREJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gIlNFTEVDVCAkS2V5Ii4iX29iamVjdF9pZCwgJEtleSIuIl9rZXksIHR5cGVfaWQsIHN0YXRlX2lkIEZST00gbGlua19yZWxhdGlvbiAiIC4KICAgICAgICAgICAgICAgICJXSEVSRSAkRGlyZWN0aW9ueyRLZXl9X29iamVjdF9pZCA9ID8gQU5EICREaXJlY3Rpb257JEtleX1fa2V5ID0gPyIsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJEZvcmVpZ25UaWNrZXRPYmplY3RJRCwgXCRQYXJhbXtGb3JlaWduVGlja2V0SUR9IF0sCiAgICAgICAgKTsKCiAgICAgICAgTElOSzoKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0ZEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgICAgICRSb3dbMF0gPSAkTE9iamVjdElEc3sgJEZvcmVpZ25MaW5rT2JqZWN0c3sgJFJvd1swXSB9IH07CiAgICAgICAgICAgICRSb3dbMl0gPSAkTFR5cGVJRHN7ICRGb3JlaWduTGlua1R5cGVzeyAkUm93WzJdIH0gfTsKCiAgICAgICAgICAgICMgZGVhbCB3aXRoIG90aGVyIGltcG9ydGVkIHRpY2tldHMKICAgICAgICAgICAgaWYgKCAkUm93WzBdID09ICRMT2JqZWN0SURze1RpY2tldH0gKSB7CiAgICAgICAgICAgICAgICBuZXh0IExJTksgaWYgJFJvd1sxXSA+ICRQYXJhbXtGb3JlaWduVGlja2V0SUR9OwoKICAgICAgICAgICAgICAgICRSb3dbMV0gPSBleGlzdHMgJFNlbGYtPntUaWNrZXRJRFJlbGF0aW9ufXsgJFJvd1sxXSB9ID8gJFNlbGYtPntUaWNrZXRJRFJlbGF0aW9ufXsgJFJvd1sxXSB9IDogJFJvd1sxXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4KICAgICAgICAgICAgICAgICAgICAiSU5TRVJUIElOVE8gbGlua19yZWxhdGlvbiAoJERpcmVjdGlvbnskS2V5fV9vYmplY3RfaWQsICREaXJlY3Rpb257JEtleX1fa2V5LCAkS2V5XF9vYmplY3RfaWQsICRLZXlcX2tleSwgdHlwZV9pZCwgc3RhdGVfaWQsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnkpICIgLgogICAgICAgICAgICAgICAgICAgICJWQUxVRVMgKD8sID8sID8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KSIsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsgXCRMT2JqZWN0SURze1RpY2tldH0sIFwkUGFyYW17VGlja2V0SUR9LCAoIG1hcCB7IFwkXyB9IEBSb3cgKSwgXDEgXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyB0aWNrZXRfd2F0Y2hlcgogICAgIyBUT0RPCgogICAgIyBmb3JtX2RyYWZ0CiAgICAjIFRPRE8KCiAgICAjIGNhbGVuZGVyX2FwcG9pbnRtZW50X3RpY2tldAogICAgIyBUT0RPCgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==</File>
        <File Location="doc/en/ImportExportTicket.pdf" Permission="644" Encode="Base64">JVBERi0xLjUKJeTw7fgKNCAwIG9iago8PC9UeXBlL1hPYmplY3QvU3VidHlwZS9JbWFnZS9XaWR0aCA4MjgvSGVpZ2h0IDI1My9Db2xvclNwYWNlL0RldmljZUdyYXkvQml0c1BlckNvbXBvbmVudAo4L0RlY29kZVBhcm1zPDwvQml0c1BlckNvbXBvbmVudCA4L0NvbG9ycyAxL0NvbHVtbnMgODI4L1ByZWRpY3RvciAyPj4vRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aAoyNDQzPj4Kc3RyZWFtCnja7d2LddpYAgZgUkGYCqKtIGwFZisIqWCYCsJUsGwFw1QwuIJlKli5gpUrGKhgTQVZJ465AoORhB7X6PvOmXMSGzsaSf/VfWswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgF5LktEwSR7/kC3WNf3K8TSp/LOr5cN1nufZ5PxnsodsnTV5EE9XJh2s19mDW/+yUzke34S/bcf1XLflz5f89P34Gq/qMP1Y8JPb1WrV1FHkr8wmS9NMBKpdzcnk0+FlS+q4bef/vOzn70dXeLbTmxIf3i4WjZQfk38ffGGTLlNJKP/wPvZw+HVRw69+eH/hL/jH9V3P0X/LfX47XzRwFNmRZ99muVyLQwnT+YejX//XvIb201+X/oY6jiK2ouo/ZX/iblL/o+fr8S/fzqXn0uTEkp1fF7JTX+vzfHakp/BlnJ+uev+yrOEfWH+48Bf8PZOdRsKz+nTyW7/P9bud7SGYfzn9zc2ojhP4okVatrYyHshOI+F57Si205V0vH72lq88FDaTeq7V7LeLojN5kJ06y7J8bf2PV77559Sj5xWnuo/vBoOHbL2q69wlk+GJ7+z+/bv0VL3iKsccQnZuT7csRsPkoGS7ndZ8HMl08PhUTz40WnZeZX1t+bK+u02ztMUh5q919kq8yey83gGfjKd7rdGmuutHyXj8saH27lVG58XQdpND2LJTJTvfPrr42E7b78jg+OD3mZwcK2rSgzHLu2X7pYzsFHiS5GfONDtOnEynTdcSrzE6d/O0g6OQnSJhyIWn8Xv5cLBPeM5FZzNNOzkM2Sn0IMnNfnvXeFV+NnsvPMXbOp3dubJTKDtJtrudPzffIk2WN8Jz2t4swPtpZ32RslOsARNqba2cqNk8/+jR23aq9Tm4nXU3BiY7xbIT5l23M8titMq3eq5wInv19uAfMdTXZKfEfbmbFLhJ2q/U17OO6yrkas9dP5Blp2B2Qm/Bu3aOcLjKNXqucUphNfk1ix3XZWWnYHbC7Kl3bR1jfpb1FS4DqdYQ/C2eZmBfsxOuQbzZyVfbtqO14DyeknWosXU+5aKv2QlRiDc7e+H5cyI5e31s3VdjZSfi7OwNoOtr21sCHUH3iewUvCcXXzrITr5DVnfB3mMngqJEdsr2s22HbR5nrr/Agyf32IlhroXslB3fabf8zzWOPXjCYyeKAS/ZKZadUOS13L2Tq7X1/cGTK0eiuFtlp9gdGW7hzy2vTgwzH/s+JzRcg00ykJ03k50wnP1Ty7WF3K4kP/V7Zk4oReIYKZadQtkJN3D7rY5wy/R7PnWoNkcyvU92Sq59a//+DVWVfo+PhqkgkWziIDtFshM+3UWRF/bi73WlLXTXR7JP7dee1gfCXqkFLkSur6uLIiYMy/a60vY1rp6C3LDF39b9rDyfH+ocLsJodic17bDurs89baHJGcu+W8/lb+/2AXuuAZztstnb9bibDp5dAXeVbxEr3dyJZpzrqULQv62PfywtO1NmJJNpfmOJjob2w3h6jxs84SS8i+aYksd6QJr28GJMHgvxg1esTcf7VenR/hZ6tW/lXlBob/V4asGuq9PcpHgfRSc18PKqko2zPi8f/Rpbc4cX1df4ouO+2TsHlp/HfHWOR6fDVc/qK+U3mKCTq3PcZr7s6tB2w4KyIztvMTuPd+60o0fPbl5Duwvv4rw679yq8Xl4f+4TXb0DtJPNEuIS+hpl5+31FXzXzayYMC7Y2xtH8RG3vV3CYwqPCkuk2RmPs2zdw6sxHI8O3+w6PXin8bF36HbRVJWdKOtsT9O1ejhu8L0g287OPEaGo/F4f8S0i+mg6mwxFh/Pc3R7F57nOkCB7QeG01n++dPBCjSV/Vx2Ilm9kxt169kahOH/fvxhkxQq+PPvkmq/1qaPOsbxnb6ufQuXolihMVqG+dTtD1AaG41xTo411wWLsfy+6q2XfObkxDinT3aKBiG3r3rryzfNBY2x/JCdwg+R0NnVdqsjLLru8Rzi+Na+yU7xCthu6XPbe4Na+7ZXdH1eyc5by064ei2fLGuu9x6+sVRcZad4dsLyzZar3LtJqn3e6yOchU0iO28tO62/J/6HsJdcr5cbx7u3oeyUuXqtNldDlS2Wmn4nQqsvkh4T2SmRnY6mxoTNsHs9/X43FSSWcXzZqZSdVmcw7bLT83dd7x77kcwfk51K2Wm1r3j3z/b7HSK7eVSxFCHtZOfbuph0cVH/6nQ6yi78FW81O8/vCux1L9v3e2Dx7UREs4dtK9l5auxetL/Z0wucNuO6ntaVpuV2tRRgtPrWwXc/fuh5dgbD6fAhjWUJQivZee4gueDiP28lUNvASqXshA0NWm60D0fjQbYaEJU2srN76V/lOZShe7KuZmKl7OjwouXshP02KzZ2c1OY62poVMrO7n/EduK0nZ1q4UmysGizy+yE8f2+v62dtrIThuMrhSe/6qy2jTaqZCeM7/e8s5jWsrO3WW3p2y6/2rm+o6yQnTAVtG+bO9BZdnJ9u+XDk2vr1NnOqJCd0FPQ+4EWWsvOXq2tXGPhaTis7hpblezkNg31Bhhay06+yfJYbE+KVnnyr5iu9+VRpbOz7Phl1/Q0O3tdZY8337xYwb33iul6W+gls9NMowvZKdtseXz0zM7fscl8f2v1Wju3SmVn/0g8dmg1O4fhGdzNX79nh7PZ++aiUyI7yWRy0+CBIDulwzO4W5yeoTWaHb7Oo+Y7NmTn9rXGV5KMDl9o1fNFNHSQnf02w1PtZ7lKj5b00xefnNUbnQIvSDzBbGbaz85guLp58bVtmmb5l+CMRqPJy5fe1P969qrZER26yM7BIGkuGtngIRsMR0ffFfWtdjep/YatmB3RoaPsHPY6F9PEoVXLTjRLFokpOy2NlQ/nX0r+xP20iYWCVbJTdFiKfthtttjafnHjxccI7tewQ2thtzMPHY60QNqc3jidF624bReLpu7X7GOpj29X87W7hb061NNMs82k1R0UiqWnweQcGW56xSZd2SyAl2aTWjdvKlpzm/58rp2zWDV6UMP56OZceB8LlPU6yzxxiOuJN5l8Oh2c5coNC6fjMx4fKfvvszQVHDjf8BiOH/97+nM6yB5SpwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDL/B9n0iy4KZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjw8L0NvbG9yU3BhY2UvRGV2aWNlUkdCL1NNYXNrIDQgMCBSL1R5cGUvWE9iamVjdC9TdWJ0eXBlL0ltYWdlL1dpZHRoIDgyOC9IZWlnaHQgMjUzL0JpdHNQZXJDb21wb25lbnQKOC9EZWNvZGVQYXJtczw8L0JpdHNQZXJDb21wb25lbnQgOC9Db2xvcnMgMy9Db2x1bW5zIDgyOC9QcmVkaWN0b3IgMTU+Pi9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoCjE4NDg+PgpzdHJlYW0KeNrt3Gtu2zoQgNG48JK6/xVkT6qBAEZao7FEkeLM8Bz0133gOpRIfqJyfdu27QMAgNh+GQIAANEGAIBoAwAQbQAAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQBAtAEAINoAABBtAACiDQAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQCINgAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgAg2gAAEG0AAIg2AADRBgCAaAMAQLQBAIg2AABEGwAAog0AQLQBACDaAABEGwAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwAQbQAAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACiDQAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQCINgAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgCAaAMAEG0AAIg2AADRBgCAaAMAQLQBABRzNwSF3W6/f/4Htu1zzR88rKpXBNPHzW8Zp8P9sG2bUVh5wa034fMWmyUYc8cUsJ7zAydtqy+1j3+30jzPXmzAcxYvniANq5mhK8/vtKWf1TLFSg0lbzxz4eTWYADrcdJmhTUmQOhJ7dzIAPLFSVvWRyjjAHgew64h2jDxUvI0CboNO4how2RDeoJuM4yINubNsWKJoHjAYmg1cwog2lBsum34JxedwDWrmW5LmQS+XHeFXJMC4y6EsWWRBWfQrd6w0Jl0HTcIg5mLr/yoOSHNQyCF52Ll4Kd5kff96qKNlMVm7gGpK2TP6qcz+oav8UzE77QVKTa/DgVU6g+aN4KGMXTMKdq4qNjkGqDbODmGuk20MXbOyDXAakmvDcKoijY8jAJY33Kkm24TbfSfKlY0AEZsGbpNtNFtknglCugMdJtoI0GxGS4AdLBow3wDoPI+snMrcdgm2mifGIoNgIDbE6LNlFBsAAxhTxFtmF0AlNpZHLaJNkwGAJwIINpMKgDotMU4XxBt7JoGig0AEG0A5H6y5TyHbaKNDhPAMRsAQboN0YYpBEACDttEGwC0JIIn276Mp2jD8woAINo88QB4suWqrcd1EW0AcKwMPNmyrLshyPWsA1ByaXKQA285aQv3EImdDFa7mfevjSadBU20ARYyuHoKPFrt64/JmIJzh+m8HhUH7Lo0/6xWLhZVl6DmW92ODqINJDWEvtWvyTVzELweBcBTE8ZZtAGAkgDRlotf+ACsbBZPEG0AVE5D6QaiLQrn/4C16226GXBEGwAkoNsQbQDQ6OIXBbqNZfmeNmjZKrzOZoX7fP+t/voF1KM/pDmIaAN2PdnbM3Crv3Zbl/+iboP/8XoUGjcV72hwq5/3CK/nH5cARFvu5RJXDRa5mY/WmwmIaAOAmXnk1A1E2/yHSIMA0HHBdNiGaAMAD7og2gBAt8Xj5FK0AcCobtMZiDY84gAAog0ASMXbatHmjgfAyjmftz2iDXMGABBtAMB4zjtFGwCc5R0Fog0PKwBAFHdDIOmgr9djj6Q3dpkfBOxNNThpc/fD2ND5yPn2qswPYlHFMIo2Os+Nx18xYShZbBlzR5xhb7I3BeT1qGca4ECxPf6uyYu9iSmctAEhYsiHBBBtgCRSbG4bEG0AJTZgZQCINoDoebT/I/mNH3cLiDYgvf1BE2onVmyL3HUg2gASd5uDnMhcHfjOV34Ak7fkWSclR4PAiY5ig7mctAGdHY2bKXuzYgueazsvkOvCUpy0AUO67VAVXXnk1tCIyiBsTINoA7i62y5It7YgUGxhW82lQbQBTOu2QenWfH4jC86P4bi7y0VBtAFM7rbviXBmbz7ZGbIAEG2AbmsMr7ch1etASLEFv6kMAqINYNQW2yWnrnlJpwkUGwTkKz8Ae+1fH1ITuItAtAF23E8fDz0NbbweBSaEkf8VERcIjnLSBjaSOUMXZ/Rcx8iD4IANnpy0AZNDYeKpmxoQkZDIbds2owDvp8pLWNhURo+wJih/FVwXEG2AaNAEQDVejwKBPKOqb71pNUC0AYytt7aGU2mAaAOY33AAC/KVHwAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwBAtAEAiDYAAEQbAIBoAwBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACINgAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQAg2gAARBsAAKINAEC0AQAg2gAAEG0AAKINAADRBgCAaAMAEG0AAIg2AABEGwCAaAMAQLQBAIg2AABEGwAAog0AQLQBACDaAAAQbQAAog0AANEGACDaAAAQbQAAiDYAANEGAIBoAwBAtAEAiDYAAEQbAACiDQBAtAEAINoAAEQbAACiDQAA0QYAINoAABBtAACINgAA0QYAgGgDABBtAACINgAARBsAgGgDAEC0AQAg2gAARBsAAKINAADRBgAg2gAAEG0AAKINAIBI/gCkqoRBCmVuZHN0cmVhbQplbmRvYmoKOCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDMxNT4+CnN0cmVhbQp42nVRyU7EMAy98xX+gXpsZ7VU5YBYBLcRvSEOnWnLhRGaE7+Pk3aYA6DE8ha/ZztwBgayw5DELsHxZN6jyfu/+gyoGh18mdcp+hjgBD7mi/MBL7D/o4o1o1E4bYyRqsMCEhXFilPCGGJtYPd0Irj7NJDbAXYPDOIx5cQwLCAuYooCHbPDIALD9NoThUAcPbFG4gqrSjxORI6JJ/c7fpiJvcWZiEMuIr3Zc82Vt+G5kXJC4eArKVc7K3SSMGvYOEctfisLh8LU7NI5Sy0GPfLqS66Z+WhyIJGl2ateGlnnEnJdH3tBCvkKH/q1a+uY3bxSqRpkUnuQxebgKhsJea1bKB1bHS22FbpOw6ghSJ0mE0apwwRCZ/+40mUpXe7XjdgWLm3PW9vjT2RqkaYXbvj3w6/f3t98A0M7hZoKZW5kc3RyZWFtCmVuZG9iagoxMiAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDM0Pj4Kc3RyZWFtCnjaUyhUMFQwAEJDBXMjIDJQSM4F8tyBOJ0gHcgFAIfqDEcKZW5kc3RyZWFtCmVuZG9iagozMCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDkyMz4+CnN0cmVhbQp42u1ZTW8TMRC98yv8B9bMePwpRXtAAiRuQG6IQ5NNuNADXPj7zNj76TQk0FQCumqTddxdj8d+b95zqr4pVMA/qILhX1D7e/70ll9fTq6vturlG1RoNVlv1PaoKBltklNNCDpAUtvu0wbAIEA0AMED7A4AhFN7h+3n7Tv1eqtAG4j8TsHyu41efXj7QOf3MW7SyRsvYUE1GJImE0tEPOzbBpG8BI9tE7kLD4B3yFcATAnQEl8993Wlzbmi9+NklilOoThRHU/CHW6TBE9BG+uGUbu2Sd5uZJEAO9umTUnhrmtdn5G3bWOC/CGl1mDfmyLgzvU5cr8Z7+6vOW9eojLiVUkbMvUEj/CHadNsbEZPspaHRtJmzByMOfbb6GSWYGMbS5bI2cCRpmz2h7J7sqsuPpjMPGAK2gZaBORgbWNT6lsOYG09r9Yl0AgDHOESpjP8D5XxBjwwTqPzNROErSYy7eHOt7ZngNQyRvzwkUJrYCx1l4kA2sdYRTy7VCs9VlKcJcUCs09DCwoaEWtaHJgWRKIIbCaQDpPmZS0MYKzNOp8JIgohet9l1TS9nIp2kG8b2hRVtMKhPY888GqS1otLgpbn6+v5rgR6DiRYIPTRJKitoUsaTJoMZ5MCGyLYu1zrxeIOGpBd3Rms1q6O8swXYx/NjcxsBKbuKGS8piGZchrozTb3+jzjsCl+de7uKl9eXC7cJVG7rHDke7M7N7i+iOKV2TtbT/Nob2lp+TSUYDS1x7mpJZgtxcy7G5PyC5wrDlfOKIO75TWRwxN2dNI/PscHLQQOI8/LkshyyHN8/pp7huWShen5YMu4GGSa/ca4XVtAlXegHD7yhULZpXIs+eUOXiIS36kBfLVs/2fpvKao2IQ1hGbovJ2yElgdXahRmg1n8n8pSne90tf3sX5fWltDKRN+mfgq0U+E4CW8ngbB6HXEkzqbvaGlfw7Bl+fWdS1SX2W5NA9VWsozl+/iWf1VZ0AyqMmlag3/VTJcD8oFYh4Nysr5EEUdaDKCTRLUAdiCGNlJ2a4ztWppUkAHG6ohD/vsIm5nVMjJVwHT13oLoxIqzyYAHAB+RbmNxAJWx1ir7dr6E/pysfKuxmtFhxvqCpcLPstXrBBjRCDll8vwWLZzacbfMrwjM2ZhVmKsrccQY47YM7zor9+UpsQc+iGK5b1jebHqnoeK08ev6qN6/5AqOY7CpsGHoGMc/gtmqY71/sVPmic80QplbmRzdHJlYW0KZW5kb2JqCjMzIDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMTEwPj4Kc3RyZWFtCnjaUyhUMFQwAEJDBXMjIDJQSM4F8tyBOB0nXaigZ2xpYapQDuTpmpmZ6pkbmyjkKpiYWSC4OQrBCoEKTiEK+m6GCpZ6lmZGZgohaWAN5uZ6FhYWCiEp0TYGhibGIGwXG+Kl4BoCtyGQCwBXxB/VCmVuZHN0cmVhbQplbmRvYmoKMzYgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNzA+PgpzdHJlYW0KeNplkLtuwzAMRfd+BX/ACklRLyDQUPSBdgvqrehgx3aWGkWm/n4p+YGggS2Ql8QVxQNXIED9CALrj3CeVb3quezxsYXDC0EyybOHdgKL1rgYgKORZKEdPo+IziF5QUoeSS+ilJC6AdES0mDv6/2IJFonRHIxMx81H2uPucsNh6S3dinL2nB9Jqx5bqy2JjV3tGiOpTOe9fRqn2q+xCl/te/w3MIVjE3Rwa8uxWICBphBfNzEN3zAaV9awaRo9ME2VUAeiyAGsmK8QFMLBdfhbUZ4+rnx/o+3kxvvnQlW1tm7XKbfoS6GEEyMccXMyisyYvAVYcG75z3VXcWLsUHUWy2KYkOwPej08AdQg284CmVuZHN0cmVhbQplbmRvYmoKMzkgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyMzQ+PgpzdHJlYW0KeNptULtuwzAM3PsV/AGrPOoNBBoKpAW6BfVWdLBju0szZOrvh5Zio0AKSSCPhyNOR1cCsR5QFL1M54uiN33fe33p6fkVlE0OEqhfdCjJuGypnz4PzN4zgmPkwNAVyJkxTMwWjMk+zseZ4XQOZvhUBAft58qJDKWTmHXrkIu7E34s4NqXziq1qHhAw5JWZj7rG1W+1L7VpXz173Ts6UrG5uTpd3XuTORIF3IhbeCHPuj08O2/qi4Eb6J1d90Om/KfgLoQo0kptYgwT9WLgzdOovItOdEIkjDHUFNZE9v7EZv9zdDp6QZG6GAGCmVuZHN0cmVhbQplbmRvYmoKNDIgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAzMTg+PgpzdHJlYW0KeNp1UstOwzAQvPMV+wMx+7DXXqnKAQmQuFXkhjgkNOmFHnri91k3SWkL5CF7RrPj8dpwBAL0lyCzfwgfB0fP/u9/jUcIZirw5aixEDXBAaKWFXzCK2zhoYP7JwILpqzQTRBZQpQMDedQLEG3e9sgMiEm9Cci9oo4jIjiXG/te/dysqAYJCpXD58aR7eQYESLRWHErLXsVPLYXSdUDqx5jbigq4wXC0hOgVShIdSga8YyZxpoztubZ04/eet8DrFklottN2fLlEMucfH0OoqC5HaUSsu08blz/a71BrEjnBCnPxSqPuZVJY78vMisMrKpDs6OVbswNR9pdM1Ze1LVPdFObvnVp1ZUtq5F6sTgNmlobc7BPK3tvrgYYiUtbdcUssRz3xf43+Xwc6mq7HejlLlHNI63K2zvvgFPq5QJCmVuZHN0cmVhbQplbmRvYmoKNDUgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNTg+PgpzdHJlYW0KeNptkMtOxDAMRfd8hX8gwc7DiaVRFkiAxG5Ed4hFO23ZMItZ8fs4TVohDUoiv3St3AM3IEA9BMnpRbhctXrV93XEpwEeXwjECjuGYdWmyzaIh2H+OCHGiMQBSRhJV5AI0jgjekKa/X1/WpCC9gmRYi6OTpov28y5sRiXRLeOUkIfxKkQbnkxXkerikdqtct1slz0TSpft7zFtXwOb/A8wA2slxzhp/482IQJrhA478U3vMP5zvZflWGONvnQdUfZlP8AMpySzTk3RPtffBTLyg07Oacm/NIMVUrjXGL3LNJBdD/FcAxVkovJOzBqECvYcKxoeQXOvBPYPZ0ffgGGt28DCmVuZHN0cmVhbQplbmRvYmoKNDggMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA1MDQ+PgpzdHJlYW0KeNq1lMlu2zAQhu99inkBs7NQXIBAhwJtgN7S6lb0YEtyLskhvfT1+5Oi4lh2gABNLFPUkNIs3wyHnkiIcQlFxZ9pfIR0i3F/MT+RyzkY/YW0y86Hjh7Jh7QKD/ST7ujLQJ+/CWWXgwYajuTVnLdIO40u5Y6G6dcNswpzx/h55n1gPszMhrV97n8P36sK8c580KJDxHE2qDCXRZqKw9zvhPEwzb3HlLR++nU49zSo0xBXV5t05usLQ8bsUhKC4uDCakh6KQZm32tX5ZO/0fcILN8Uz1sEiXlEaF13Wou+zS1SaGyuPkN2AlwM5wx3C0I/bq8s/rm/4jSClLjsV4dlnlj1iHm8MPMO5pCE0MWNTfapBwXJuReFeDSW4FlkZhkxUFvYY+nS1qVqwF4UDMJRpGFVjLRKXtKtXGVUD9d1kNcS7ohxWENe5snembBadpEvCE8fQjjgPb+xiWNSy7yQRSkVkqtosaKpsPfyJsABZ9Y3xajUmqscTnnaT7ViwXG7XqjbK9Sv4Pg/6sbZsb+gPn8I9c7lQv3MZjmuYhjeanFrKThUvvoFWOXfgMm0NgNkYUFmod8VWAWbLyka0bTWtBV1UtP2lpSZRaep9U+Y336DpmcZ+0vTC52L5p+7XhNfa9GlK5rivYgenVLDfeStjbtP/wDbWVoSCmVuZHN0cmVhbQplbmRvYmoKNTEgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNzY+PgpzdHJlYW0KeNptkLtuwzAMRfd+BX9AKqk3gUBDgbZAt6Deig52LGVphkz5/VCWbQRIYQt8XF9aPHAFApSHIBp5EU4XqT7lnPf4NsDrBwFrDibAUKVpknZsYZh/DojeIwWHxAFJRhAz0jgjWkKa7XN/KkhO+oRIPmVDB8nLohkzZmUiy9SRs1sFP2XCJc/KilTFPFKvTWpKOcmZxF6XvMeaf4cveB/gCtpy8nBrN3c6YoQLuJC24g++4fi09qNLheB1tG717WV3/gNIhRh1SqkjokrLXSyyTlbkDs7IDrb0fRqkcc5+XZl55UClUalZBS84cGpMXW5CI/DgCG5ziHdnyglp8p1365v96zX23yrqEzdiG4Pjyx2DZXpbCmVuZHN0cmVhbQplbmRvYmoKNTQgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxNDI3Pj4Kc3RyZWFtCnja1Vi5jiM3EM39Ff0D6mXxbAKCAgNeA84WnsxwoNHhxBtM5N93HSwerZY0q8CA54BEdt31WFXs6WOCyeAvTMnin5lO33H1K/7/dfP5Mc05Rzf9g6tdnn0M0/fJx0UXf0+/T9+mn9+mL19hynOONk5v18lbN3uXpp1N85LD9Hb+Y2+MBWOCwR9vzDEa834xxuHeMR/+fPuNRYCfnY+WZOwA2d2cAQo7kRP7MQubA2b75W20MtrZxqRmltVgZ6fEWztDQjowcY5F0SkcMukDMvUQ8KvPVd2Xr65zdFcFhDSnxRcJIRiI8YD2L3sDx7MBdzEAl7Ijz72BHA1gBiBnpiK34OzW+1UOkAz8NyLTO6FqmmjleJU39V6RA5LoJu7GKSvW5veihpS7WJiMikksRtmIhWhPF1Vqro0jLAcLRRpTpiLBolmUT1a7pkSzrbsWSqY4QnPgAER3Oh9s8YcIwrt8R+X4/QBGRFmLYlywksFmBjvHgpgLOYqy9yDKNFYuHSDvO9fVHEICYg1gzqHAewx3DvtRFIVcnsSyw17RitPWuNk4kfDjQGF5xEG7FG+IxS/0MmuEQULjHRQdBAoNj0LrEhsOmq10KK4KHfaSgl49KyEsQE2666qdNTbne9lHm/O+U1nUdeJ4p4SiCen9I0K/r3BOVtVqwDqcdz4XOAiIiPzst1MNZLTozhSI5NYAoJ0ndgo8IxFiCcwtT4pfcSTZKknD1O8KjeuCXBzIBVl4NgWMqDBrydQCzyWxr2gQ5wBYzywWRGuTOGzt8pTR+jmbtGK8OeS2HXICnkHB4kuDB0fuQXEwKUqkCOYCPuW8G6luB78vwu8LpdrE+GLqHja8UTHOgUbFNbW9cVXAKjHePTth6xS2nUfnRGx7KL2c1lW7+DQIMKkQ8gsg6Bmp4W8dg1qmqcs8oVmBxQ/x/b8m93F9+C/y6+1ssn0hvz2jOV9a7+K+4PtOoKOFS/rkBY+QM61bAe2MRddrN+VBIPTjktJX5Pi+L3E5GeTW8YjpRi2ptADsDrl8RQVB+4nHUB6RLphP97nq3FC5PIkkNzSUzQ3ayWywhqv2MxjizPGFjgBbTp0E+5C5uNnqyO52jhrzoLA43NXfx735QaEeW2txUrz6NKoTOrC8AOqOjzqyJJQ/ELuhM5mDkda9WpxzLnSTuHMU31N3QNaDntC/ciREtgJaVuvxq1kjumIZ2svIyXlzAYqcZvHdQ2T2nbqbHDrnO8zAc8yw7ofdXgs/ix4KgJhwp3HksW9sQft0qbcHvgM4vtJoN5BVuwGMdwfbXAr7PtxpuBUJRLxMkuUpKZAV3Q0WywowBAeKLa7RXsOfEiC+cb0yDrF8uml1qe2veiVQvqBG0UeZoeuXGPuZGCneCB9lp7VYEdPXT+d0MpU4KVM7MssNx1JQRapOZ56cNzLKYapMhtTozZDEDXdbIli2HCxstQn31VIe9t6Zer+L+ti7rTubPtUblZ6PejTN0h9Cs77A885rOGBOvdlsnUtKPSOyWHiglJ2d1pZVs2IqxpUUkt7vHy5hJt8ULYIfY7/PsL6bGQYAcaS/kFroXCWRPOUxXZ3yeMWtpUvB6s1BnQJbVSFO06VI5NxJ9tCLmc2tFEZfnsjbFN5/NFOoHMWrYKO5XMORStRdRcDwDoaLOOt9fzTBtHmbtdax1cJrKNyqv1hbrXleW9vIjA+s9zpON9Tozk1seFcB0kVC68dOWz+kObu74+ygbhhnt+/97Qgddr6rGO092M2dhHPR6rK7rNASRTGatnGO+vHrM6106xpzKg5rHWwXlErzpNW+cI1zl+GVXhgnwcf3tPEEM+/pPFYhHjKu6/nvY5pdXkJ5WxzDnJyvr4vL8t577Whn5wDpUpqXpcyKcLVrHd9++hct0zXvCmVuZHN0cmVhbQplbmRvYmoKNTcgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyNTU+PgpzdHJlYW0KeNptULtqQzEM3fsV+gG7kt+C4KGQFrqF3q10uA+7SzNk6u9HvnZCIcUWehyO0DlwAQKURxCNfIT1LN2bxPc9v0zw/ErAmoMJMFUZmqQdW5i2zwOi90jBIXFAkhXEjDRviJaQNvs4XwqSkzkhkk/Z0EHqsmPGzFmZyLJ15uwG4JdMuNdZWYGqkGfqvUkNKavEIvS61z3X/DW9w3GCC2jLycNvu9zpiBHO4EK6NT/wAacH2X9ZKgSvo3WDd2878x+DVIhRp5S6RVTtfotNpu0UvDtnRIQtXVBzad6yH5qZhxFUStOTVfDiB66+ac8qDR9szMTdm6H2dv/p6Qr7MGr1CmVuZHN0cmVhbQplbmRvYmoKNjAgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMTA2Pj4Kc3RyZWFtCnjazVjJjhs3EL3nK/gDYlhciiQg9CGAYyA3J7oFOUjqli/xYXzJ76eKS5O9KCM7UpDxtDlkF2uvV2SLNwFC0T8QXtOvEtcvNPtIz+fN+CZkjGjEXzQ7RGnRiS/CYqiTP8Vv4pP46SR+/BlElBE1itNNWG2kNV4ctJchOnEafz8qpUEpp+jHKnVGpS6TUobWznH44/RLYgFWGouaeTjpPRAHIyNA4WDDEGkIWqmrmzd+OC31RC01+qpomS007cRoDBKtEwdQKLHTlIV4ZJmkNQmzsQplCwbLirAF/C7TDmQurzIF28U7s315ZG7M2UBVe3a3BHKcIkUN/W8QxK8fdxa/ft4xgAwGn98n5WG6Ka1vNF43Yp4gTiPR2ZVMNgsolSDGQQPpABPpENPDDgK09A4rjYLzmFwCo9msz/vIqaDIDt5P/IA8l/aRr9XN5LkLg9ZZHiDxIa3m/d5mvuCHAzgiuhAjd+EMYnrOHpf+TIPxCixxPUOSwpYAcU6SeM7vmBvi87wKMjpXg6iVlj5uYvj8WDapOkoV41L0y8MFy3B9dxhI6jQ/XInp3TopzuPacckNpgMr9r0mEDCmeGDfEq5uc0xv/sEepmLZ2CcfrpOvUrVy+dYcLAzMHIyqHtOZqQrhFd61E1BtknmDP+7F9TE7ODmfjGWMx9rYdR2ML8GyIF3UK5kLLNP/MZbBHSx7PL2fhEZGKYloNmF4JRwZkOSglezvdvnaZTC7rKNhHra4W+XCqWEvKJN4jNMAKtcpj2osvEux8bkkdZhV2iQaLmrkzh843I+gkdFOGt2Zb7jeozm2XKlocB0HmAGi4GiBoUbv82O3EJreUzUTtT1mOC5YQ2NdZTTiqs8OKquZDmaaHnXSipl6LBvssUVptExUgW3GzbTNXQpgYYpall+sgWvhyURNa66rJreD1EPzwKwVNorkA9s8VaV0mDonTQtkpS/hrJ5TLWGy95oZdTR+x1ucDnyCS1VQqo2Wwz4o2z7ABo8toNssJ7yO1XvGr509r9TsaGz9sYtYW+gCnFb228q/UrE1t4VMW1PNhJKOlEHxOOdWTXvShvvRwTjIZ/PV7qr1Wl5KJmDFU2ay0pwOwIpSgdVELZmX/k5YfplBoVi66MZJWbZ5LyMXjiKtz7TBcvJhYVGAfZ0a237PlRmxr91lCFIXfyAEL2jlJgQZKpC1HjK9qJWbCCuZ/8tryf1W/r5uI8F9TSFKv3qp4dsM3XbSMm85w4tOBVaD1LgJ6EsPBUrGEJain3Ym+Fbf63d9319KYLqUh25x1uZ05D0dbpUm9MCpwFonI4TigbvadAf3phODItrUtYZDKEZPWJKz3hRyD0yo0kAisU646Dcde7WpO4y8o1LdsduOE+2d7lL2Tbhzmep7VtI16AHyV5pBq/LZiKuUxh2wexOEIMGVT0jopKcbQf2GVKb3Pnehls4SmfcyhBIiuG3C+umHvwHiPUO9CmVuZHN0cmVhbQplbmRvYmoKNjMgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAyODE+PgpzdHJlYW0KeNptkTtuwzAMhveeghewSlJPAoGGAm2BbkG9FR3s2M7SDJly/VCWbBRIYAvi66fJz3AFAtSHILK+CKeLep96zvv91sPrB4EYCRygXzTIyTix0E8/B0TvkYJDkoCkLUgEaZgQLSFN9jE+zkhO44RIPmWmg9rzmmMecsdRtOsg2bWEHzPhaufOampR8UDV51Qy80nPqPJlteu95N/+C957uIKxkjzcyuTORIxwARfS5vzBNxwf1v6v6kLwJlrXdLtblU8AdSFGk1KqiNp86zwsbKJzWlPpsS5i57pUITVM2be9RRoM3aXslLvgXZMUoEHLZz025qhFo18lxBuiqXKupU+42rB/h7nFSs/yY5Rto7fxOL7cAVlJfK4KZW5kc3RyZWFtCmVuZG9iago2OCAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDU4Mj4+CnN0cmVhbQp42rVVu27bMBTd+xX8AbP3QV6JgOChQBugW1pvRQfbkrIkQ7L093tIUYot20UfqW2aIimec+6LdM+OHeHLrhH8yB2fMLpDe7jon51PydT9wGiTfLDonlywdh48uq/u3n3Yufef2CWfTMztRhdEfdDGbaTxbYpu13/riISJIuETiPZGdBiIFHP7tP2++1wgOHgNJhkDjyYKCPWJuUKEFhDA6Pu8tWz7uDtXaeLFmllmHZ3pPCEJDDuiuA2TeaskWZ+ga/F3jFnnTLS4xzMMJUAr/tXYfbm7MvnycIUSErmZ1gsdj2CTkXg4XtC8AZ0EL01YceZQMELPZsR7+HJUYkQCzzc11L4w6EmsYQ/85DWlio1wxm6CBzTrAGi0lLZIB+0mvx44t3kmJEgJxDTmDLkl4So1TOXQVGpkU8Yp5gS0eIBr04LnhbPHgqbssbad3LiefLnCpOQtxhXdYhpo0LZpslra/Wz94ggYVpZynBEJ7PorP5+VUz9sOXSTAuC/jaFiPhKvqIqhOZa5pZwynOlINJa2xPoPTf23KhJLvtF2XUX9f6ki803gFSdOoa1IN6d3cUtJu6my1jquRVRz5VhYDp6SQ4f4WjkZCtA5uBs1ncor3Cwv+Z3ymmYRuHn913ackOOMQjvM51Xtx0tEaaciRAlMKVrFFUi1+loWLdzNRbRlqu9miLKdy1oVkJGGvggo/YgsDOFVVHke8vPa9bggNLWxXhAWEcOw3BB1eOsqM0LocZVZg4po53QrnBcH9v27n3GXnMgKZW5kc3RyZWFtCmVuZG9iagoxMzIgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA1MDY+PgpzdHJlYW0KeNpdlF+LozAUxd/9FHmcZRk0UZMWiqBGobAz+6dT9tlq2pWdRon2od9+9Z50WEZQ+Hmv955zTRKWe723/czCH25oD2Zm5952zkzDzbWGncyltwEXrOvb2RM922szBmH50oyvzdWw8Pj68vtb/fXnrW//To3tnovhvXs+vtVcss6ckfp2Hw0Tnvf6cJ9mc93b88B2u4Cx8NdSeZrdnT3l3XAyX9Z3311nXG8v7OlYHujN4TaO7+Zq7MyiIMuoHIe2dujMNDatcY29mGAXLVfGdvVyZYGx3ad4ovDZ6dz+aRylJ0v68uTZSiICCRAHxaANKCGKfSwlSnxMgrYgRZT6mhtQCtoSKd9dgySoItoIUE2UI7YUI0K/FKpz9EuhuoCyFKqLCgTVJbqnUK01CKq1z4TqCspS6KxjIkn9eFSDqB/n8CdjkAIlINSU1I/H8CAlyGcqkM+kKfHE96Pu3M9M5iB4lwWoAJVEEqqlBvl+NE+uME9J8+RbxFQEQk0Ff1vMU8Ffjnkq+MsxMwV/BZQp+CvhQcGRhgcFRxrKFBz5WSs4qh5zgeNl2fr1yR+r9bG6eUV2eY1qceSzEU8/LW4hYCSmNkLkRKIEQYKIQfilgkYlEpQX+n8x625az4CPI6C9ObfsSTooaLevG7O35uMsGYdx/Yruf/PzFW4KZW5kc3RyZWFtCmVuZG9iagoxMzMgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA1MzM+PgpzdHJlYW0KeNpdlE9vozAQxe98Ch9brSqwARukCIm/Ug7b7DbtHvZGwEnRNoAMHPLtF+a52VWRAvp5PPa8l7HdfF/s+25m7g8zNEc9s3PXt0ZPw2IazU760vUOF6ztmtkSvZtrPTpu/r0en+urZu7h+fch+/Xt59I1f6a6b59e9GX5qM3T22vFJWv1GbNfb6NmwvK+ON6mWV/3/Xlgu53DmLumddNsbuwhbYeTftzGDqbVpusv7OEtP9LIcRnHD33V/cw8J0loOY7ymqHV01g32tT9RTs7b30StqvWJ3F0336JBwppp3PzXhuaHqzT1zdPNhIeSIA4yAdFoIDIt7GQKLAxCYpBiii0a0agEBQTKbt7AZKgkigSoIooRWxdjAg7hKgzQy0h6sxKEOosChAqK2wMlVU+kSTt3KtAtCbnqFr6IAUKQFhFknbuozIpQXamAtmZpJ0Hdj/Szq0TMgXBQZmBMlBOJOGSLEB2P3KJK7gkySUeI6Y8ENZU0BfDMwV9KTxT0JfCJQV9GSpT0JfbGPTlUKSgr4AiBX0F6lTQZ71W0Fda7fLuVCn/jSCjQr4fU+vaHuWfHfvZ4bwkc3gFBb5nZyPOvS8dLqhvxfpNiOCCn4JSIpGD0AGCnBU+XBAVyPafJWgTEcjmkQoRQIWgf0tE2CHw/te0HcztRrlfKM1izHq86dqhi2M7412v7zfTOIxbFv3+Aj+oJY0KZW5kc3RyZWFtCmVuZG9iagoxMzYgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMz4+CnN0cmVhbQp42qv/Tx3wAwBey0gxCmVuZHN0cmVhbQplbmRvYmoKMTM3IDAgb2JqCjw8L0xlbmd0aDEgMTk0NTUvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA5NDIxPj4Kc3RyZWFtCnjazXwJdBvHlWBVNdAAQRIg7htooHGQBHiCBCmREkGCl0RKoqyLkC3xEkXbOqPLsmJLjj2JHcW5XpxrnMQzSTzjycsoTdmJnUS241zPmeyLx3mZbI6dl12v30wyL5OZvMk6k8QC9//qBghSlHxM4l2W2P2r6nfVv+r/X9VNEUoIqSb3EIG0btvR0l7Y/Jed0HIFfqfnzpySenuEaUJoAOofO3h84ciZAxfOQf0JQmpdC4fvPPiVjz12CyHm/0ZIeuLW+ZkD9NjMY4T0IH72VmgwbBAHoL4T6rFbj5w6+/53VWegfpYQ4y8PH5ubmf3ZsUuEDB4gRPfgkZmzx4WPmLcTMvrvgC8dnTkyf0Y3PkPIpjpC2ObjJ+aPr8tuPUbIGMxJPkN0rItdIXrou8gmoWVMvdP9pJ0iF8RI1B+JEAvcqFYlEweHDpC/IOQPTPj5kghzP0JbJEI/hH1MYFf4IwJ5rZ+zUI6So4jPXma1hCx16x4pvsi+vfQK1CNLr6j1Eh7566V1K9qfXVUvjfcD8uUV46n1Mp5C0pJCdk0OFSRp7Cli3j6miDv2TiodfqW+MH1QurhrUmHxmS8bgf+5OXnWH4kopKCQvDx4GWSQnx5oUmhakaYPNiksLR2QlK9NKLrE3sv11JQfmhtSxKHJiCLECzfdPBmRI/6Lk5IyMQFNuYJfUroR6i4UpEUVe+aAUg9NWk1SWrG/FTG/NjEpATUXZyTFNDE5DS0S9pkQyiKUnfZPFwoFv0JThYKskInJ+UKhSRHSEoyji88AZfr8xKSilwcUUR4APgoKnW5SdGkZ6JIOLOpnByTsQYr9KgV4VYTpoTlFaIxAZ166KF2ECRZb9XFgcvvk9IR/5qbCpFyIFCQlt2MS+vzImjZ/k6JPK4Z86jJhqqREqMoDMkhcHphR2OxBhc4BFYq+sUkxpCUktTo/95SOzEo4gpKbLiDK9CAn1Zi+bKgm+aGBxkhZ9lXplbowqaPQFJCQB76npaGL8gzqhcuL+FGmiuQHIktUgnbkmUF1iurrPK7E4CniX2at8qGaNGfocrVJAGX75UihMdKk1KYXGRtSDswMNinmNCBKklKT34yPAyAPFJRarN0EtVqoNSkWGKaOi0QCCczBvIo5Py1dnJYUMwitSalLj+2cXNQdGCzElNp5+WyTYk2PbZ8c26E2+iPQbufttvQiseR3TS5aLHmFzgwolhTaLFjywGINXmrholAXaEKIT0wuovCA24GLoF+ctjEiw2Ml2K/24yOwFLClAJyMAP0j0LpSVddR4CIhdhmklVfIxsuUUq4re5osEja0c1KxyAPSkFINxmeSweAGpGmY/otWKyVmMjBwcXrRJqaUd6f8URCTA3izp5oUZ3qR4t0Fcsa7O70o4N2TXtTh3Zte1OPdl14U8e5PLxrwHkgvGvEeTC9W4b0hLZfkrojTIGFZalboPlwgTUpjRaer3Pk2tTNV0Zkod55QO0NpotSm3gR/YeAvBHRJwB/eI8Af3qPAH95l4A/vMeAP73HgD+8J4A/vSeAP7/XAH97TaamXm2lTGqa1Tkt50O10nqsSll4abbU5rTSllCZYhS2wAEak62hRnumW0SPeEMOP3LeWVUtdSkvjop46hybBkSGDbZWSuba7PS11cnozgEeHrp0EVueak2M7cT3Bo8ngRrl7sZ06kbkOEABQvDbBsCpmupuUznSzu7dJyb4WKljwHKB3gU6IKy41SyO48kGWmy5eHJFHwFVMQogAzwruIEup0wEi7QYX5VLqAE0HXjPO0ZSqfGr+YrMsSb0XYbx1K1GkZnUsRQctgCkp0+g0ctsnH2eSIPkfZwnBVxhAR2oEnyxzbHkYlnB+9XqcRmemxg2Wnz4A1pefOQDdLD/jB3gaHdnqZ2aALHDv8jAoU4YZhoE/uPFZYLw1JpFVl6kDLwFK0INl6a8ZFUZEjuKcCLhOqK5yeS7Q/fqSHCRo1Sc0Oci9IKKecpdi5P3D8ghOitrrLYsPmdEkTHZONku9EHKReq1RQrpKKhDjUNtUGd1V5a1l1pqmZLTtDRWU5EuqmsYUYDXLJfVuBEfRjFIcVurykxN+CJlSb6F5sZk6YIH2rei9yT+xoje35rM3eqI/rXSnbjThQFpZl7oItKF9AVPXRQWFNivN8ESes4y2WdIJmqUMi6UZ1pk66iD4HQghJcQ3YMQjfyy7RS7QRfXK4IUqLCRS0GgcAt/anSrJYRhq61IRWZOExkmZ6RFg2qkucEgvYC3bm5UOWM+j12nfBMNRh13pBHhzWumC2xjKbQgELA1DLC1JajyNJqyMAbglfRmcFQBbAaAIbEtfprxlAgDesh1xhgC4CXEQ2IE4COxEHAR2pR8Hr9cP0G6AKIf2pB+natskQGpbAfEoQnsRj0M3Ix6HbkE8Du3DOfMA7Mc5EZjCORGYxjkRmEGcYQBmEQeBOcRB4ADiIDDP6RoA6CCnC6EFThdCt3K6ELqN04XQ7ZwuhA5xuhA6zOlC6AjIeH1ZgUd5TdkI4DEV7APwOAqd13JQexuEUQ3nhAoizkmOQzWcU/BwT3nU07zGnzijgvjEHSqI6GdhHA3hThVEhHMqiAhvB9ze8nh38RpHv1sFEf28CiL6BXhSQ7hHBRHhHSqICPcC7obyePfxGkf/MxVE9HeqIKK/C57UEO5XQUR4QAUR4d3px6t0rJSsDqQU47wixCbOluJwE+hMIPWwE5NgP1ZNXCRCTE+G3HU1IhFaU7ZMpN1pdciRaKc1K7qpK9tp7ZAjDJqzSZoQndZ6mV6W5eJWuYMx+hdMpy/OevX0kwJjxRmmY1fkqxdlmZ3R69jVvxGoju3WX71Hx9gegK9+DveW64GCy8xNakn9mJKYmMxVg1G4x6DVScb9vEam1FrhiXiEGVyprChHE0BINtPuclovR32+KP7Ksuyjn/TBtTiHmQFdmmCTS99jL8DYiUXxwGDOT3C0Pdg3xQCi2wCsJTVxweBMLYpkkCU6O9VhnQ5RfigQisiBoMwmXQF7wAWXoJOP+8ulXvI80OwgrSrNNdDsHoMhqZcC0TXI2H1atZAzQa8DMlmcxYUzdGWzZfIdoijXSBnJiiykxpq/KXmq6y2mlkb6HGcl0L2zGdRDTEt/YKfZ14mPBEk8Fw1SnUA3Ex1MpKMHiSA4YHouJYdHtst6gzcVQx6iiWQyYhC5xDq67Nmsu93ltsczSXY66rIFjR3FH3YYglafX/idUXLYwoZXirc9P99f7Yu47HeeszsDnioT2+1wMaf96pe+/i+E2wtohy2AvdhJgMRJZ67drlIjEJ1e0M0TMIV9IGnHmEj1erJP1V4wGIwHY8kI0GEA6ogLySspMtMONUMiIcvOTHu2k2U7OzjMYvkH9v8OBfHqM6n6lob4o4+Fmuo6Nzb97RP02O7BO/bLPjbgky83DTk+3vCJ+mjxQntrT+w5kEr90itsF3uOJElrDqycCpQI54nAqMDuAtr0U0Svd4wBqbopotMFdeOJZDQejYkGX4o4HQYQWDIhR0XR6XBl2rtAV24kGNsTwEEWG9hOS53Xam1bN3xr94WFDU02s89mqbNsnZz97Oy+zy4UxtlF2elwVrl7Dg2dOec2uuyuOp8huePTJw9++uYk6BTl+BmQYx3xknSugctNR1FweioIJcFZrYRYvVaP2wmI5qwIVkRcSEyF+GyqwKwZ+g/3j4zcv//fUGT/NrH35sKjj7Ir+x6ZnX1knyqqq0++8+DBdxYb0URxfgfML5GWXPrG2uNnO+FYJKZqL8a1F9Gmj7SrVWdGBWRnhP4ajXcRyaDbfHLUX/z1S3h7iVpOym6vpBIT8XnDn8PLl0mJHhPQ4ycNuQS2MELn9VSnE/ZxCwfSnAxJ8RNfpxyLiAZPyr48qaPsFzSCnv8Rzv+juDeAZAxhhW1SIj5X9BdIi0qBK8rnRnt5D/s2aSEbcz0JqtODPTNBFJh43kBFoteJ+nkggk6BaAJjYDLcKwW5ZFpIk5wAu0gY0XrQeaywE66sCnsCg8p2dfIVCapjt0XDs6fnHpudfWxubpPFEvFYbNn1ucN9fYdzgZxnP1L9WXpO9v1Atm+YeXR29tGZeqPP4o0b3f1H++GfyXgv+g5Nfn8G8guTZC6m+YZ5Uc8qvANQGyYhe1y2x7VVaFXF1hmpkB86wAhSx2ajsYA3Vnwu4fXLCNG+hJddifqvPoN0/eIXXKYDeP2nf/LJKg3gG6+AW7Xn6rgZqQa0lut+vjSqXB7l6jMaHz9nT4NvSeTkiM1s0hFGN+sgqDDHGC0zEiexeHNcb3BXsGEFX5cUE0nBWsmN2w6eL8O+EY8GAvKjJp+51md6VPJ5pbjPEjL+5H8a/Wb2NEz+NJoF/dCrNRZKLTVUXzzgjwJleW/MUlNcpNtqLGU7fQh4DJJYLuI1sTWpC5JAPLGSuiRdSRXFOzsTkn1mv1j8YNjrAdASNNDDYQ+7InmuftknVxnp94u7PJLkYSM+ucZUbKWXPBI/cuU2+wLYrAV0Gs4FcOVq5gneQzNPsMqoDtZJTKwwSbDIZlZhjeBxX5h8eGbm4T178Dp5b3a6d8NUZ+fUht7p7B8enZ5+dG6OX/NHcn1H8/mjfbkjeZUGlEUGZOEAGsDTilQHEtIRXCtsn56iTDB1puNOiJ3OsDMU9AOuTU4YwBzKfqzC9sCXoTPj7p8+ckt39y2ZS6gq2feyPe52x+2XLrErGxY29N664WmuHbCboiJlAoFM+B9LcukWakAuWTJMNudGGjxML9LNRqoXYRXrzoO60LWcJyLcRLpADAZhCuhdXtZe1GC+v2cdDNHZlI7F4lWwWHQqsaDHBC7lclTtamZlsQICMOZyq4t8I8sQTcAdCXX5s5/H8jOJ3FjCK7lq6mprXVaPLM9tPTugSj5/59YN7qQ33Bz0xqyix2G6+t9VLagaCcRcwU7J67LU4jxxd7I2bp1/aLeqnN0PzVvdQp3ZWmcx6+0m2sXVpKpM1dXSEnsQdFVPMiSby0QgDMZRFJvB04NZ6+k8KftazV80NDRkGtrbWjrlODgMD3f8anBUI/QKn8sjJPDuBAGwZS2yuy01lrDHMdqS/mrQE0yBL5Y6bunKpvpEQWc0fzXqckVtP/3pXp/ZZrFVN5yPNX69pNju2Q3tU4H05jpL2G+guui6SKAl8L9L/roJdMw5IYKO6ATQKJoevQu4YFOwGgJjPNJjHAvqcU1mSLucaETb80ImluQOuF3VFRCbLK0Od8lho8pgibhDjGv+5eNt/qjHbqkf7+jePrHnpwMnhvuOxYNRt6XGty/eNzQyvnuhY+TMoCmW8gTdck0k1B5vytRKn+/b15YIu0NuucoptyRSabOlZXu+byoDfIRAMTtBJ5B550IodAFSAB7s+KoBol3EIcsxzZFgoCs5ES2CRFh7NOr/ZCIQiH0S5UavgO/w+cJXf8Odcw0uHqL6Lcghz4BfDeNc4LC4d2aslF+rsQEcxrLTUn1GOVfVbJm7rd3S8Pnt2y8MxwKeWONIQ2qsKeRjT0Og/8iOe0ZH79lBb+f560dax+rrx1rp7X41ziK/D7BnYYkBDU6wProZPOdynOCrz5NM6rh7AGMTgIgEOHRVWSVXPhcXf1sl2axB42/19U5ryPidp4whK3sm6qk1X33G7qB2Gxs0WfwRh72YpD+2OXDuOpDuIzB3A9nyZDxYIxBIWseUICTwdtigcFclCOGSD/fnXJAvQhJAzmu9WkchVwtUNpB6sJgk5iAlOg3gGoS16HVnNbqFMw3Ct8SQzSZVve/9QL8tJH5LaPA6JPHD9xpDdnvQ+PaHxIiDPRsPVFVfvWJ1UIed5otPA0MOKxusrgrEnbZiL+22OcE8bMXv0udsfE9CIElkQ1yuwZzPbgKqQbKMLgs2Vg/bHNCrQSgtWo1Et7uLq5cNVb8Y9Xjlv7c1uANO5VFn0BNjR6zFf+B2RBl1eNw+OfAfvw7FfKqflWENNrMIpGNJ8p6cyQ37uypwIwyE6gahevk6FDEwhscMmExOlUSrbpuClQhIJcfiMSyI+6gQZKRMt4cjqEa6AqFQyDkCAUICyUAiKmFSmIjFjSsC7oqg5+YZDc+U+bLOsBrcOEaod1fL0PH+3LF8685g1Pfum27qz920vZ9FwJgLkBH4gg0j5ycmLozIfgqxJj81Ojo9PTo6xWXQDzIYZy/DTqieHMyZvLATMmkyUFlkzIVxRQA3hMa1LIcgmpgfWnnevcARV/QCe8EgQPXBpByBCfzxeEJlrxyIVuVswKatgj/6sMrVrkBpj+zZ3dIGrPUDiyyiMpUMiDwZPoVafjHUVMwjb8gjtyvQMf1X0HGSHFA5iq+1mUIXG67cTflz8iq8UoxZqMAq5MwwSZIk4hBiY8vbQtBZ2fnC7gvCaHuJZVWZ9MKtPmedw15lStaM7dqdb/OITlutN9h9S8eW07n82XEW6Uy7IlUWvd64b2x0qkawGCWvp9E7emHr9vMjZdt9mdvuQ9fabhC1xRXHI8na9htZjbSGDYdhLrTiBQ33rTbilyFX/8hKI/4m7ALvWTZiVRYR0LEEslhQWUtAM4VE6Tz/UEBP5mETJHK1hTEy8XwpKAB/sTKiDlBgm7RQeqICrZCzRCIR2Ps7E4lYNMK3SbBfVMOJ6n0chlUJaswQ6QQbYFLMU/xSze5sQ7Nfb6tzhgKB/a077x4cPZMfOD1cfL+TirrNLRBXevIWq1AVcvhdbmn47Vt23zs0em7k4SOGxt5S3KEK6LuRvHdM8QOHIaOBiSI/B3CNCRSPmXQUj3HUXaa/ZO2igRhEct5IDYbrI4O1a3jQDP0gk4WKJ1QsUDVEIKCgwSHDlicmVxn8IAdneQe7KrBntLMo1QoSMpUCN+NG4GZcyVmEsgsz8a6AQ18teurYuaS7JezxhIuf4v56FuHmsf2hsAfyClHVczfrBj2nSBd5V86cBNF5qWCoBv0Jmr9qhEXLBMogOQZ1G8FwQeFVVMuQg+V0wYvOq76EjHggAFD+2qiFnCudJiTdlc62t8L0jYm4XB83VW5AMfnqyi6nY52vYfWu6EdPhW5ztQli0Gqq0t0c37zJVcgMnxzof9tQZtIf9T24a1c+v3Nnnrvx/LnTDpMzbqhyuQUq92Rbw+3qamgMVa9y6XimDsKqAluJkq1fDFOqo5pw3IQvYWiZwlOJcClJ9ueceqputxc4CqtMFKIkEocfLVEo7wA5J9Zr/Dd9epyfBGa7+0pO278jwyJ3HloiXK+kqy+fUWHGU6x/jGWWlkCjhHyRvUCi/HsdAbT9z4QsLfGzyr/j7YLW/mp5D2sFHiOkP1cluY0GnZoNIZ9WNWgJgns5Fyq3lZ1g4UsQj2S+t1TT5aRhZTiylla2wc2sSZfP9kRbiaUf2r0u2fPRL+zyeqOOZ5puW+am+L4X7HG7x/meZ0iJTvINoLN0nuC6wXnCN2SfN8p/y8Nd/YiqT6EAdt9J7spVN0G8opvbYQ1vUl29C9ezfspoEAW93j0GqV6lj/cRbEQUcYp7jPAyRs6DLdBHcBeJ8aHUpS31TtIRV3/4Ur+u9q9jC+1uTBlrVxjEKsM4L7v39axtHStgfi5eF8scbRxctnE7yCRKbkcb57pHadi524aEF7XPVoQ7N7eI1zR/MlUy/zdl/9/aiqw1d68fKLO5p+M6HHKurLEOLYbBWudnIb0qvc7SgUi48kDEjywSdFsLFa2FL73eg5L86N1j43eNjt41Pnb36NmGocbGoQb1+tULw8MX0KmMXJho29LYuKWtbbyxcbxNyxO7IU+M8DwR8g0P5BumynxjORV2a7kGEobSxlcKWr5BsPeaZLISMRcuJ5SVnZogvGq+8ZZkld/kWeU8aki3IqtU41Bp3/DXKv+aQCgIxM8rglopXCOecEX6NKZFoop0zL0qZ1uJuJyOVfThY+VIdW06Fl+Zjq2OTNm10rFoORtr2xkQIp5yOuaGdOxhlMm3A1o+FvO7Q8UtFQGIr036KZ6P/dWYYpuY/GIQk4rNfrjjQi3wxpwd/XB5qZazFnXnBUZA6HH0+NOrEdRtiYbAewjRTasrupTO+LV+XNcEYjsuFS5Unsao61oiYfD/sdIGuHxgIjqvtR96ukFyWeyCs8bXGi6ZjXt3GwRndzgMiaPU3/Svy0u6tiGFcvDC3uNZkEOW7FPJjl3noCc8VnqlE9QD9dHVaKBzAXRegVTIVaXlZErmL3yymHqomQc/Byqf57nLp13AGLqA0kkQLBKvz2xx2kP9zVs7u9dv6uwqtGcOBmvtZpvLbFsXGw+kktnR9vU3tw6ciE3ZfLYqezgkdAdDljqpv6t1JJmI1znclmqzy9fl8luqLdJAtm1TIt2GfFvgcphdJA3lXBX2UMJ9eghCDPJOdAI8FJUObsq5KmJB2klFahDPV6KTCmTIVVfgAQagGhg472UsLYA1kHo7T1VjGMBiLufaGWpFBqu+LaPb3T3xjbuaMUltxog8gtCIy24011S/ze/yxzt3U4fkcYdzqO8cQsVfO+06Pbd/8OUm5obVt1HlzMYPq9zllJK7cd7I6H0VjQX+JhYWLcQb7RBLo7j8WldNLqFGfx694+jRMzyXhj1I1MfckH0cPnfucJHnIRt6ejYAxPcOS0vsJaCnnux4MobnRvpSpuQherA0PTlvECFThjyB4bpRYyI26XX3wXZIf1+5HXZCQGE9ScaTVofVrb0wUk+5kglIoUQDP0Uqnx7xHMrt5odez0V0HxfDNmPUumu7NWq0hcWP6yJ+R1A8vK0u6XQbtxwSQy5gw19lLh6wOSmLvfJKjFGnjX6iusYbt9uLP/1h3GZ/kUp2O7ezpSL9EfAVI+tyVRBIDfw9i8pZrcANp5z/8XpF7hdrjK/M/cqn4cmVx0qY/tEfJdxBx9nTVV6zM2F5zwdq456g4+0n7EFPxHzxA9sc3pjvwx+uqZWcDtvnHq9zeGXvxz/qjzhd1sceV+2hm9tDO3lbzuSjgh53LKUTllhpE6KpANb3WnuVWEkdpf3NWmiqdtpJWzwRi9XHNe2s3qCEmLpBWXU2io1W1bAePB0dKW1NDHLSOZLvONoxkUZb6+rsWKfZ2p5776iu0jYlgrlqw2ZTf9uebhpD81sifV0b1lHC36nh3vV7rBYsfFDl2QWejO3j2YCu4k2xP+fA3TgY23xls7oqgiTQkejAVbH88rYj22UvnSLzFWwQMvQSrNTiM+6wsfpXX8dVSztcYbH63188Gva4pYjd6rbQDlyvYbfFaS5+B/YeeKa7G/dLNAsTAcX0L9W9Bnug/J5qI39P5dfec3OBB/hrbjqFr7yDdLwOHE6dv87ncgCiOSHyryUSlW9W5GxFoP3ZnRs33rlzJ7/mNm3K4a9p72cOHfrMXvV69tyZM+fwl8dUdCwRfs5en4tDbgGGji+BIFU9L6hvqUrHzy7ijMe14+flt4qqmLrApslSFM/aN1qsXtlq/qjVx67ge0sevX6SqEq46wLGvVU4Zwtcfg98N5DmXAqmAk+rO186FkHudbqK9+vga5NyY4eovWXRNNTVVWK6TENZIAZDhv4EtfV5X8j2k3gq1xjs8dgCrrjDkTjQPHAg29914XtHUVeS12v/Rf32aNNAUvJEnZawI9HcPbtxwzt67uf+7RX6Esimg5wfU8xgX00QHPSC3iBAcBCoXoAQikGC3QWrRtwHYcKx0hVnyvgQeSH3hMBM9bobP6UGmA7SAczFYSWpO6TlV2zauxnt5Vkl/12VJmsw0KldzQNnJ2Kj/njU43CnOsLdcn+zIyT4rC6fqebhb3Mjbg9JnnfRr/TOdG06st5mcUQ99ZZIuCeR7TVSY9htdtX+DQoq4vd4HkKb3QuXUyCTAOwnQHth/oWLHnwIvjxUE6LldzShICbSCQiUhnI2VHo31qmqkapuIhPJdLKdQFAjRsXiq66Ehfbaw95oY/HKp2kaSXgHWtI7ZI/LRu/zgJv42+f5d1Kgo6tAT5YM5/IZKhjw6x+BCjoKFoUe7S7QAUjfIGAY1+8rfd5S8ZlClnTGumJxyGZWy3otYZfcebb8OYVswExu16EN4+c3JXf4aurCXpu/UWoYTW3OuGNem7M6GaFhXcRNIyjy/7Tb1/voDzfc3p8/kfc4TbE6W9DuS+Ti2cGamipjY9Ck+0+nHzn+YLW55Cfoq+xZvkfK5jI+9GSbwYCALSYsaN+kLH95sXIbU7/ijbKWoGshCNkxrNrF7JnP9d2eGzq8PnP/qZpqXzTo6Tvkbc+FBwZaWvv7W+m3+w5thH9b7h7Z9IVPRAR/0BUx2G7JpYqfGu7oGMZf7ld6l/7ArNyv4Bt4dMvXuBNHfPltFi1/ihXRjJj+S1Is/s4Qsnnj4i+Kr3BjvYVdifhqzVe/agM7NdfSIkpJ/faqFwRVB/P5SAIC1Ybcel8N2uTmymNmvq9xLO8OgZBk0u9PtifbmlL+hD+eSpX2NGVZda1wtYaEqKVKILAVYvtpZ9+hXO5Q34zctH6ut3duXYusdHU1NnR1NbQODLTiL92+o2nddHf39LrpXsdgc9ct2ewtXe399v/VWd/Qma2v7yxKPY2pnp5UY4/2vh4E+Sr7TknvNn7kJlYcKbAp/JIgMFb6kqxS7w31FXqv8JFdy7u0FQzsXq3xDm4IqPMW0D37zjUaVw1hhd4Zwet3WR0/bxjXzkd0VPtYkWeqsDUDXTjxkNwJOyz1ULiyvZCz8ZgXrgt6nDBQbSfGPJuarJY+QpTZqvp8OBysDa680PvDQStCcCneuQyDAANLd5AfkxMQeQM5r5W/bwXq4d+c6rySjVF8LejS7BKXDBeWoWwPzh9Hs0GXr86uCzit1uqa2lDamW63DHfYnXW1IrN4q60GfV2dQ3Z2ZVR9xuDyQbDRMbKNPJgz9VNjlR8Cbilja7BaRMihMXsHiVTTqirHmLmuVjAYjFM1JmY0hsdw18I3okls4J3EaLh1jQc1zEIuOg6rbXzb+LatW2DizcODfRvWr+toj0VicdkpxyI2QzBFDaWNyrJ/qwS1Xc0ykC2lsJWgOoQBnmSJUAsmQv0Owe/wBGndZx1CwOEGIIbNWbU3p/VaPqP1WmRsfjr02RB98lLY7QqcsXtCnird/jMOd9hj1O3HNt5xQu3Ye0Lt2Ms7Ll3i381S8iy5CGbjhXRQ+6JV+2IATQk/Ns2uMp3CssGssJF28lu6lx4ltSSkfSO7C0fcx7+R3cK/ka3u0AbUxsPhdkGcuoTB6tJvo+rBa4Rofy+q/RXolKX3/8Dy/TnCf/fVD30A7z8Yefc3i9Hii/pW3SOAa0BrJNpz6t+V6ncUo0tP6luX//JU/WFtbBQ8xC/xm+GlCWpf+iW7QEzkLfxh7ydj7CT6q+v0f5efV994jN7XxnnT9LUDfU/dgL4Xrp2b2v909LzWj5BR52Y/e2M0sN9en8f/Fz/sZo2P/yD17As35oXteuO0sxO4x7pO33N/Wv2xvyIh4Qv47cwafTvxu5M3Oe4x2Cm+lTo6RvqZcP05b0QPG/zT0gr75RC78wbzb8Yz4VU/v+Tv/P7rc4MfLc+zbtmWqPm17Ur4c5UusIP+N6SLg2+t7l+PbZRsgF6+MS/0JeJ9Q/L9OP9fFK4/99gbk92b8rPkWv9B/5lYXu/c9OXr+x/Ow3uv7Qcd19PDRM88pIWZwL6/SfayPFnPYuAj15FeNg6/sf+//PgfZT1ZyTDFv4yplMUXISf+HVlPH3zdw7TD70ZymHyMfJ963mS5nV5ZUV5dXdjgGyr3spcri5Aol9H/UvkYlP+xdtGF/kjlVii/0e9dVZ65bvlNZRGzb7CcEl9aLobADcun3lwxmo3nKksVWVFOvMHyG9MDK8pL5fKr11F+j6V6Ky/Hrym/r/59zex1yuU/TqnthvK8eXxVeX7tYhldVT7whsurpVI3Uff31xartKq0lssJ6+dtxHbR9n37oP1T9h86co4/f8vKr5z1WvmJi7zuUo87MTZEboXd2oeJCDu2RtJD3gMe6oFaF/4VBf9Pgw5CmKE6PPi28ZCDMCU2qKkwI0Ya02CBtNO0ButIgO7XYD3x0XMaLEL7QxpsJh1UIXlyjBwnd5IT5DayANScIhL4yVbSBkUiO6FlHu7byWnonyOHyEkyQ46SA9A2Ac8cI7dD/xx/qh9wTgH+MWg/CfV6PtopGP0k7C5boCzAGIhxmsySZnjqGDkCrep4J2CcO0gTYM8A3mHAPArQHby3ZY35h+F+BNoOA+0NJA3z3aGNLpGbYKyT8HuCnIEr0joMcx3lVG7lzwFPUuDaUaUg0HXtXAPw9GG4Z6C3lZce4P4gGYK2njXwm8pPrCW3Ut9uTuFJ6EfapIrRbzRiSaaqRE8CFmruOLSdhOdPcok0cx0sQP824BxPL8aeIs/fNLlI6fsKClX/w4bji8Qw8MRIJiyQRgSfXG9MGG1GwajWBsVWMSDymmngivlrVV/TfQ0MpwrqtQNXSI4XXhfI4GKMPrB9Usk9MLkoHBhcTGDtK8Z7wMxyD8ztnESUAvw82WusNzqMQk3jU3TpnYruvYuMDD6uPyCSwcH/C7n+2EkKZW5kc3RyZWFtCmVuZG9iagoxNDAgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMz4+CnN0cmVhbQp42qv/T2XwAAAVq1EQCmVuZHN0cmVhbQplbmRvYmoKMTQxIDAgb2JqCjw8L0xlbmd0aDEgMTkwNjcvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCA5MjgxPj4Kc3RyZWFtCnja3XwJeBvHeejM7GIXWNwnD5AiwAXAAwAvEAAvUSDAQyIokhIpiZBEkZBISdYdWbZsOVEcy4ktJvFL0jZ1GsdH7Ob8mi7lOPaz3cQvTZz0fXpxkpekORonaVPHX47XuLkPgu+fWQAED8lH0rRfMebuPzP/zvzX/PP/sysjjBDSo9sRh1rGJprbpsrvj0LL0/A3e+jmc56ujxIRIVwF9XsPnzly8ua5N16A+scRMrqOnLj1cOZ/fbgXIdNVhBrOHJ3PzuHPZ/8PQh09gB87Cg3iXwpnoH4O6r6jJ8/d8vYK41mo34uQ7v0nTh/KPtb4zM8RSgK+pvxk9pYz3AumcYSGJgHfcyp7cv6Wu8buhjo8Tw6eOTt/pjM2ehqhbV+H/ocRTzz4HUgDfQtkClrS6h0fQG24Geq0i/08CJnhhvNVNH54YA49g9DvCPfisoAQ/wBu9iD8Z7QP/5Y8zR7h0Mv9eqB0oA6KT/6FwDjLHfwDuS+RZ5d/CXX98i/VegEPnVruIN+H9t/k2+9Ybl1VL4z3Evq3VeOp9eJ4Cgp5FLRraiDj8aSfQKYdaUWY2DultLuV+szsYc/CrimF+LP/U4u06NAh+aDb61VQRkEpuf8KyCA1mwwrOKR4Zg+HFRLyzHmUZ8YVPrD3Sj2WUgOHBhRhYMqrcP7Mzn1TXtnrXpjyKOPj0JTIuD1KB4U6MhnPooqdnVPqoSlf8ygttL+FYj4zPuUBahayHkUan5qFFg/tkygUo1Bs1j2byWTcCg5mMrKCxqfmM5mwwoU8MA7vzwJlmtT4lKKRk4ogJ4GPjIJnwwofkoEuz9yi5mDSQ3soxW6VAnpVuNmBQwrX6IXOlGfBswATLLZo/MDkjqnZcXd2Z2ZKzngzHiUxMQV9bspafv6wogkpYip4BRFVUgJU5aQMEpeTWYUcPKzgQ0CFomkMK2LIQ0nVpw49waODHjqCkpjNUJTZfkaqNnRF1KPUQLLRW5S9LrRaF5I6Cg4CCSnge9YzsCBnqV6YvJCbylTxuIHIApWgHTnbr06hv8bjig+eQu4V1kofMoQYQ1f0EgfKdsveTKM3rBhDi4QMKHPZ/rBiCgGix6MYUsP0cQDkZEYx0tpOqBmhFlbMMIyFicQDEjgE8yqm1KxnYdajmEBoYcUSSk9OLfJz/RmfYpyXbwkr1lB6x1R6Qm10e6HdztptoUVkTu2aWjSbUwrOJhVzkNosWHJy0UAvRrgo2AWa4PzjU4tUeMBtcgH0S6dt9MrwWAF2q/30EVgKtCUDnAwB/UPQulpV11DgIkJ2GaSVUlDvFYwx05U9hBYRGZicUsxy0jOg6MH4JBkMLumZhekfs1oxMqFkcmF20SYElctBdy2IyQG82YNhxRlaxPTuAjnTe1lokaP38tAiT+8VoUUNvVeGFgV6d4cWRXqvCi1q6b06tKij94aQXJC7IsyChGVPk4Kn6QIJK40lna5i5+vUzmBJZ6DYeVbt3BRCijH4GvirAf42AV0e4I/evcAfvdcCf/QuA3/07gP+6N0P/NF7APij9zrgj97rgT96D4U8PcxMwyGY1jrrSYFuZ1NMlbD0QtRWm0JKOKiEYRU2wwIY8lxDi3K2Q6Ye8boYbsp9S1G12KU0Ny5qsHNgChwZZbC1VDLru9tCniijNwJ4eGD9JLA6N5yctiPXx9lu0t8rdyy2YSdlrh0EABRvTDCsimxHWImGmsp6wkrs5VDBgg8Behx0glx+T5NniK58kOW2hYUheQhcxRRsEeBZwR3EMHY6QKQd4KJcigXQePCafoam6FLB+YUm2ePpWYDxOlejeJrUsRQeWgDTo8xSp5HYMfUo8XAe96MkwFVmktSRasEnywxbHoQlnFq7HmepM1P3DZKanQPrS2XnoJuksm6AZ6kjW/tMFsgC9y4PgjJlmGEQ+IMbmwXG22ASWXWZPHgJUIIGLEuzblQYkXLkZ0TAdVx1lStzge67CnLwQKsmkJeD3AMi6i52KVrWPygP0Ump9nqK4qPM5CWMJqeaPD2w5VLq840eSldBBYIfattKd3dVeRuZdV5TMrXtzSWUpAqqmqUhwFqWC+rtBUfRRKU4qFhSU+Nu2DI9PZmmxSbsgAW6ZVXvTvf4qt7Ehs9e74m+kNIRvN6EyZDSGVwA2qh9AVPXRAWFNilN8ESKsUxts6ATapYyLJYmWGfqqP3gd2ALKSC+CiMe+mPZLeWCuqgeGbxQiYV4M3kaB8C3dgQLchiEWmfQK+clkeekyPQQMO1UFziEF7CW7U1KO6znrddo3wbDYYddiQI8HFLicEtTuQ2AgD2DsJcWJDUSoiaspAHcHroCzgqAUQAwBcZCVzBrGQeAteygOAMA7KQ4FJigOBSYpDgU2BV6FLxeH0C7AcIM2hN6FKttUwCpbRmKhym0l+IxaB/FY9B+isegaTpnCoADdE4KzNA5KTBL56RAluIMAnCQ4lDgEMWhwBzFocA8oysJ0GFGF4WOMLoodJTRRaEbGF0UOsbootBxRheFTjC6KHQSZNxVVOApVlN6ATytglsAPEOFzmoJqL0OttE8zlkVpDg3MhycxzkHD3cXR72J1dgTN6sgfeK8ClL0W2CcPMKtKkgRLqggRbgNcHuK472e1Rj6G1SQol9UQYr+Rngyj3C7ClKEN6kgRbgDcDcXx7vEagz9ThWk6G9WQYr+Fngyj3CXClKEu1WQIlwOParjSSFYTQYV7bzC+cZvKezDYdAZh+ohE/NAPqZHLuRF0uObyiwGAXEtQVvE2+a0OmRvbdQaE8qwKxa1tsteAs2xOhwQnNZ6GV+R5dyo3E4IfpDwmtzBCg1+H0dILkt48rS8tCDL5GYNT5Y+zGGe7NYs3c4TsgfgpY/Q3HI7UHCZaJER2RMWsIeyNDQ40YjfS0RXMCbItQGYMxZpczmtl61Go5X9wRVfpXCuHeHl28jI8hfIg8iAAovCXH/CDQNjtIempTMEIDwGoAHp/ZzoDC4KqJ8EolE6ptPpEOTTrjJHvdNBRuw2yWb3wx88t/zj5S50L14CUioSLni8LA0j4Qo8wshzhOhQAhsmHosVKXQIgsxbTAZ/KyUzmKp91mLg9WYiRoKEp/Qu/axpwA/iRtXLy+QY+RSqQFWoIRGowjxnBkrJMOJBKjw+jDjOAXMyYTjqau2yRqwI+ijBtYG6Oq/I7tH2OKYzl2G/lyPHbAbJzKdzTw1r7SYTkKvVuqABi7lR7Hqbhzda9LrHH3eYDJzAkbc49LqlN3wb70bMBg4AUfvBBhyoGgVQNNHmAIrwMPTwGo6fR6DeaZCqIy1gjQZNq0ratGlTYJO/zgt0iEAdclHyvHmNedtoVYwFZNkZARmRWLQdYGuEWEZu3Zv7GRUH1k3OtLf4+rq+853YQPPErtQLL+L5vVsPZq1GcrvRun88Omn/wpbf4v4tuZb+/sFk7qfUZlqWf0lOkM+iBtSSAAvGHEbcRcQRzJHXA42aGaTRVKWBZH4G8Xw1PxKoqw3IQEtlEDkdVHJ1AblWEJwOlyvSFgcBlrloOxVpADTKJEpOiDqTVjs+s+NSeuTS+MyYVmfSiaa6s7GZh2YOPJjtOB4kb7To9HpNdOTynszldLvGoNVbtJXyvkdumP/raU81onqmcn0A5GpBlSiUaGBy5DEVpAZzXEGQVitC1kprRbkLEE0xAYwLuaj4SsRpo/JjAsTfutTXd2l2GVMRouVTN7cd3/GVr5CnZx6YPXT/tCq6pTc+dMeOS2NLT4K8KA06oMGDmhOh62uUneHU+Lw+VaO+DTQqe50FwOrFv6aL8J1Ml6fZgryCvez+HTzabTMYLSo5sBwsv6MXqkGUp0kAmtzU+qFOOEzmoYef1mCed6TB/J0cJceNKmSgRxDLC/a1Mr2j6B68+Bd00kexh03+XavRREk6QZ62Gg3W31nozF+mXZSYgg3dRp5FLag30V2HeQ3YOqHrQrgoYgFpeEEzDzTgGRAR2BLPoxkgpppJqAU1yQEwlTottSiXc53tMPJWGVksHqWkAqURcsxqDp/qPPzIgQOPHI4eqjNZ9ZI2PbnrrpGRu3YF99Teb7TZjJ/CsAResko1tYAEqJXlOovRpmkYvbxr1+XRcuez1L8U5HgW5FiDmhJBA0eA3IILmRc0pMSJAOE1aJPdL9v9+cVqFVT5eQtA3ot5KUCyVmwzGm25Y3AzWW0mow2/224EgZqW7oC6ETfmvma0WU3kIq3lXsCVRltRt+h9QJOR+k4jZiRRQ7u2Z7+vMIWtOODSHUU7+Tb5JJIpfx6rxGHqlTCHYNFfhG1lNYMykp3+gD9vLAX74IQ60AZXYi7UY+JYGbkKE5lsP5KMxCD9iJqn1ShaeCxgWMnUdJaY6ZJA7j4jNuDDS19XTchgE4XceXzZTIo0XgB+q5Av4S2XCCJ4mIctkDjSuEhaFXL765wasWyFsjpcSlIZZmI/brYZRSOfm7DqDRarwaLFf2sxkKcthqXbzVaBJ8ml5/QWi55cMln0S0+RdoOF+Rlqz18AezaDkmsSVXR1500XvEzedAOBQC0PovGtslaXs4mUGCo46i/svjebvXe3ek0M3DY2dtuAev3VI9PTjxw5+sj+/Y8c3XN5BByfekVFX9eQ30PAMwuYB+nwiK4jAsuayoOG0XjE6QSpVDur3BWAa5MDIhhEwd/JJTKJ2Ap7Bn5wqrV1Kv6cGgH8pGvr1q7nniNPR/Z1dh6I5X5ZWNm5D0xu6R3NfW+FHvAAEN+0oVgiUgtbA2Z7LHg8UJsGz8O65qZLd9qGhoa2hrbW5qgcgFVSTjdctrbrqLgCq4jztjGKRResd1cZ10tUBHKC501aSayqHY09bzGaHOCGTJ17I6lYqANjs/WLco9ve++LIbNGK2p5y9axwU51L6T0t+6OJbI2646u3jYJh7j6/lBnmnKDkQ/0S0C/UcoJ4njEc+giEy9+PXBBZkDjVWm2+1F/Xq2hNhdF7XIgXBug690VqGP+B/Y60DLdSuqayFqHRT0W2EHZJsJ08X9PtxvsBoM0etPWmeaR7sSeWOeR1ObjHrPDIInuva3b9k/tHNrb2X1DSmqJSCaDQ9rdHw92+uz2pu3d0Z3NDQGrQW8XPfV9HV29lc7QjmRkokX1EbWgmy7QDUSciU1U+Bxsi1QRqoUAjgs5ZNmXXzCOEsPIO1IvaQCpPUc9x3Ns//knWCVGo3npvUya8xYjWxowlwxznSd/h8pRbaLGQZiPhOW54pLgWo7K6up4Zoegciyo6zMvMbsdxETmbVzuF7xFpzPzuV9yNr1T99JPNGYt+TurXtQu3aHTSzryBkEyWlxLz5CkTs/m3gScfQj8lw+1JZpphOKtlMB5QZwHvppwzIetdhQ+8GF1vkDeh4kcMz+OYwRxKkEuSlFZjN0i3Ltt5NucWVcm/s3f6Jw6M1ScBsnCfeZDOjtEfx/8tNZFPmkxgS/TSXb80dwuO9B5uyCYrJJu6TP4YQfGel1umvTY6ZoJg50ZiB7cVQgd/QQ4Mw2Ph9NK+fhUoloABZWlC9ZWkxZp4DCTp9yd8K7tp8JlSMwVVeORTMJRDWFRdag66JepRwz4/dpSjxiNrt5IKbckpgY+BReFf8dygIq57tTxzb3H+3rmKqzG+yaamyfa2yeamyaieBm2o15qBKlw7+CFkZFb+7uae2Ena45ne7pm47GZnp5sHHgdA17D5F/yvFYUeK2lvAIDLsoKN0O5KuW1mvG6tp+abR5JdbbrePX7Ayqvqp8DbTodqzZBYNm2ltc7T2zefDzZmd1USH3cB7uaGa/RyabmiSjR9986kr5tsLM5ScMG8mEW/nyjtScnd2S7e2Zi0VnGLLNF0C1+HnQbZj5kg7iZeo6a0sAZHgujkB82jnzM4MonIIG6wKrohmZBkbYCZ6r+8L4drWa9ZNQaDebWqvi+9rZMpy/oFK1ag2gwtUxGtp3dkjiXJnqnz6m3abVGQdR1zHb1zMYNet4kimaDta5q4MLItlu3qv5ctc3vX9M2XS9jm64/qm1ar2Obh3qSx3vBNrvnKktsE67k+xBUTFElDTYlgLf0hYHuZuyHeH04lu3pno3HZ7tBAEV+8TLoywOZTkciCi0QJ+OL7N2tBs1TL8UUxayPm4F9rJob8Xq9Dd56F80UvCw+hUC5oCSmodWxqqsMQmtvFEIAWDaG3Fta9/W2jJTpJckiebKx7Tcn+05s7rkhiXPPHzLhXZq2dD22Wntm4vU1Ooukl+rakudHd97W13Fi+OPjaW04JQONIEY8Sb4LVB9OK5tAO34kiEgU0EUtFkWWnrnSHCRBCHw+Ta1BI04CWpILeNAM/cDvfMkTKlYmQb16A6r3yT7YH2Sd6A7aBKdTtb51u0REdZiFgPx78hm91ao/Q7W0zWCxGLZt21zVYpF0RpeRfLTRf8RiMFhyWbafPGDVG81HtgxY7QaLRmD66CDVoI8Q6kHbEoP1lUTQWIFMMixCzgJsaDRMCzVpLaiGGVo1VQ1zCRVoJAzJargn3B2NwBDBgD8c0BUDVaYTukOzdFTdo1+BMyQGa9/rtsnb47yo4wXB6uyNZeYrTnQPnE4kTvdvuQFc4/v3tLbuicfoNYaXrabc2OjpLluVWdRJAifqyud398Y2q6a4JZSgbjKa3bx5NlqwRIzG4PJDWHcyCicaPWo8z1YTxvyMhrFeGoLXQgS+NgRvV0m2rvN4+F1TVBe9ycZ0U9HHzbYR7nWZ3L8yNbj7dtSn6tQK+RDzb98KxtHyMuqD6f6cPACxBMyORdDQs9CqW8T4ieVlJRIEHHaO8zB5EHA4ds5B0FeZL9wFl58AT14as3vKtCKPaGLBvDrdxfKeA5y2zKtxIDWgOnGNz/bn15RYhn/i1Bl1304XmMBenUFv03/hG0Go6H+Y+MsS+jt+I9n1Bv3fvogKtKB3Ai2FMzDXdTKld5aeganDLU2pOuKSEE90oFs/EW1mIY66k7noQtPMaEWB02jK0hBtqC4xrbRCbyWijRRFABQiCCUYicpV7Yg61EJnRl2GHSgOEqL6psvwOvreSP1O1axpaPWTXZSlLQUj6Ek0bAsXrWF/pGvS5jzTSbjT+/I2UZ6cqB+oz724zkDwM/Ta1RDriIWSBdv9OaxZGY0/ppquyngZ03LRgmsKFuyGnpVGljzlezIJ46szb8offt8em8Fo7esPbm8pMjQP2/bJvblvMoJllfpvr1APEfTKflcHtK/J6WpeS05Xlzw3NHQuqV572jKx2FQkMhWLZdoeuzAwcCGdvjA4eCHdQzcgug3FZntUGsbA54XBruie253oyAdJbB8VaIpbVhL0UHFW4JGXC3vWS+kaYU9Xtrogs8qD3cWwp2kySrjU+eH0+f54U+7XbF29jUY//c2xXFP0QHfXdLR9urv7QDTvs68Vz65wUVMSCqRVZ71BPLsO5+VjBusrj2evHTNgm3HpHLMP00rQ0AeeOrw2ZlDt/SzwuwldfMxNd9A8s2VFr1a0bXXTVZcDpCkY7JxcXLssClvzCsKq1cEkQ3dldXVsQtX+QK1j5bCuVuXTuVblcbzTY9Frqo3+bc0FHZdNbyF6iwXyks69Tb9aWQ9TnWnMeGuEeOjDwFuEnftunAPXpAsnwJACB+W6YK2PnvvG8htrPvetW3VWJ67kvq587gsNjUZBMkjdB1uGkt0TB5rG2oJ7anSSqJe05clAc4oMpNr7g0e3X9h6QGcUBWk0HGxsNDtTfQ19Pq9PNBp0gtZdFQrVN1qNnq6Wvu37GA/00C5CFiCAyaaVMJO8htdcAh/Lcfy0wDZTqqWCYN0QPFGEwpHXKkS0glcMiyAm8vlq7dQf260Oym8h/Amsj4oKUdOjVWWCTaMzelzuxrptBqvVsI1qZE5vtRjwZ3OLAbfGLJnsUhvojUZI7Kj3tE1vMDObW/4N/hH+PXKjXtWabDwkFZjFdQU/5VYbCb5U0phJGNgJb6Xf79esXjeFFypMYbSGv2k9lZ09SckaGRjcDsbxe9hJXzh4ww0HcSXbVV/Ymk5vpbB6XrIM+7uEKun5ggsXU/6alZS/ElXWr6T8NM8WIMNuL0mxY2X4Wzb+M7xZK1n4z3IWM6T+H/kob5aIzqTXaXPtWj2WJHyVaHmDFZLo4/gvdHrVVmF+chXmDxTyfrnasD7vrynJ+wPI768LlBfWDiWojqb8BcJK6FKPJCLkKSv3VxqLTmfiL91EibRy93M2o87Mvfk8BCraN1wSXESymLAh1w50STrcnrsKJOt1+KogGinFr8NBuz33j/jtDnoms/x7/GnCwx7nSVTXVlggJiIgNky9fJ5OX6NvdTzEtNUejxcOl8riKxHRp20Gk/4979GZ9TbxkQ8KdoNZd9+7JbPRLL7/Eb9ksJue/ZzBbNBrv/yPWslgM/7DPxjNer32q19VbaoDYk4takOJxOYKrOENYDuEnvzSNwUXRYGURtzVRVOrYLJsQ61gUrX1gfwJfT7AVuProh+ICuttLW9s37D2nhpo3FbuJJxJKwiJrolsxYH4nr0sTEk1pCE6IVqwuaGxM102s9FCtJLEyUf3yo2RoxkcYfb4ta3DDakAbgSDhNwbmLpCBDB2fwLiVUymERUrX/ISSF0K7f52uhRW3ry0x3HhxIsJFnvxfRaLMfeU0aLD9b+jixVHDBYtaNHUQRenXTJK+K8oZDPo9bnDiMbKsE2RxyAnq8UxGgfjGM4W2vEviu2QvdF2GkuTOhZLk0IsDXtpHOKRKnbG7M6/y2Iir2KvsvAMfa0FibQFHJHFbal0OQDRFKDvslwlgQnVBNsB1aPGyDdPxGMnx8ZOxuMnx3ZPT+/eNT29Szrw8JGj7z8w/fDRIw8f6H3o8sJDDy1cfoitK/px8k/JJ5ELlSecFongrdAITiUfrdOA2bbiRfLmGYvHY2XfM9tNRtsbRNEIzvHDkglWjyF/vr9tmHcYRBN/WCB0jlFgVgI+61F7orUS7I4mBpjHhL9YSLQpzzxforl6VFcnN7bT1VuquniB1SIlhXMSUfTi34DucpdNNu0POmI7t7Vut+vNeodWqDzaO3+2Z+AJHOmyGoywI+ql5Z6Zpv7R5habRRIs2ljPqUz8xpHn8mc6XyZPw554Vo336wpLBDJnsC4sckdglQjTSBAcqx1yGPZPzPEYmKIPvB4egE31WvjqBhNBbe1+L335pQb8xaCu5Gy5EN7kPYO31HjFCI5lu/vO9AfHq0w2g8HYONyys6V1LGQIaAxm6VO5HzJ7HreYpccF/FT7XH//se6qKslkcOrDofG2+LAswhqUvkJPd+nR9FWwS3qWTNj7F/YWrIa9udaAh4CABYKDI6j0XHlTNQvUYJsUi1GKnI9Povn1pvqDiDdixS8BOSkbfX34TYNNxElY9NZU7n/8O7bQBfYkNZ8ngQ4t/msDLPmzOAE6iS/n8HeAnhgaTgxFMCf6gCL6Zv8a4hYEzTTIfEXcqknFUNQXl/1y3TpZF4RdkPaKfcXpSXXh/ahIE5DNR7r7zg03TtQIohXcQeXmms5M68GdNVFvuWi24yABcYep0HMv1lYO+fGXOo8kBk/3VlXyZlGy6xwuCLdHpm1mg92o4bBFMtMXqs8Zbao/wL8mXwJ5BtH+xyqY2NWgplIDoSfHE2COvoOi0cqK3VXSSPJSEaO0M5Ows4A6WN3oq6V6ql/1bigfSa8cZIkseVgdTs/NRDvnetNHI1sXZrQao618/O2Vm3a1duz1D7a0jzbWj0TwU4lj3d1HegfPJnf9/cM+YjE7td4PHpAbcjdNbwuPtjSPtYSGw2r+E1/+FfD4OZY/xBJgEJRJ+maLvmE9wiJg+marKq0ysDodaKgvob6gIaC/JClYl/pMH40MvXVGyxvt5TvfWlG9q7X7QKxzvrd1tAEob9ra4BtsJZ8Dyic/eb+P2IxOrfzefd66LTdQhnLnm8aagfTGkZbw9mbmL4PouziEvwuueNPG38VQH00/Zomt8dGXu2W5u1amV/m7tayiXvNygeudEMfQ3BT2Aur7mRJZ0MfN0B3Byal7QY2lutwJiMYo3Qts6rc3LPqkS4+sqW+z2ayidfUFP+SwOW1O+M/myM04bC6bg11YnHUZ3Yf6IJjrfsyWz+8lsEAr4/V0IWeGpe+mDgyjO0uaMo/5g7Uc7LYuIe+eYwWHLebDLed91SGn3iw5NSazQbLoDT5npbei06+HPEDgRLdFb9JJJpvbW63mX+1wfRM6COyq3w0xSeffaFERUFG3rWF5sMgo45DxSsfSLl/Ev+VqIGeoTlQyhQ3T5kt0RPpvg6zIUsex7ZU5rfyqoO+uyi08flQ06yFszW0XTdIdVoNW5KaNerNBp/v9+w0So7VreZZkl/8CGVd9N0VPo/A0m45+nGVE+vbCd1OuFU8O7mXYYjbif6OHqDnrg2aDAQSkZ/lAdDmB95FPQyxmZ5tGVf5gYFM93Z551X+tLGL6wpGNiLu0Fy69+VZRBDKP3nzumMFkeIbvfemehR9t5a2SSdfzzVtv+6dOwaLPv9erXO7DfeTvYR5V1lUl32hVoPJNRdnE1Jyv4DXp7ivIDWbj0ZtvugFCVK144c633CJqP7V6En7LT+9Z+PEQr8oK/QBvx7Ugjk3Xl1MsUNAtVe0wRGrso4Gv/4B+XmDLv5MkqH75APc+iDHGYNX8TD0lt3iwRPxuI8dLSSyI3LCbNXGlTRkVtQWJSECicFEPYQlGEKgfhbpW0B6CfUQ3Y8A6HQhdksgMi94lmuZ74Ln2V/QcOwKgDyP12UQckhaJcNLFVzyt+mQmQ/Wyf++uCeBztM4XCNT7QA9GsbrEpdMYYfUpCTUNlgA5HaXxRPE0a6MvtmzR9gIOQyEfu39H78m+YBRztfOxxlSg71SybdAk8W43bsZuW9OOluG79l5+/o0D7zwV2R4NCYJBILYth4dv/9DoPT9/dzARiU00xRua9vdi8uzkPVM7H5hrCug0Fd2JULopcffeWDjhrhD53Fc0uoqK3ZeHRm9NnXrurZPv2mt2uTiTwJl0Nd6jH8ze+6+35e40tW9Jn47EehPz7fl/T5f/V3Iz5p5fgLTZMfD/furP3kHvXxm6/JncXcv1Gj9/Eqr0VFv90Xfk7N/daSag/4sa/8q/zFN/ZJBshTj0a/SbyuXb0EvLPyZ3oWr0J/yRt6ID5O2o5Zr9z7Fvg64/RsfL47xm+mJA3+PXoe+LG8z92/84el7ux3Wrc5OvvzoaSO7aPP5n/MjkCv3k/uvzQtqQ71WPvx/V/qfx9h4kc8/S7zz+yOPuReE/KR970RikH+HXQg8J/cfSirOompy4zvwd9Nx7ze9r7P3gH/4DP1qcp4zt+urvhRL4Wuv3HSpdJLkBfdfTxcSfVvevxDYKNoDfdH1e8FdR46vS7QQ9E7/O3J2vTnavmjcr8pGfrvc5+PuodkO72oiH76zXF8S/xb2XxNfvw6DjOASOGugbJVoUhjVUS/woTipYbqXiNKzA/x1+eDfko08BT5/ewMc/xnKn9fqRkJa8F+Lv6417M4rCX+W69regLu7qfyEB1LNrL5pFC+hJeqD9msoU/tiq8tO1hXS9qnKBPF9auPpiGf2DyoNQ/nnjwvv+SOUEK19eXTRd1yxn/qDyMeGV/17/GsvPxclV5Wpp0da/yvLnOsuqsr9YTr2CcoGVZ1j557VFOgXl6sZFb/ojlVNQXjBMrimf2LgYPWvKsVdZPmLii2XYdGWD8u/FkqPF7CiW3ea7zc9bZi0fslZZ72Hl//1piq3SdsD2gWK5WlJ+b69fU/bb31UsT/7XKY4naDYL+eMxyHjfhejXdo2oG70VvOW7jC6o01xXiw5D5ox5HXh2G8uiKYyRDWoqTJAJ+/IwhzpwWx7mUS0+loc1qBK/LQ8L0P6BPGxC7fjzKIVOozPoVnQW3YCOoKPoHPKgNsimWqF40CS0zMN9B7oJ+g+h4+hGlEWn0By0jcMzp4H+eWinT/UBzjnAPw3tN0K9no12Dka/EXazZihHYAyKcRM6iJrgqdPoJLSq452Fcc5DVHEG6kfQCcA8BdB51tu8wfyDcD8JbSeA9gYUgvnO50f3oJ0w1o3wdxbdDFdK6yDMdYpROcqeA548VetH9VQDXevnouMdgdYTUD+LIoDTwko3yOAwGgCM7g2eCq95biMZrsbYzWi+EbAotZ6SmV5+9IKsVUnfCLhUo2eg7UYY5UYmqSammyPQPwYSoaeG6SfQ53dOLWJ8T0bB6v8s4MwiEpMfH4rUcKiRgo93aQNam5bTqrV+oUWoElhNSj5tAkfJPwMGpYO6Mfk0SrDC6hzqX/Thu3dMKYm7pxa5uf7FAK09qb0dzC9x96HJKYqSgd/jPeC4HVrO0PgEXn6zwr99kaD+RzVzAurv//8whK5xCmVuZHN0cmVhbQplbmRvYmoKMTAgMCBvYmoKPDwvVHlwZS9PYmpTdG0vTiAxMTcvRmlyc3QgOTU5L0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMzMzMT4+CnN0cmVhbQp42u1aWXMbNxJ+31+Bt4jZ0hD3kXKx1rZWiWp9rY84m8k8UOJI5oYiVSSVtf/9fg1gxOExNJ2wsn5Yl1UYoNHoxteNbkxzAuNMKOYNE/iv0LFMas1EYMp4JjnTDo1gJqCRzIEgMV9pTGNBowc+7jiTlgkRBJMO6wjJpGdCY1AGLK0dUwJrW8/AKZwWTGGe55ppyPQ+MK0g1EimwcKxKC3NvWcYksJCAQP5kElayeAYhqSynFnSRClmSfFgmXVQBUIt+J2xjNT36HuowCEPU5QwEM4NU0pJPGDExBGOh0APUM9Ch0CtUcxJtF4wp6A2pjuNFhtyWCLKwAoOdMEx0dMEwEcYeazoLWCjNnAWQA9CMwdlgoJSEBCgsafxYIAr8CB8CRcjyC6aYzFvmQbKDHhooTAPeAkLxDgYCPWAVsI2AYwSaGMtje0zyNSK00QQFFTG9jQ2yWBOrYBJwEoatncCLdkAUrSGnQQnCmYIAZLFzgSsqh16Ah6jCVMhsHzwRIJhBKAWwsFiccTCZIrmBNgMhhLCw2hYVcCdrIKGAu5lrSHHMbAXIS8J7DgHICksL8jpNAnlHngrOBCaKAmwk/PA4ZzD9iKscQ0yOpkEnIE8DXhxsrZHawk54A6PEXBRLwgQGEo6cnUYAFYzHC0AMmQIWE+Q+xgsC1W9AWKGLAL4QfMuOTweYAYLUZ67eJK8h9WEJGNhvoQp6FzBUvAPsmHQcGGhyBQgkNeR4QSdD8zEWuSZsKsgW3jsTijaNScsyCoSmD561P/p5eW/66slni5uOTM4z68Hg/75bEpD57RMGnk1n129qZdl/9XZef9t/XGJ+cOb+mlqnqTmohoM/gK+L5r89tNd3X88nc6W/Tf3l0vqPRtPf+0/mc1H9bzkUIBX/R/6F/2npUidx2B70/9+9nbWPzu5+jC8W9bzQvSg5mvspcR5g6ULQX6kRQEXMIYXVpkjS5RrEoUtJKKJ8KFQ0YsLJ9yRJC4gZDybFrK1S2+LoMnbdKHI5a0pVFLDWXl0uXJTrg6yUAb7Na7AaSA14LpHl6u25Hpe0OlCdC8UojzpgdN1ZNOqtmm18YWm+CxIBYQzx4ug9JFF6jWRyhYGIUICVqfR16Hgwh4ZXr3tTgj/hUWsROIqKC5p5QpuxdEFb/uTkAUlS6Qb+DHlIyjAj7/jbYfiiA0I48r7wlJqEqoQRhzZuqZtXWT7IuYgU9DNATm9kEodeatm27jK2sJLynW+CIL0CIV0/uiCt4yLQFF45E6hXSGidzkycha8kW3654pS1O/IO38wbW2z786O/0OdvhZs/q/HV6LHlxxa3HaZaA7tu9cX9HdyOxxPlrPvPtSTyexvs+XsclaM6ofzi1slorJBekdUprusQwTFO5BB6PK/Kx/tVOLDcnm3+K7f35IffGHwOqVxqbJCJ/F4xTNQi1t3bFs8G9+Ol4vy5Gx2dfpmOZwveyd3ICOQVv0Xw9t6jeRoW6+bAP8tJjnRHqEBuTYge3gDbA+oHl4F2wO658zagOm5uKdGDxf3taFuovGsrFsp2xDwCrhaQ/Q8X3Vlz4tVT/W8XPV0z6tVz/S8XvVsz5tVz/W87VLM99auc+vK+R7eSR+WCT3f0nTcCy1Fx+gmTfNq30L3INsj8Xoc1MYQZumNIdULZoe67WvRyeL+snVpaLtAe1pwa0vTvSb4jSFIC2tDlJmpWrA+JntUOIhjbdEiTpbbBBkJapugIkG3NviP8WhRuqgXFTKoCdFesYyR55U2PvZ/+tfPVLEwThW4607vJ5Nqk6YdhPuGpuSKRkUNh1Tf0LRo8+Hd/IHgOghGdRFCB2Fdt04Oo1QBszdMe5RuL7hJ69JOmQMIW4v5w5Dbouk9NNdNM3wPTe2h2T20cBgtvdNwt9sBDF6prO+g4R1IiN00rfD298An9KG6KOQv7TscZc3zN/YAmu3gU0YVeBHfoUvbIXAcz+rFchELhzFHxQw6Xk7qR9f19TXnGm8k1nDuFFr8gZfbgJbjT6dni3m2HuyphLwazuvpMta9SI8XSH2x4LZbpM1iEJbsKIt3SUwcvxzsLUg0wtL6jTC5WxjWToJof5f52TV7HuytQGwIejWvf4sVxpZU1SGVkPMZSdoS+nKUUCUNaIzQdaBLntEnlG0ed6t51gz21it2a9kFh0pCSaDLpicbRCVkhoUEm5byZmUnW2cF1WBPmep8PF8sH6B6Nlw8QNV/OruHsqdq02WS2jy0wdUde2jc9cGUgz11lZ1y1l3HdPhpSPuORrteGU2TfL89robpT5MhCbdhxixjreWGK2Y8yTlMg7PLuGee5pysH0XYS63+TENrrev0ptNspvm253TFBtU6lKa1wT8RmAfeUd68zs55leZ9GXCDvaWpxm1d221d223FCjPT9iB/XA/abdEWPZ/iCJJKoSZuOHtHBCKDbBpgckii6Ns2apTjEp+OxtjnOZsh2H/9nnPY8VivFTaeENqeEPZ6Qg4stuUWkv+5btG1rrEZpat8dkw+TyLNbQcT/E9/ImUssqQzrYRBlhjtcxG17iKdIHz1LvLHge28YOTKcHYz2c6TufMZN/vMuYsbtKvDHS3YlUp4K4ravHnZAkrtSbG6fVpsexv8gHSfr635tMjP7ynqLhrjDvbWoh8cULaFdN0pWhuPd4vPpQyzfkXMQtK2ZMetUIvsotfZInqwp37fOIdqo6rbqMoOVFv3mbwIbweyrGtaxKR5r+vF7H5+VS9YmhmLbK+GN/VqhzZzTZfoL0rfeuVfcedb3ufZ0wU1lgKSvkzkIkFUgCX/Yek0sKQyS1iwhAJ9zRGbxCdTqUGmwoOMq1TryilxoHIqCq9SlXERf7ZfGbThXmQEV76dFEoFkKRpugEzoXeCpXSXPn5DH7Wb3x3Kb3fya34of9jNrw7k17LFvwWg3g1gMnmqaLBUvGCpTrGtiO1SJGwoYnbzh0P5d3u9kQfym936G3Mov/5yIFP9hqVSBktVGWZ2e5TxHYoovqGI28lvxYH8lu/m14fyq1UlMZ1/63aceBsOXc+vn/gUKr4I51S3YqlMw1LJj1mzz2DCJNYcgJqD09i9UbPqP69H4+GT2cf464YV9LFQ8xHC03k9XM7mJ8+Gb+uf2H/Gyw/sA+TM5/V17w/dOjvvzffLD7N5kzebdNYUPHIOpUuFzvUG+ot9l+sI6Ggffy0Z3V/V85OPo9/Gd6Pr24/slxPJpaQKxC+9Xtoaku3ZcFmfnH0HEnJ/vI9abf7KxTecf9NLKLy8q6ePY2bORdPz8bKKWD+fjer+u0X98n45GU8BPQ0+G17WkwX4XtzfLkoec/DZYCDjw3ww0M0IQE6V+PixGS3crLNKumTQB1eINn46XA4nsxvyTg1XDZWSJf2wZaWrNC+dMJUOOEOychJ+I+GntvJECJU3pXSmwm2q9Ojiqlc6hb4C2aBvLQ6PQotxWtK7SjhXmoA28NJKi9aVjptKSlFa51nQCs8ec2wlSSLkS29L43mFe36p8ZJrlcIz5ngLbVUpFVotoi5Ka2iJXWiHPniMLYOUaNOaykGu0NhaKLVCKxwipay0RJ+HSivoBz21laWzHi3RHYtjzuMZPNDHGgVcBK3FFEKBQd4y9E0dkDYuMIPwCz3A5+m5MgZ6OkXfTuLZl/QFmtShwr6QsmxVRfi1S/DTF28qwR8i/NAkwm8Bv4nwSx7hNzzBD2tF+KVP8Fsb4actCxsALU/QW5mg5zpBjkMfbAO1TlAbG6FWhr7E4wlqKBChxpwItRYJamUS1CpDLTLUzkeoDbQlqJU3CWqYhqBWKkNNfStKgyjijMxwA06CnuB2oHsFF7ERdmNdhB3r0lemmEdflHFkJcCP1GiUq3CssQcFmGWpkM4FfWwZNPqhFF5UxpqSTGWxlnG6VPGzU51NwSvEhTLA36uHOEi/oz78gPv04oz6RJD9J8NFHanvXjx//+z8r/+8H1/9uhhOR6dPZpNRZDyrF1fz8R3iXvwIMYbyi7M3nxbL+vZiej2LSeBmvFjOP508Hs0u617/Jf06PJ7enFyMELrHy089SL+7m9S3FMk5zvnZe5hG9d/HLx7zkm9n31+cPR/e9RuuViRfV6T/eHGV7uKcU9E9dk7hS/03UOpH+mQOceHuh3p88yHPevzbzfvxCAEbiMfVnlCIP6WvmE/jh7CKPkwWXlX9CwSU8dXj6c2kZrx/PhneLOjTYRGX/4QY/whxaDpb1I9488/ztX+D/KUlRbMOZAnCmpJj/mUbs8/HkxrWVpsX4DXr0Qj/nNn+Pr2ajYD/A5KnP2SYRkPImVEWTim8/3b2bjrG7JoQ2Cd4t9u8fPHzyyc/tuTDFe4nw/m25/gjeg6X0XPC8T3Hu27H0brlOMo58An6ZDd+das6HMd2+ozZ4zOdsDZuk18nWm6jxRe4Tef6h3iO8Nuu07yF/xf2ZqI8CmVuZHN0cmVhbQplbmRvYmoKMTQyIDAgb2JqCjw8L1R5cGUvWFJlZi9JRFs8NWRiMmRhNzhhNjk1Y2Q2Y2JhMDUzYWZmYTIxZjkxYjU+PDVkYjJkYTc4YTY5NWNkNmNiYTA1M2FmZmEyMWY5MWI1Pl0vUm9vdAoxIDAgUi9JbmZvIDIgMCBSL1NpemUgMTQzL1dbMSAyIDJdL0ZpbHRlci9GbGF0ZURlY29kZS9MZW5ndGggMzIzPj4Kc3RyZWFtCnjaLdK3UgJAEIDhW7MYUEQFFAFzQsSAOeecI+acc2lhZ2Vh61hpZenD2PggNjqj/LM23+y/N3PFzRljfn+jjMWcwDHMibEaI5ZbY8hLOBfbi6aRu0ed5sXu00lgEaIgGm7gCmIgFuIgHhIgESyQBMmQAqliv9ebrbAsjn3NNAiL06WZDiviOtW0warkPGtmwLq4PZp22JC8Pc1M2BTvq2YWbInvRzMbdqTkQ9MBu1Lm1HTCnvjfNV1wADmQKwGrHrihCrqhGEqgFMqgHKohDyrBD0GogVqog3oIgQcaoBHaoAgC0Awt0Ape6IBO6IICKIQKaIJ28EE+9MAs9MIg9EE/DMAQTMIIDMMYjMIEjMMMTME0HMESLMAabMMh7EvwKfLNaj/1ES/gVEL1kV3o/1tcw5mE3yK78HeEhy9j/gAT1DMHCmVuZHN0cmVhbQplbmRvYmoKc3RhcnR4cmVmCjM2MzQyCiUlRU9GCg==</File>
    </Filelist>
</otrs_package>