dW5pdCB1bnRDbEZvcm1hdG9zOwoKaW50ZXJmYWNlCgp1c2VzCiAgICBTeXNVdGlscywgc3RkQ3RybHMsIHVudENsTWVuc2EsIFN0clV0aWxzOwp0eXBlCiAgICBURmVjaGEgPSBjbGFzcwogICAgICAgIGNsYXNzIGZ1bmN0aW9uIEZlY2hhU3FsKGNvbnN0IGZlY2hhOiBzdHJpbmcpOnN0cmluZztvdmVybG9hZDsKICAgICAgICBjbGFzcyBmdW5jdGlvbiBGZWNoYVNxbChjb25zdCBmZWNoYTogVERhdGV0aW1lKTpzdHJpbmc7b3ZlcmxvYWQ7CiAgICAgICAgY2xhc3MgcHJvY2VkdXJlIEZlY2hhRWR0RXhpdChvYjogVE9iamVjdCk7CiAgICBlbmQ7CgogICAgVE51bWJlciA9IGNsYXNzCiAgICAgIGNsYXNzIGZ1bmN0aW9uICBGbG9hdFNxbChjb25zdCBmOiBTdHJpbmcpOiBzdHJpbmc7b3ZlcmxvYWQ7CiAgICAgIGNsYXNzIGZ1bmN0aW9uICBGbG9hdFNxbChmOmRvdWJsZSk6c3RyaW5nO292ZXJsb2FkOwogICAgZW5kOwppbXBsZW1lbnRhdGlvbgoKeyBURmVjaGEgfQoKY2xhc3MgZnVuY3Rpb24gVEZlY2hhLkZlY2hhU3FsKGNvbnN0IGZlY2hhOiBzdHJpbmcpOiBzdHJpbmc7CmJlZ2luCiAgICAgIHJlc3VsdCA6PSAnIERhdGVWYWx1ZSgnICsgUXVvdGVkU3RyKGZlY2hhKSArICcpJzsKZW5kOwoKY2xhc3MgZnVuY3Rpb24gVEZlY2hhLkZlY2hhU3FsKGNvbnN0IGZlY2hhOiBURGF0ZXRpbWUpOiBzdHJpbmc7CmJlZ2luCiAgICByZXN1bHQgOj0gRmVjaGFTcWwoRGF0ZVRvU3RyKGZlY2hhKSk7CmVuZDsKCmNsYXNzIHByb2NlZHVyZSBURmVjaGEuRmVjaGFFZHRFeGl0KG9iOiBUT2JqZWN0KTsKdmFyCiAgIGVkOiBURWRpdDsKYmVnaW4KICAgQXNzZXJ0KG9iIGlzIFRFZGl0LCAnQ2xhc2UgZGUgb2JqZXRvIG5vIHbhbGlkYSBlbiBlbCBjYW1wbyBmZWNoYScpOwogICBlZCA6PSBURWRpdChvYik7CgogICB0cnkKICAgICAgaWYgZWQuVGV4dCA8PiAnJyB0aGVuCiAgICAgICAgIFN0clRvRGF0ZShUcmltKGVkLlRleHQpKTsKICAgZXhjZXB0CiAgICAgIGVkLlNldEZvY3VzOwogICAgICBUTWVuc2EuRXJyb3IoUXVvdGVkU3RyKGVkLlRleHQpICsgJyBubyBlcyB1bmEgZmVjaGEgduFsaWRhJykKICAgZW5kOwplbmQ7CgpjbGFzcyBmdW5jdGlvbiBUTnVtYmVyLkZsb2F0U3FsKGNvbnN0IGY6IFN0cmluZyk6c3RyaW5nOwpiZWdpbgogICBSZXN1bHQgOj0gQW5zaVJlcGxhY2VUZXh0KGYsICcsJywgJy4nKTsKZW5kOwoKY2xhc3MgZnVuY3Rpb24gVE51bWJlci5GbG9hdFNxbChmOiBkb3VibGUpOnN0cmluZzsKYmVnaW4KICAgUmVzdWx0IDo9IEZsb2F0U3FsKEZsb2F0VG9TdHIoZikpOwplbmQ7CgplbmQuCiA=