LyogTkVWRVIgRVZFUiBlZGl0IHRoaXMgbWFudWFsbHksIGZpeCB0aGUgbWtoZWxwIHNjcmlwdCBpbnN0ZWFkISAqLwojaW5jbHVkZSA8c3RkaW8uaD4Kdm9pZCBodWdlaGVscCh2b2lkKQp7CnB1dHMgKAoiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8gICAgIFxuIgoiICBQcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcXHwgfCAgICBcbiIKIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfCAgICBcbiIKIiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChfX3wgfF98IHwgIF8gPHwgfF9fXyBcbiIKIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxfX198XFxfX18vfF98IFxcX1xcX19fX198XG4iCiJOQU1FXG4iCiIgICAgIGN1cmwgLSBnZXQgYSBVUkwgd2l0aCBGVFAsIFRFTE5FVCwgTERBUCwgR09QSEVSLCBESUNULCBGSUxFLFxuIgoiICAgICBIVFRQIG9yIEhUVFBTIHN5bnRheC5cbiIKIlxuIgoiU1lOT1BTSVNcbiIKIiAgICAgY3VybCBbb3B0aW9uc10gW1VSTC4uLl1cbiIKIlxuIgoiREVTQ1JJUFRJT05cbiIKIiAgICAgY3VybCBpcyBhIGNsaWVudCB0byBnZXQgZG9jdW1lbnRzL2ZpbGVzIGZyb20gb3IgIHNlbmQgIGRvY3WtXG4iCik7CiBwdXRzKAoiICAgICBtZW50cyAgdG8gIGEgIHNlcnZlciwgIHVzaW5nICBhbnkgb2YgdGhlIHN1cHBvcnRlZCBwcm90b2NvbHNcbiIKIiAgICAgKEhUVFAsIEhUVFBTLCBGVFAsIEdPUEhFUiwgRElDVCwgVEVMTkVULCBMREFQIG9yIEZJTEUpLiAgVGhlXG4iCiIgICAgIGNvbW1hbmQgIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aG91dCB1c2VyIGludGVyYWN0aW9uIG9yIGFueVxuIgoiICAgICBraW5kIG9mIGludGVyYWN0aXZpdHkuXG4iCiJcbiIKIiAgICAgY3VybCBvZmZlcnMgYSBidXNsb2FkIG9mIHVzZWZ1bCB0cmlja3MgbGlrZSAgcHJveHkgIHN1cHBvcnQsXG4iCiIgICAgIHVzZXIgIGF1dGhlbnRpY2F0aW9uLCAgZnRwICB1cGxvYWQsICBIVFRQIHBvc3QsIFNTTCAoaHR0cHM6KVxuIgoiICAgICBjb25uZWN0aW9ucywgY29va2llcywgZmlsZSB0cmFuc2ZlciByZXN1bWUgYW5kIG1vcmUuXG4iCiJcbiIKIlVSTFxuIgoiICAgICBUaGUgVVJMIHN5bnRheCBpcyBwcm90b2NvbCBkZXBlbmRlbnQuIFlvdSdsbCBmaW5kIGEgZGV0YWlsZWRcbiIKKTsKIHB1dHMoCiIgICAgIGRlc2NyaXB0aW9uIGluIFJGQyAyMzk2LlxuIgoiXG4iCiIgICAgIFlvdSAgY2FuICBzcGVjaWZ5ICBtdWx0aXBsZSBVUkxzIG9yIHBhcnRzIG9mIFVSTHMgYnkgd3JpdGluZ1xuIgoiICAgICBwYXJ0IHNldHMgd2l0aGluIGJyYWNlcyBhcyBpbjpcbiIKIlxuIgoiICAgICAgaHR0cDovL3NpdGUue29uZSx0d28sdGhyZWV9LmNvbVxuIgoiXG4iCiIgICAgIG9yIHlvdSBjYW4gZ2V0IHNlcXVlbmNlcyBvZiBhbHBoYW51bWVyaWMgc2VyaWVzIGJ5IHVzaW5nICBbXVxuIgoiICAgICBhcyBpbjpcbiIKIlxuIgoiICAgICAgZnRwOi8vZnRwLm51bWVyaWNhbHMuY29tL2ZpbGVbMS0xMDBdLnR4dFxuIgoiICAgICAgZnRwOi8vZnRwLm51bWVyaWNhbHMuY29tL2ZpbGVbMDAxLTEwMF0udHh0ICAgICh3aXRoIGxlYWRpbmdcbiIKIiAgICAgemVyb3MpXG4iCiIgICAgICBmdHA6Ly9mdHAubGV0dGVycy5jb20vZmlsZVthLXpdLnR4dFxuIgoiXG4iCiIgICAgIEl0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgdXAgdG8gOSBzZXRzIG9yIHNlcmllcyBmb3IgYSAgVVJMLFxuIgopOwogcHV0cygKIiAgICAgYnV0IG5vIG5lc3RpbmcgaXMgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQ6XG4iCiJcbiIKIiAgICAgIGh0dHA6Ly93d3cuYW55Lm9yZy9hcmNoaXZlWzE5OTYtMTk5OV0vdm9srVxuIgoiICAgICB1bWVbMS00XXBhcnR7YSxiLGMsaW5kZXh9Lmh0bWxcbiIKIlxuIgoiICAgICBZb3UgY2FuIHNwZWNpZnkgYW55IGFtb3VudCBvZiBVUkxzIG9uIHRoZSBjb21tYW5kIGxpbmUuIFRoZXlcbiIKIiAgICAgd2lsbCAgYmUgIGZldGNoZWQgIGluICBhICBzZXF1ZW50aWFsIG1hbm5lciBpbiB0aGUgc3BlY2lmaWVkXG4iCiIgICAgIG9yZGVyLlxuIgoiXG4iCiIgICAgIEN1cmwgd2lsbCBhdHRlbXB0IHRvIHJlLXVzZSBjb25uZWN0aW9ucyAgZm9yICBtdWx0aXBsZSAgZmlsZVxuIgoiICAgICB0cmFuc2ZlcnMsICBzbyAgdGhhdCBnZXR0aW5nIG1hbnkgZmlsZXMgZnJvbSB0aGUgc2FtZSBzZXJ2ZXJcbiIKIiAgICAgd2lsbCBub3QgZG8gbXVsdGlwbGUgY29ubmVjdHMgLyAgaGFuZHNoYWtlcy4gIFRoaXMgIGltcHJvdmVzXG4iCik7CiBwdXRzKAoiICAgICBzcGVlZC4gIE9mICBjb3Vyc2UgdGhpcyBpcyBvbmx5IGRvbmUgb24gZmlsZXMgc3BlY2lmaWVkIG9uIGFcbiIKIiAgICAgc2luZ2xlIGNvbW1hbmQgbGluZSBhbmQgY2Fubm90IGJlIHVzZWQgYmV0d2VlbiBzZXBhcmF0ZSBjdXJsXG4iCiIgICAgIGludm9rZXMuXG4iCiJPUFRJT05TXG4iCiIgICAgIC1hLy0tYXBwZW5kXG4iCiIgICAgICAgICAgKEZUUCkgV2hlbiB1c2VkIGluIGEgZnRwIHVwbG9hZCwgdGhpcyB3aWxsIHRlbGwgY3VybCB0b1xuIgoiICAgICAgICAgIGFwcGVuZCB0byB0aGUgdGFyZ2V0IGZpbGUgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyBpdC4gSWZcbiIKIiAgICAgICAgICB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4iCiJcbiIKIiAgICAgICAgICBJZiAgdGhpcyBvcHRpb24gaXMgdXNlZCB0d2ljZSwgdGhlIHNlY29uZCBvbmUgd2lsbCBkaXOtXG4iCiIgICAgICAgICAgYWJsZSBhcHBlbmQgbW9kZSBhZ2Fpbi5cbiIKIlxuIgoiICAgICAtQS8tLXVzZXItYWdlbnQgPGFnZW50IHN0cmluZz5cbiIKKTsKIHB1dHMoCiIgICAgICAgICAgKEhUVFApIFNwZWNpZnkgdGhlIFVzZXItQWdlbnQgc3RyaW5nICB0byAgc2VuZCAgdG8gIHRoZVxuIgoiICAgICAgICAgIEhUVFAgIHNlcnZlci4gIFNvbWUgYmFkbHkgZG9uZSBDR0lzIGZhaWwgaWYgaXRzIG5vdCBzZXRcbiIKIiAgICAgICAgICB0byBcIk1vemlsbGEvNC4wXCIuICBUbyBlbmNvZGUgYmxhbmtzIGluIHRoZSBzdHJpbmcsIHN1cq1cbiIKIiAgICAgICAgICByb3VuZCAgdGhlICBzdHJpbmcgIHdpdGggIHNpbmdsZSBxdW90ZSBtYXJrcy4gIFRoaXMgY2FuXG4iCiIgICAgICAgICAgYWxzbyBiZSBzZXQgd2l0aCB0aGUgLUgvLS1oZWFkZXIgZmxhZyBvZiBjb3Vyc2UuXG4iCiJcbiIKIiAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgbW9yZSB0aGFuIG9uY2UsIHRoZSBsYXN0IG9uZSB3aWxsXG4iCiIgICAgICAgICAgYmUgdGhlIG9uZSB0aGF0J3MgdXNlZC5cbiIKIlxuIgoiICAgICAtYi8tLWNvb2tpZSA8bmFtZT1kYXRhPlxuIgopOwogcHV0cygKIiAgICAgICAgICAoSFRUUCkgUGFzcyB0aGUgZGF0YSB0byB0aGUgSFRUUCBzZXJ2ZXIgYXMgYSBjb29raWUuIEl0XG4iCiIgICAgICAgICAgaXMgc3VwcG9zZWRseSB0aGUgZGF0YSAgcHJldmlvdXNseSAgcmVjZWl2ZWQgIGZyb20gIHRoZVxuIgoiICAgICAgICAgIHNlcnZlciAgaW4gYSBcIlNldC1Db29raWU6XCIgbGluZS4gIFRoZSBkYXRhIHNob3VsZCBiZSBpblxuIgoiICAgICAgICAgIHRoZSBmb3JtYXQgXCJOQU1FMT1WQUxVRTE7IE5BTUUyPVZBTFVFMlwiLlxuIgoiXG4iCiIgICAgICAgICAgSWYgbm8gJz0nIGxldHRlciBpcyB1c2VkIGluIHRoZSBsaW5lLCBpdCBpcyB0cmVhdGVkICBhc1xuIgoiICAgICAgICAgIGEgIGZpbGVuYW1lICB0byAgdXNlICB0byAgcmVhZCBwcmV2aW91c2x5IHN0b3JlZCBjb29raWVcbiIKIiAgICAgICAgICBsaW5lcyBmcm9tLCB3aGljaCBzaG91bGQgYmUgdXNlZCAgaW4gIHRoaXMgIHNlc3Npb24gIGlmXG4iCik7CiBwdXRzKAoiICAgICAgICAgIHRoZXkgIG1hdGNoLiAgVXNpbmcgIHRoaXMgIG1ldGhvZCAgYWxzbyAgYWN0aXZhdGVzICB0aGVcbiIKIiAgICAgICAgICBcImNvb2tpZSBwYXJzZXJcIiB3aGljaCB3aWxsIG1ha2UgIGN1cmwgIHJlY29yZCAgaW5jb21pbmdcbiIKIiAgICAgICAgICBjb29raWVzIHRvbywgd2hpY2ggbWF5IGJlIGhhbmR5IGlmIHlvdSdyZSB1c2luZyB0aGlzIGluXG4iCiIgICAgICAgICAgY29tYmluYXRpb24gd2l0aCB0aGUgIC1MLy0tbG9jYXRpb24gIG9wdGlvbi4gIFRoZSAgZmlsZVxuIgoiICAgICAgICAgIGZvcm1hdCBvZiB0aGUgZmlsZSB0byByZWFkIGNvb2tpZXMgZnJvbSBzaG91bGQgYmUgcGxhaW5cbiIKIiAgICAgICAgICBIVFRQIGhlYWRlcnMgb3IgdGhlIE5ldHNjYXBlL01vemlsbGEgY29va2llICBmaWxlICBmb3KtXG4iCiIgICAgICAgICAgbWF0LlxuIgoiXG4iCiIgICAgICAgICAgTk9URSAgdGhhdCAgdGhlIGZpbGUgc3BlY2lmaWVkIHdpdGggLWIvLS1jb29raWUgaXMgb25seVxuIgopOwogcHV0cygKIiAgICAgICAgICB1c2VkIGFzIGlucHV0LiBObyBjb29raWVzIHdpbGwgYmUgc3RvcmVkIGluICB0aGUgIGZpbGUuXG4iCiIgICAgICAgICAgVG8gc3RvcmUgY29va2llcywgc2F2ZSB0aGUgSFRUUCBoZWFkZXJzIHRvIGEgZmlsZSB1c2luZ1xuIgoiICAgICAgICAgIC1ELy0tZHVtcC1oZWFkZXIhXG4iCiJcbiIKIiAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgbW9yZSB0aGFuIG9uY2UsIHRoZSBsYXN0IG9uZSB3aWxsXG4iCiIgICAgICAgICAgYmUgdGhlIG9uZSB0aGF0J3MgdXNlZC5cbiIKIlxuIgoiICAgICAtQi8tLXVzZS1hc2NpaVxuIgoiICAgICAgICAgIFVzZSAgQVNDSUkgIHRyYW5zZmVyICB3aGVuICBnZXR0aW5nIGFuIEZUUCBmaWxlIG9yIExEQVBcbiIKIiAgICAgICAgICBpbmZvLiBGb3IgRlRQLCB0aGlzIGNhbiBhbHNvIGJlIGVuZm9yY2VkICBieSAgdXNpbmcgIGFuXG4iCiIgICAgICAgICAgVVJMICB0aGF0ICBlbmRzIHdpdGggXCI7dHlwZT1BXCIuIFRoaXMgb3B0aW9uIGNhdXNlcyBkYXRhXG4iCik7CiBwdXRzKAoiICAgICAgICAgIHNlbnQgdG8gc3Rkb3V0IHRvIGJlIGluIHRleHQgbW9kZSBmb3Igd2luMzIgc3lzdGVtcy5cbiIKIlxuIgoiICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgdHdpY2UsIHRoZSBzZWNvbmQgb25lIHdpbGwgIGRpc61cbiIKIiAgICAgICAgICBhYmxlIEFTQ0lJIHVzYWdlLlxuIgoiICAgICAtLWNvbm5lY3QtdGltZW91dCA8c2Vjb25kcz5cbiIKIiAgICAgICAgICBNYXhpbXVtICB0aW1lICBpbiBzZWNvbmRzIHRoYXQgeW91IGFsbG93IHRoZSBjb25uZWN0aW9uXG4iCiIgICAgICAgICAgdG8gdGhlIHNlcnZlciB0byB0YWtlLiAgVGhpcyBvbmx5IGxpbWl0cyB0aGUgY29ubmVjdGlvblxuIgoiICAgICAgICAgIHBoYXNlLCAgb25jZSAgY3VybCAgaGFzICBjb25uZWN0ZWQgdGhpcyBvcHRpb24gaXMgb2Ygbm9cbiIKIiAgICAgICAgICBtb3JlIHVzZS4gVGhpcyBvcHRpb24gIGRpZG4ndCAgd29yayAgaW4gIHdpbjMyICBzeXN0ZW1zXG4iCik7CiBwdXRzKAoiICAgICAgICAgIHVudGlsIDcuNy4yLiAgU2VlIGFsc28gdGhlIC0tbWF4LXRpbWUgb3B0aW9uLlxuIgoiXG4iCiIgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbFxuIgoiICAgICAgICAgIGJlIHVzZWQuXG4iCiJcbiIKIiAgICAgLWMvLS1jb250aW51ZVxuIgoiICAgICAgICAgIERlcHJlY2F0ZWQuIFVzZSAnLUMgLScgaW5zdGVhZC4gIENvbnRpbnVlL1Jlc3VtZSBhIHByZa1cbiIKIiAgICAgICAgICB2aW91cyAgZmlsZSAgdHJhbnNmZXIuICBUaGlzIGluc3RydWN0cyBjdXJsIHRvIGNvbnRpbnVlXG4iCiIgICAgICAgICAgYXBwZW5kaW5nIGRhdGEgb24gdGhlICBmaWxlICB3aGVyZSAgaXQgIHdhcyAgcHJldmlvdXNseVxuIgoiICAgICAgICAgIGxlZnQsICBwb3NzaWJseSAgYmVjYXVzZSAgb2YgYSBicm9rZW4gY29ubmVjdGlvbiB0byB0aGVcbiIKIiAgICAgICAgICBzZXJ2ZXIuIFRoZXJlIG11c3QgYmUgYSBuYW1lZCBwaHlzaWNhbCBmaWxlICB0byAgYXBwZW5kXG4iCik7CiBwdXRzKAoiICAgICAgICAgIHRvICBmb3IgIHRoaXMgdG8gd29yay4gIE5vdGU6IFVwbG9hZCByZXN1bWUgaXMgZGVwZW5pbmdcbiIKIiAgICAgICAgICBvbiBhIGNvbW1hbmQgbmFtZWQgU0laRSBub3QgYWx3YXlzIHByZXNlbnQgaW4gIGFsbCAgZnRwXG4iCiIgICAgICAgICAgc2VydmVycyEgVXBsb2FkIHJlc3VtZSBpcyBmb3IgRlRQIG9ubHkuICBIVFRQIHJlc3VtZSBpc1xuIgoiICAgICAgICAgIG9ubHkgcG9zc2libGUgd2l0aCBIVFRQLzEuMSBvciBsYXRlciBzZXJ2ZXJzLlxuIgoiXG4iCiIgICAgIC1DLy0tY29udGludWUtYXQgPG9mZnNldD5cbiIKIiAgICAgICAgICBDb250aW51ZS9SZXN1bWUgYSBwcmV2aW91cyBmaWxlIHRyYW5zZmVyIGF0ICB0aGUgIGdpdmVuXG4iCiIgICAgICAgICAgb2Zmc2V0LiAgVGhlICBnaXZlbiBvZmZzZXQgaXMgdGhlIGV4YWN0IG51bWJlciBvZiBieXRlc1xuIgoiICAgICAgICAgIHRoYXQgd2lsbCBiZSBza2lwcGVkIGNvdW50ZWQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mICB0aGVcbiIKKTsKIHB1dHMoCiIgICAgICAgICAgc291cmNlIGZpbGUgYmVmb3JlIGl0IGlzIHRyYW5zZmVyZWQgdG8gdGhlIGRlc3RpbmF0aW9uLlxuIgoiICAgICAgICAgIElmIHVzZWQgd2l0aCB1cGxvYWRzLCB0aGUgZnRwIHNlcnZlciBjb21tYW5kIFNJWkUgIHdpbGxcbiIKIiAgICAgICAgICBub3QgIGJlICB1c2VkICBieSAgY3VybC4gVXBsb2FkIHJlc3VtZSBpcyBmb3IgRlRQIG9ubHkuXG4iCiIgICAgICAgICAgSFRUUCByZXN1bWUgaXMgb25seSBwb3NzaWJsZSAgd2l0aCAgSFRUUC8xLjEgIG9yICBsYXRlclxuIgoiICAgICAgICAgIHNlcnZlcnMuXG4iCiJcbiIKIiAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsXG4iCiIgICAgICAgICAgYmUgdXNlZC5cbiIKIlxuIgoiICAgICAtZC8tLWRhdGEgPGRhdGE+XG4iCiIgICAgICAgICAgKEhUVFApIFNlbmRzIHRoZSBzcGVjaWZpZWQgZGF0YSBpbiBhICBQT1NUICByZXF1ZXN0ICB0b1xuIgopOwogcHV0cygKIiAgICAgICAgICB0aGUgSFRUUCBzZXJ2ZXIsIGluIGEgd2F5IHRoYXQgY2FuIGVtdWxhdGUgYXMgaWYgYSB1c2VyXG4iCiIgICAgICAgICAgaGFzIGZpbGxlZCBpbiBhIEhUTUwgZm9ybSBhbmQgcHJlc3NlZCB0aGUgIHN1Ym1pdCAgYnV0rVxuIgoiICAgICAgICAgIHRvbi4gIE5vdGUgIHRoYXQgIHRoZSBkYXRhIGlzIHNlbnQgZXhhY3RseSBhcyBzcGVjaWZpZWRcbiIKIiAgICAgICAgICB3aXRoIG5vIGV4dHJhIHByb2Nlc3NpbmcgKHdpdGggYWxsIG5ld2xpbmVzICBjdXQgIG9mZikuXG4iCiIgICAgICAgICAgVGhlICBkYXRhICBpcyAgZXhwZWN0ZWQgIHRvIGJlIFwidXJsLWVuY29kZWRcIi4gVGhpcyB3aWxsXG4iCiIgICAgICAgICAgY2F1c2UgY3VybCB0byBwYXNzIHRoZSBkYXRhIHRvICB0aGUgIHNlcnZlciAgdXNpbmcgIHRoZVxuIgoiICAgICAgICAgIGNvbnRlbnQtdHlwZSBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQuIENvbXBhcmVcbiIKKTsKIHB1dHMoCiIgICAgICAgICAgdG8gLUYuIElmIG1vcmUgdGhhbiBvbmUgLWQvLS1kYXRhIG9wdGlvbiBpcyB1c2VkIG9uIHRoZVxuIgoiICAgICAgICAgIHNhbWUgIGNvbW1hbmQgIGxpbmUsICB0aGUgZGF0YSBwaWVjZXMgc3BlY2lmaWVkIHdpbGwgYmVcbiIKIiAgICAgICAgICBtZXJnZWQgdG9nZXRoZXIgd2l0aCBhIHNlcGFyYXRpbmcgJi1sZXR0ZXIuIFRodXMsIHVzaW5nXG4iCiIgICAgICAgICAgJy1kICBuYW1lPWRhbmllbCAgLWQgc2tpbGw9bG91c3knIHdvdWxkIGdlbmVyYXRlIGEgcG9zdFxuIgoiICAgICAgICAgIGNodW5rIHRoYXQgbG9va3MgbGlrZSAnbmFtZT1kYW5pZWwmc2tpbGw9bG91c3knLlxuIgoiXG4iCiIgICAgICAgICAgSWYgeW91IHN0YXJ0IHRoZSBkYXRhICB3aXRoICB0aGUgIGxldHRlciAgQCwgIHRoZSAgcmVzdFxuIgoiICAgICAgICAgIHNob3VsZCAgYmUgIGEgIGZpbGUgbmFtZSB0byByZWFkIHRoZSBkYXRhIGZyb20sIG9yIC0gaWZcbiIKKTsKIHB1dHMoCiIgICAgICAgICAgeW91IHdhbnQgIGN1cmwgIHRvICByZWFkICB0aGUgIGRhdGEgIGZyb20gIHN0ZGluLiAgIFRoZVxuIgoiICAgICAgICAgIGNvbnRlbnRzICBvZiB0aGUgZmlsZSBtdXN0IGFscmVhZHkgYmUgdXJsLWVuY29kZWQuIE11bK1cbiIKIiAgICAgICAgICB0aXBsZSBmaWxlcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQuXG4iCiJcbiIKIiAgICAgICAgICBUbyBwb3N0IGRhdGEgcHVyZWx5IGJpbmFyeSwgeW91IHNob3VsZCBpbnN0ZWFkIHVzZSAgdGhlXG4iCiIgICAgICAgICAgLS1kYXRhLWJpbmFyeSBvcHRpb24uXG4iCiJcbiIKIiAgICAgICAgICAtZC8tLWRhdGEgaXMgdGhlIHNhbWUgYXMgLS1kYXRhLWFzY2lpLlxuIgoiXG4iCiIgICAgICAgICAgSWYgIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIG9uZXMgZm9sbG93rVxuIgoiICAgICAgICAgIGluZyB0aGUgZmlyc3Qgd2lsbCBhcHBlbmQgZGF0YS5cbiIKIlxuIgoiICAgICAtLWRhdGEtYXNjaWkgPGRhdGE+XG4iCik7CiBwdXRzKAoiICAgICAgICAgIChIVFRQKSBUaGlzIGlzIGFuIGFsaWFzIGZvciB0aGUgLWQvLS1kYXRhIG9wdGlvbi5cbiIKIlxuIgoiICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIG9uZXMgIGZvbGxvd61cbiIKIiAgICAgICAgICBpbmcgdGhlIGZpcnN0IHdpbGwgYXBwZW5kIGRhdGEuXG4iCiJcbiIKIiAgICAgLS1kYXRhLWJpbmFyeSA8ZGF0YT5cbiIKIiAgICAgICAgICAoSFRUUCkgIFRoaXMgIHBvc3RzIGRhdGEgaW4gYSBzaW1pbGFyIG1hbm5lciBhcyAtLWRhdGEtXG4iCiIgICAgICAgICAgYXNjaWkgZG9lcywgYWx0aG91Z2ggd2hlbiB1c2luZyB0aGlzIG9wdGlvbiB0aGUgIGVudGlyZVxuIgoiICAgICAgICAgIGNvbnRleHQgIG9mICB0aGUgcG9zdGVkIGRhdGEgaXMga2VwdCBhcy1pcy4gSWYgeW91IHdhbnRcbiIKIiAgICAgICAgICB0byBwb3N0IGEgYmluYXJ5IGZpbGUgd2l0aG91dCB0aGUgIHN0cmlwLW5ld2xpbmVzICBmZWGtXG4iCik7CiBwdXRzKAoiICAgICAgICAgIHR1cmUgb2YgdGhlIC0tZGF0YS1hc2NpaSBvcHRpb24sIHRoaXMgaXMgZm9yIHlvdS5cbiIKIlxuIgoiICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGxcbiIKIiAgICAgICAgICBiZSB1c2VkLlxuIgoiXG4iCiIgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgb25lcyAgZm9sbG93rVxuIgoiICAgICAgICAgIGluZyB0aGUgZmlyc3Qgd2lsbCBhcHBlbmQgZGF0YS5cbiIKIlxuIgoiICAgICAtRC8tLWR1bXAtaGVhZGVyIDxmaWxlPlxuIgoiICAgICAgICAgIChIVFRQL0ZUUCkgIFdyaXRlICB0aGUgSFRUUCBoZWFkZXJzIHRvIHRoaXMgZmlsZS4gV3JpdGVcbiIKIiAgICAgICAgICB0aGUgRlRQIGZpbGUgaW5mbyB0byB0aGlzIGZpbGUgaWYgLUkvLS1oZWFkIGlzIHVzZWQuXG4iCiJcbiIKIiAgICAgICAgICBUaGlzIG9wdGlvbiBpcyBoYW5keSB0byB1c2Ugd2hlbiB5b3Ugd2FudCB0byBzdG9yZSAgdGhlXG4iCik7CiBwdXRzKAoiICAgICAgICAgIGNvb2tpZXMgIHRoYXQgIGEgIEhUVFAgIHNpdGUgIHNlbmRzIHRvIHlvdS4gVGhlIGNvb2tpZXNcbiIKIiAgICAgICAgICBjb3VsZCB0aGVuIGJlIHJlYWQgaW4gYSBzZWNvbmQgY3VybCBpbnZva2UgYnkgdXNpbmcgdGhlXG4iCiIgICAgICAgICAgLWIvLS1jb29raWUgb3B0aW9uIVxuIgoiXG4iCiIgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbFxuIgoiICAgICAgICAgIGJlIHVzZWQuXG4iCiJcbiIKIiAgICAgLWUvLS1yZWZlcmVyIDxVUkw+XG4iCiIgICAgICAgICAgKEhUVFApIFNlbmRzIHRoZSBcIlJlZmVyZXIgUGFnZVwiIGluZm9ybWF0aW9uIHRvIHRoZSBIVFRQXG4iCiIgICAgICAgICAgc2VydmVyLiAgVGhpcyBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUgLUgvLS1oZWFkZXIgZmxhZ1xuIgoiICAgICAgICAgIG9mIGNvdXJzZS4gIFdoZW4gdXNlZCB3aXRoIC1MLy0tbG9jYXRpb24geW91IGNhbiBhcHBlbmRcbiIKKTsKIHB1dHMoCiIgICAgICAgICAgXCI7YXV0b1wiICB0byAgdGhlIHJlZmVyZXIgVVJMIHRvIG1ha2UgY3VybCBhdXRvbWF0aWNhbGx5XG4iCiIgICAgICAgICAgc2V0IHRoZSAgcHJldmlvdXMgIFVSTCAgd2hlbiAgaXQgIGZvbGxvd3MgIGEgIExvY2F0aW9uOlxuIgoiICAgICAgICAgIGhlYWRlci4gIFRoZSAgXCI7YXV0b1wiIHN0cmluZyBjYW4gYmUgdXNlZCBhbG9uZSwgZXZlbiBpZlxuIgoiICAgICAgICAgIHlvdSBkb24ndCBzZXQgYW4gaW5pdGlhbCByZWZlcmVyLlxuIgoiXG4iCiIgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbFxuIgoiICAgICAgICAgIGJlIHVzZWQuXG4iCiJcbiIKIiAgICAgLS1lZ2QtZmlsZSA8ZmlsZT5cbiIKIiAgICAgICAgICAoSFRUUFMpICBTcGVjaWZ5IHRoZSBwYXRoIG5hbWUgdG8gdGhlIEVudHJvcHkgR2F0aGVyaW5nXG4iCiIgICAgICAgICAgRGFlbW9uIHNvY2tldC4gVGhlIHNvY2tldCBpcyB1c2VkIHRvICBzZWVkICB0aGUgIHJhbmRvbVxuIgopOwogcHV0cygKIiAgICAgICAgICBlbmdpbmUgIGZvciBTU0wgY29ubmVjdGlvbnMuIFNlZSBhbHNvIHRoZSAtLXJhbmRvbS1maWxlXG4iCiIgICAgICAgICAgb3B0aW9uLlxuIgoiXG4iCiIgICAgIC1FLy0tY2VydCA8Y2VydGlmaWNhdGVbOnBhc3N3b3JkXT5cbiIKIiAgICAgICAgICAoSFRUUFMpIFRlbGxzIGN1cmwgdG8gIHVzZSAgdGhlICBzcGVjaWZpZWQgIGNlcnRpZmljYXRlXG4iCiIgICAgICAgICAgZmlsZSAgd2hlbiAgZ2V0dGluZyAgYSBmaWxlIHdpdGggSFRUUFMuIFRoZSBjZXJ0aWZpY2F0ZVxuIgoiICAgICAgICAgIG11c3QgYmUgaW4gUEVNIGZvcm1hdC4gIElmIHRoZSBvcHRpb25hbCBwYXNzd29yZCAgaXNuJ3RcbiIKIiAgICAgICAgICBzcGVjaWZpZWQsIGl0IHdpbGwgYmUgcXVlcmllZCBmb3Igb24gdGhlIHRlcm1pbmFsLiBOb3RlXG4iCiIgICAgICAgICAgdGhhdCB0aGlzIGNlcnRpZmljYXRlIGlzIHRoZSBwcml2YXRlIGtleSBhbmQgIHRoZSAgcHJprVxuIgoiICAgICAgICAgIHZhdGUgY2VydGlmaWNhdGUgY29uY2F0ZW5hdGVkIVxuIgoiXG4iCik7CiBwdXRzKAoiICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGxcbiIKIiAgICAgICAgICBiZSB1c2VkLlxuIgoiXG4iCiIgICAgIC0tY2FjZXJ0IDxDQSBjZXJ0aWZpY2F0ZT5cbiIKIiAgICAgICAgICAoSFRUUFMpIFRlbGxzIGN1cmwgdG8gIHVzZSAgdGhlICBzcGVjaWZpZWQgIGNlcnRpZmljYXRlXG4iCiIgICAgICAgICAgZmlsZSB0byB2ZXJpZnkgdGhlIHBlZXIuIFRoZSBjZXJ0aWZpY2F0ZSBtdXN0IGJlIGluIFBFTVxuIgoiICAgICAgICAgIGZvcm1hdC5cbiIKIlxuIgoiICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGxcbiIKIiAgICAgICAgICBiZSB1c2VkLlxuIgoiXG4iCiIgICAgIC1mLy0tZmFpbFxuIgoiICAgICAgICAgIChIVFRQKSAgRmFpbCAgc2lsZW50bHkgIChubyAgb3V0cHV0ICBhdCAgYWxsKSBvbiBzZXJ2ZXJcbiIKKTsKIHB1dHMoCiIgICAgICAgICAgZXJyb3JzLiBUaGlzIGlzIG1vc3RseSBkb25lIGxpa2UgdGhpcyB0byBiZXR0ZXIgIGVuYWJsZVxuIgoiICAgICAgICAgIHNjcmlwdHMgIGV0YyAgdG8gIGJldHRlciAgZGVhbCB3aXRoIGZhaWxlZCBhdHRlbXB0cy4gSW5cbiIKIiAgICAgICAgICBub3JtYWwgY2FzZXMgd2hlbiBhIEhUVFAgc2VydmVyIGZhaWxzIHRvIGRlbGl2ZXIgYSBkb2OtXG4iCiIgICAgICAgICAgdW1lbnQsICBpdCAgcmV0dXJucyAgYSAgSFRNTCBkb2N1bWVudCBzdGF0aW5nIHNvICh3aGljaFxuIgoiICAgICAgICAgIG9mdGVuIGFsc28gZGVzY3JpYmVzIHdoeSBhbmQgbW9yZSkuIFRoaXMgZmxhZyB3aWxsIHByZa1cbiIKIiAgICAgICAgICB2ZW50ICBjdXJsICBmcm9tICBvdXRwdXR0aW5nICB0aGF0ICBhbmQgIGZhaWwgIHNpbGVudGx5XG4iCiIgICAgICAgICAgaW5zdGVhZC5cbiIKIlxuIgoiICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgdHdpY2UsICB0aGUgIHNlY29uZCAgd2lsbCAgYWdhaW5cbiIKKTsKIHB1dHMoCiIgICAgICAgICAgZGlzYWJsZSBzaWxlbnQgZmFpbHVyZS5cbiIKIlxuIgoiICAgICAtRi8tLWZvcm0gPG5hbWU9Y29udGVudD5cbiIKIiAgICAgICAgICAoSFRUUCkgVGhpcyBsZXRzIGN1cmwgZW11bGF0ZSBhIGZpbGxlZCBpbiBmb3JtIGluIHdoaWNoXG4iCiIgICAgICAgICAgYSB1c2VyIGhhcyBwcmVzc2VkIHRoZSBzdWJtaXQgYnV0dG9uLiBUaGlzIGNhdXNlcyAgY3VybFxuIgoiICAgICAgICAgIHRvIFBPU1QgZGF0YSB1c2luZyB0aGUgY29udGVudC10eXBlIG11bHRpcGFydC9mb3JtLWRhdGFcbiIKIiAgICAgICAgICBhY2NvcmRpbmcgdG8gUkZDMTg2Ny4gVGhpcyBlbmFibGVzIHVwbG9hZGluZyBvZiAgYmluYXJ5XG4iCiIgICAgICAgICAgZmlsZXMgZXRjLiBUbyBmb3JjZSB0aGUgJ2NvbnRlbnQnIHBhcnQgdG8gYmUgYmUgYSBmaWxlLFxuIgoiICAgICAgICAgIHByZWZpeCB0aGUgZmlsZSBuYW1lIHdpdGggYW4gQCBzaWduLiBUbyAganVzdCAgZ2V0ICB0aGVcbiIKKTsKIHB1dHMoCiIgICAgICAgICAgY29udGVudCBwYXJ0IGZyb20gYSBmaWxlLCBwcmVmaXggdGhlIGZpbGUgbmFtZSB3aXRoIHRoZVxuIgoiICAgICAgICAgIGxldHRlciA8LiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIEAgYW5kIDwgaXMgdGhlbiB0aGF0IEBcbiIKIiAgICAgICAgICBtYWtlcyBhIGZpbGUgZ2V0IGF0dGFjaGVkIGluIHRoZSBwb3N0IGFzIGEgZmlsZSB1cGxvYWQsXG4iCiIgICAgICAgICAgd2hpbGUgdGhlIDwgbWFrZXMgYSB0ZXh0IGZpZWxkIGFuZCBqdXN0ICBnZXQgIHRoZSAgY29urVxuIgoiICAgICAgICAgIHRlbnRzIGZvciB0aGF0IHRleHQgZmllbGQgZnJvbSBhIGZpbGUuXG4iCiIgICAgICAgICAgRXhhbXBsZSwgIHRvICBzZW5kICB5b3VyICBwYXNzd29yZCAgZmlsZSB0byB0aGUgc2VydmVyLFxuIgoiICAgICAgICAgIHdoZXJlICdwYXNzd29yZCcgaXMgdGhlIG5hbWUgb2YgdGhlIGZvcm0tZmllbGQgdG8gd2hpY2hcbiIKIiAgICAgICAgICAvZXRjL3Bhc3N3ZCB3aWxsIGJlIHRoZSBpbnB1dDpcbiIKIlxuIgopOwogcHV0cygKIiAgICAgICAgICBjdXJsIC1GIHBhc3N3b3JkPUAvZXRjL3Bhc3N3ZCB3d3cubXlwYXNzd29yZHMuY29tXG4iCiJcbiIKIiAgICAgICAgICBUbyByZWFkIHRoZSBmaWxlJ3MgY29udGVudCBmcm9tIHN0ZGluIGluc3RlZCBvZiBhIGZpbGUsXG4iCiIgICAgICAgICAgdXNlIC0gd2hlcmUgdGhlIGZpbGUgbmFtZSBzaG91bGQndmUgYmVlbi4gVGhpcyBnb2VzIGZvclxuIgoiICAgICAgICAgIGJvdGggQCBhbmQgPCBjb25zdHJ1Y3RzLlxuIgoiXG4iCiIgICAgICAgICAgVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMuXG4iCiJcbiIKIiAgICAgLWcvLS1nbG9ib2ZmXG4iCiIgICAgICAgICAgVGhpcyAgb3B0aW9uICBzd2l0Y2hlcyAgb2ZmICB0aGUgXCJVUkwgZ2xvYmJpbmcgcGFyc2VyXCIuXG4iCiIgICAgICAgICAgV2hlbiB5b3Ugc2V0IHRoaXMgb3B0aW9uLCB5b3UgIGNhbiAgc3BlY2lmeSAgVVJMcyAgdGhhdFxuIgoiICAgICAgICAgIGNvbnRhaW4gIHRoZSAgbGV0dGVycyAge31bXSAgd2l0aG91dCAgaGF2aW5nIHRoZW0gYmVpbmdcbiIKKTsKIHB1dHMoCiIgICAgICAgICAgaW50ZXJwcmV0ZWQgYnkgY3VybCBpdHNlbGYuIE5vdGUgdGhhdCB0aGVzZSBsZXR0ZXJzIGFyZVxuIgoiICAgICAgICAgIG5vdCAgbm9ybWFsICBsZWdhbCAgVVJMICBjb250ZW50cyAgYnV0ICB0aGV5ICBzaG91bGQgYmVcbiIKIiAgICAgICAgICBlbmNvZGVkIGFjY29yZGluZyB0byB0aGUgVVJJIHN0YW5kYXJkLiAoT3B0aW9uIGFkZGVkIGluXG4iCiIgICAgICAgICAgY3VybCA3LjYpXG4iCiJcbiIKIiAgICAgLWgvLS1oZWxwXG4iCiIgICAgICAgICAgVXNhZ2UgaGVscC5cbiIKIlxuIgoiICAgICAtSC8tLWhlYWRlciA8aGVhZGVyPlxuIgoiICAgICAgICAgIChIVFRQKSBFeHRyYSBoZWFkZXIgdG8gdXNlIHdoZW4gZ2V0dGluZyBhIHdlYiBwYWdlLiBZb3VcbiIKIiAgICAgICAgICBtYXkgc3BlY2lmeSBhbnkgbnVtYmVyIG9mIGV4dHJhIGhlYWRlcnMuIE5vdGUgIHRoYXQgIGlmXG4iCiIgICAgICAgICAgeW91ICBzaG91bGQgIGFkZCBhIGN1c3RvbSBoZWFkZXIgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZVxuIgopOwogcHV0cygKIiAgICAgICAgICBhcyBvbmUgb2YgdGhlIGludGVybmFsIG9uZXMgY3VybCB3b3VsZCB1c2UsIHlvdXIgZXh0ZXKtXG4iCiIgICAgICAgICAgbmFsbHkgIHNldCAgaGVhZGVyIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBpbnRlcm5hbFxuIgoiICAgICAgICAgIG9uZS4gVGhpcyBhbGxvd3MgeW91IHRvIG1ha2UgZXZlbiB0cmlja2llciAgc3R1ZmYgIHRoYW5cbiIKIiAgICAgICAgICBjdXJsICB3b3VsZCAgbm9ybWFsbHkgZG8uIFlvdSBzaG91bGQgbm90IHJlcGxhY2UgaW50ZXKtXG4iCiIgICAgICAgICAgbmFsbHkgc2V0IGhlYWRlcnMgd2l0aG91dCBrbm93aW5nIHBlcmZlY3RseSAgd2VsbCAgd2hhdFxuIgoiICAgICAgICAgIHlvdSdyZSAgZG9pbmcuICBSZXBsYWNpbmcgIGFuICBpbnRlcm5hbCBoZWFkZXIgd2l0aCBvbmVcbiIKIiAgICAgICAgICB3aXRob3V0IGNvbnRlbnQgb24gdGhlIHJpZ2h0IHNpZGUgIG9mICB0aGUgIGNvbG9uICB3aWxsXG4iCik7CiBwdXRzKAoiICAgICAgICAgIHByZXZlbnQgdGhhdCBoZWFkZXIgZnJvbSBhcHBlYXJpbmcuXG4iCiJcbiIKIiAgICAgICAgICBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcy5cbiIKIlxuIgoiICAgICAtaS8tLWluY2x1ZGVcbiIKIiAgICAgICAgICAoSFRUUCkgSW5jbHVkZSB0aGUgSFRUUC1oZWFkZXIgaW4gdGhlIG91dHB1dC4gVGhlIEhUVFAtXG4iCiIgICAgICAgICAgaGVhZGVyIGluY2x1ZGVzIHRoaW5ncyBsaWtlIHNlcnZlci1uYW1lLCAgZGF0ZSAgb2YgIHRoZVxuIgoiICAgICAgICAgIGRvY3VtZW50LCBIVFRQLXZlcnNpb24gYW5kIG1vcmUuLi5cbiIKIlxuIgoiICAgICAgICAgIElmICB0aGlzICBvcHRpb24gIGlzICB1c2VkIHR3aWNlLCB0aGUgc2Vjb25kIHdpbGwgYWdhaW5cbiIKIiAgICAgICAgICBkaXNhYmxlIGhlYWRlciBpbmNsdWRlLlxuIgoiXG4iCiIgICAgIC0taW50ZXJmYWNlIDxuYW1lPlxuIgoiICAgICAgICAgIFBlcmZvcm0gYW4gb3BlcmF0aW9uIHVzaW5nIGEgc3BlY2lmaWVkICBpbnRlcmZhY2UuICBZb3VcbiIKKTsKIHB1dHMoCiIgICAgICAgICAgY2FuICBlbnRlciAgaW50ZXJmYWNlIG5hbWUsIElQIGFkZHJlc3Mgb3IgaG9zdCBuYW1lLiBBblxuIgoiICAgICAgICAgIGV4YW1wbGUgY291bGQgbG9vayBsaWtlOlxuIgoiICAgICAgICAgIGN1cmwgLS1pbnRlcmZhY2UgZXRoMDoxIGh0dHA6Ly93d3cubmV0c2NhcGUuY29tL1xuIgoiXG4iCiIgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCBzZXZlcmFsIHRpbWVzLCB0aGUgbGFzdCBvbmUgd2lsbFxuIgoiICAgICAgICAgIGJlIHVzZWQuXG4iCiJcbiIKIiAgICAgLUkvLS1oZWFkXG4iCiIgICAgICAgICAgKEhUVFAvRlRQKSAgRmV0Y2ggIHRoZSAgSFRUUC1oZWFkZXIgIG9ubHkhIEhUVFAtc2VydmVyc1xuIgoiICAgICAgICAgIGZlYXR1cmUgdGhlIGNvbW1hbmQgSEVBRCB3aGljaCB0aGlzIHVzZXMgdG8gZ2V0IG5vdGhpbmdcbiIKIiAgICAgICAgICBidXQgIHRoZSBoZWFkZXIgb2YgYSBkb2N1bWVudC4gV2hlbiB1c2VkIG9uIGEgRlRQIGZpbGUsXG4iCik7CiBwdXRzKAoiICAgICAgICAgIGN1cmwgZGlzcGxheXMgdGhlIGZpbGUgc2l6ZSBvbmx5LlxuIgoiXG4iCiIgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCB0d2ljZSwgIHRoZSAgc2Vjb25kICB3aWxsICBhZ2FpblxuIgoiICAgICAgICAgIGRpc2FibGUgaGVhZGVyIG9ubHkuXG4iCiJcbiIKIiAgICAgLS1rcmI0IDxsZXZlbD5cbiIKIiAgICAgICAgICAoRlRQKSAgRW5hYmxlICBrZXJiZXJvczQgIGF1dGhlbnRpY2F0aW9uICBhbmQgIHVzZS4gVGhlXG4iCiIgICAgICAgICAgbGV2ZWwgbXVzdCBiZSBlbnRlcmVkIGFuZCBzaG91bGQgIGJlICBvbmUgIG9mICAnY2xlYXInLFxuIgoiICAgICAgICAgICdzYWZlJywgICdjb25maWRlbnRpYWwnICBvciAncHJpdmF0ZScuIFNob3VsZCB5b3UgdXNlIGFcbiIKIiAgICAgICAgICBsZXZlbCB0aGF0IGlzIG5vdCBvbmUgb2YgdGhlc2UsICdwcml2YXRlJyB3aWxsICBpbnN0ZWFkXG4iCiIgICAgICAgICAgYmUgdXNlZC5cbiIKIlxuIgopOwogcHV0cygKIiAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsXG4iCiIgICAgICAgICAgYmUgdXNlZC5cbiIKIlxuIgoiICAgICAtSy8tLWNvbmZpZyA8Y29uZmlnIGZpbGU+XG4iCiIgICAgICAgICAgU3BlY2lmeSB3aGljaCBjb25maWcgZmlsZSB0byByZWFkIGN1cmwgYXJndW1lbnRzICBmcm9tLlxuIgoiICAgICAgICAgIFRoZSAgY29uZmlnICBmaWxlICBpcyBhIHRleHQgZmlsZSBpbiB3aGljaCBjb21tYW5kIGxpbmVcbiIKIiAgICAgICAgICBhcmd1bWVudHMgY2FuIGJlIHdyaXR0ZW4gd2hpY2ggdGhlbiB3aWxsIGJlIHVzZWQgYXMgIGlmXG4iCiIgICAgICAgICAgdGhleSAgd2VyZSAgd3JpdHRlbiBvbiB0aGUgYWN0dWFsIGNvbW1hbmQgbGluZS4gT3B0aW9uc1xuIgoiICAgICAgICAgIGFuZCB0aGVpciBwYXJhbWV0ZXJzIG11c3QgYmUgc3BlY2lmaWVkIG9uIHRoZSBzYW1lIGNvbq1cbiIKKTsKIHB1dHMoCiIgICAgICAgICAgZmlnICBmaWxlICBsaW5lLiAgSWYgIHRoZSBwYXJhbWV0ZXIgaXMgdG8gY29udGFpbiB3aGl0ZVxuIgoiICAgICAgICAgIHNwYWNlcywgdGhlIHBhcmFtZXRlciBtdXN0IGJlIGluY2xvc2VkICB3aXRoaW4gIHF1b3Rlcy5cbiIKIiAgICAgICAgICBJZiAgdGhlICBmaXJzdCBjb2x1bW4gb2YgYSBjb25maWcgbGluZSBpcyBhICcjJyBjaGFyYWOtXG4iCiIgICAgICAgICAgdGVyLCB0aGUgcmVzdCBvZiB0aGUgbGluZSB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBjb21tZW50LlxuIgoiXG4iCiIgICAgICAgICAgU3BlY2lmeSAgdGhlIGZpbGVuYW1lIGFzICctJyB0byBtYWtlIGN1cmwgcmVhZCB0aGUgZmlsZVxuIgoiICAgICAgICAgIGZyb20gc3RkaW4uXG4iCiJcbiIKIiAgICAgICAgICBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcy5cbiIKIlxuIgoiICAgICAtbC8tLWxpc3Qtb25seVxuIgoiICAgICAgICAgIChGVFApIFdoZW4gbGlzdGluZyBhbiBGVFAgZGlyZWN0b3J5LCB0aGlzIHN3aXRjaCBmb3JjZXNcbiIKKTsKIHB1dHMoCiIgICAgICAgICAgYSAgbmFtZS1vbmx5ICB2aWV3LiAgIEVzcGVjaWFsbHkgIHVzZWZ1bCBpZiB5b3Ugd2FudCB0b1xuIgoiICAgICAgICAgIG1hY2hpbmUtcGFyc2UgdGhlIGNvbnRlbnRzIG9mIGFuICBGVFAgIGRpcmVjdG9yeSAgc2luY2VcbiIKIiAgICAgICAgICB0aGUgIG5vcm1hbCAgZGlyZWN0b3J5IHZpZXcgZG9lc24ndCB1c2UgYSBzdGFuZGFyZCBsb29rXG4iCiIgICAgICAgICAgb3IgZm9ybWF0LlxuIgoiXG4iCiIgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCB0d2ljZSwgIHRoZSAgc2Vjb25kICB3aWxsICBhZ2FpblxuIgoiICAgICAgICAgIGRpc2FibGUgbGlzdCBvbmx5LlxuIgoiXG4iCiIgICAgIC1MLy0tbG9jYXRpb25cbiIKIiAgICAgICAgICAoSFRUUC9IVFRQUykgIElmICB0aGUgc2VydmVyIHJlcG9ydHMgdGhhdCB0aGUgcmVxdWVzdGVkXG4iCiIgICAgICAgICAgcGFnZSBoYXMgIGEgIGRpZmZlcmVudCAgbG9jYXRpb24gIChpbmRpY2F0ZWQgIHdpdGggIHRoZVxuIgopOwogcHV0cygKIiAgICAgICAgICBoZWFkZXIgIGxpbmUgTG9jYXRpb246KSB0aGlzIGZsYWcgd2lsbCBsZXQgY3VybCBhdHRlbXB0XG4iCiIgICAgICAgICAgdG8gcmVhdHRlbXB0IHRoZSBnZXQgb24gdGhlIG5ldyBwbGFjZS4gSWYgdXNlZCB0b2dldGhlclxuIgoiICAgICAgICAgIHdpdGggLWkgb3IgLUksIGhlYWRlcnMgZnJvbSBhbGwgcmVxdWVzdGVkIHBhZ2VzIHdpbGwgYmVcbiIKIiAgICAgICAgICBzaG93bi4gSWYgdGhpcyBmbGFnIGlzIHVzZWQgd2hlbiBtYWtpbmcgIGEgIEhUVFAgIFBPU1QsXG4iCiIgICAgICAgICAgY3VybCB3aWxsIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRvIEdFVCBhZnRlciB0aGUgaW5pdGlhbFxuIgoiICAgICAgICAgIFBPU1QgaGFzIGJlZW4gZG9uZS5cbiIKIlxuIgoiICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgdHdpY2UsICB0aGUgIHNlY29uZCAgd2lsbCAgYWdhaW5cbiIKIiAgICAgICAgICBkaXNhYmxlIGxvY2F0aW9uIGZvbGxvd2luZy5cbiIKIlxuIgoiICAgICAtbS8tLW1heC10aW1lIDxzZWNvbmRzPlxuIgopOwogcHV0cygKIiAgICAgICAgICBNYXhpbXVtIHRpbWUgaW4gc2Vjb25kcyB0aGF0IHlvdSBhbGxvdyB0aGUgd2hvbGUgb3BlcmGtXG4iCiIgICAgICAgICAgdGlvbiB0byB0YWtlLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHByZXZlbnRpbmcgeW91ciBiYXRjaFxuIgoiICAgICAgICAgIGpvYnMgIGZyb20gIGhhbmdpbmcgIGZvciAgaG91cnMgZHVlIHRvIHNsb3cgbmV0d29ya3Mgb3JcbiIKIiAgICAgICAgICBsaW5rcyBnb2luZyBkb3duLiAgVGhpcyBkb2Vzbid0ICB3b3JrICBmdWxseSAgaW4gIHdpbjMyXG4iCiIgICAgICAgICAgc3lzdGVtcy4gIFNlZSBhbHNvIHRoZSAtLWNvbm5lY3QtdGltZW91dCBvcHRpb24uXG4iCiJcbiIKIiAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsXG4iCiIgICAgICAgICAgYmUgdXNlZC5cbiIKIlxuIgoiICAgICAtTS8tLW1hbnVhbFxuIgoiICAgICAgICAgIE1hbnVhbC4gRGlzcGxheSB0aGUgaHVnZSBoZWxwIHRleHQuXG4iCiJcbiIKIiAgICAgLW4vLS1uZXRyY1xuIgopOwogcHV0cygKIiAgICAgICAgICBNYWtlcyBjdXJsIHNjYW4gdGhlIC5uZXRyYyAgZmlsZSAgaW4gIHRoZSAgdXNlcidzICBob21lXG4iCiIgICAgICAgICAgZGlyZWN0b3J5ICBmb3IgIGxvZ2luICBuYW1lIGFuZCBwYXNzd29yZC4gVGhpcyBpcyB0eXBprVxuIgoiICAgICAgICAgIGNhbGx5IHVzZWQgZm9yIGZ0cCBvbiB1bml4LiBJZiAgdXNlZCAgd2l0aCAgaHR0cCwgIGN1cmxcbiIKIiAgICAgICAgICB3aWxsICBlbmFibGUgIHVzZXIgIGF1dGhlbnRpY2F0aW9uLiAgU2VlICBuZXRyYyg0KSAgZm9yXG4iCiIgICAgICAgICAgZGV0YWlscyBvbiB0aGUgZmlsZSBmb3JtYXQuIEN1cmwgd2lsbCBub3QgIGNvbXBsYWluICBpZlxuIgoiICAgICAgICAgIHRoYXQgIGZpbGUgIGhhc24ndCB0aGUgcmlnaHQgcGVybWlzc2lvbnMgKGl0IHNob3VsZCBub3RcbiIKIiAgICAgICAgICBiZSB3b3JsZCBub3IgZ3JvdXAgcmVhZGFibGUpLiBUaGUgZW52aXJvbm1lbnQgIHZhcmlhYmxlXG4iCik7CiBwdXRzKAoiICAgICAgICAgIFwiSE9NRVwiIGlzIHVzZWQgdG8gZmluZCB0aGUgaG9tZSBkaXJlY3RvcnkuXG4iCiJcbiIKIiAgICAgICAgICBBICBxdWljayAgYW5kICB2ZXJ5ICBzaW1wbGUgIGV4YW1wbGUgIG9mIGhvdyB0byBzZXR1cCBhXG4iCiIgICAgICAgICAgLm5ldHJjICB0byAgYWxsb3cgIGN1cmwgICB0byAgIGZ0cCAgIHRvICAgdGhlICAgbWFjaGluZVxuIgoiICAgICAgICAgIGhvc3QuZG9tYWluLmNvbSAgd2l0aCAgdXNlciAgbmFtZSAnbXlzZWxmJyBhbmQgcGFzc3dvcmRcbiIKIiAgICAgICAgICAnc2VjcmV0JyBzaG91bGQgbG9vayBzaW1pbGFyIHRvOlxuIgoiXG4iCiIgICAgICAgICAgbWFjaGluZSBob3N0LmRvbWFpbi5jb20gbG9naW4gbXlzZWxmIHBhc3N3b3JkIHNlY3JldFxuIgoiXG4iCiIgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCB0d2ljZSwgIHRoZSAgc2Vjb25kICB3aWxsICBhZ2FpblxuIgoiICAgICAgICAgIGRpc2FibGUgbmV0cmMgdXNhZ2UuXG4iCiJcbiIKIiAgICAgLU4vLS1uby1idWZmZXJcbiIKKTsKIHB1dHMoCiIgICAgICAgICAgRGlzYWJsZXMgIHRoZSBidWZmZXJpbmcgb2YgdGhlIG91dHB1dCBzdHJlYW0uIEluIG5vcm1hbFxuIgoiICAgICAgICAgIHdvcmsgc2l0dWF0aW9ucywgY3VybCB3aWxsIHVzZSBhIHN0YW5kYXJkIGJ1ZmZlcmVkIG91dK1cbiIKIiAgICAgICAgICBwdXQgIHN0cmVhbSB0aGF0IHdpbGwgaGF2ZSB0aGUgZWZmZWN0IHRoYXQgaXQgd2lsbCBvdXStXG4iCiIgICAgICAgICAgcHV0IHRoZSBkYXRhIGluIGNodW5rcywgbm90ICBuZWNlc3NhcmlseSAgZXhhY3RseSAgd2hlblxuIgoiICAgICAgICAgIHRoZSAgZGF0YSBhcnJpdmVzLiAgVXNpbmcgdGhpcyBvcHRpb24gd2lsbCBkaXNhYmxlIHRoYXRcbiIKIiAgICAgICAgICBidWZmZXJpbmcuXG4iCiIgICAgICAgICAgSWYgdGhpcyBvcHRpb24gaXMgdXNlZCB0d2ljZSwgIHRoZSAgc2Vjb25kICB3aWxsICBhZ2FpblxuIgoiICAgICAgICAgIHN3aXRjaCBvbiBidWZmZXJpbmcuXG4iCiJcbiIKIiAgICAgLW8vLS1vdXRwdXQgPGZpbGU+XG4iCik7CiBwdXRzKAoiICAgICAgICAgIFdyaXRlICBvdXRwdXQgIHRvICA8ZmlsZT4gaW5zdGVhZCBvZiBzdGRvdXQuIElmIHlvdSBhcmVcbiIKIiAgICAgICAgICB1c2luZyB7fSBvciBbXSB0byBmZXRjaCBtdWx0aXBsZSBkb2N1bWVudHMsIHlvdSBjYW4gdXNlXG4iCiIgICAgICAgICAgJyMnICBmb2xsb3dlZCBieSBhIG51bWJlciBpbiB0aGUgPGZpbGU+IHNwZWNpZmllci4gVGhhdFxuIgoiICAgICAgICAgIHZhcmlhYmxlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgY3VycmVudCAgc3RyaW5nICBmb3JcbiIKIiAgICAgICAgICB0aGUgVVJMIGJlaW5nIGZldGNoZWQuIExpa2UgaW46XG4iCiJcbiIKIiAgICAgICAgICAgIGN1cmwgaHR0cDovL3tvbmUsdHdvfS5zaXRlLmNvbSAtbyBcImZpbGVfIzEudHh0XCJcbiIKIlxuIgoiICAgICAgICAgIG9yIHVzZSBzZXZlcmFsIHZhcmlhYmxlcyBsaWtlOlxuIgoiXG4iCiIgICAgICAgICAgICBjdXJsIGh0dHA6Ly97c2l0ZSxob3N0fS5ob3N0WzEtNV0uY29tIC1vIFwiIzFfIzJcIlxuIgoiXG4iCik7CiBwdXRzKAoiICAgICAgICAgIFlvdSAgbWF5IHVzZSB0aGlzIG9wdGlvbiBhcyBtYW55IHRpbWVzIGFzIHlvdSBoYXZlIG51ba1cbiIKIiAgICAgICAgICBiZXIgb2YgVVJMcy5cbiIKIlxuIgoiICAgICAtTy8tLXJlbW90ZS1uYW1lXG4iCiIgICAgICAgICAgV3JpdGUgb3V0cHV0IHRvIGEgbG9jYWwgZmlsZSBuYW1lZCBsaWtlIHRoZSByZW1vdGUgZmlsZVxuIgoiICAgICAgICAgIHdlIGdldC4gKE9ubHkgdGhlIGZpbGUgcGFydCBvZiB0aGUgcmVtb3RlIGZpbGUgaXMgdXNlZCxcbiIKIiAgICAgICAgICB0aGUgcGF0aCBpcyBjdXQgb2ZmLilcbiIKIlxuIgoiICAgICAgICAgIFlvdSBtYXkgdXNlIHRoaXMgb3B0aW9uIGFzIG1hbnkgdGltZXMgYXMgeW91IGhhdmUgIG51ba1cbiIKIiAgICAgICAgICBiZXIgb2YgVVJMcy5cbiIKIlxuIgoiICAgICAtcC8tLXByb3h5dHVubmVsXG4iCiIgICAgICAgICAgV2hlbiBhbiBIVFRQIHByb3h5IGlzIHVzZWQsIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2Ugbm9uLVxuIgopOwogcHV0cygKIiAgICAgICAgICBIVFRQIHByb3RvY29scyB0byBhdHRlbXB0IHRvIHR1bm5lbCB0aHJvdWdoICB0aGUgIHByb3h5XG4iCiIgICAgICAgICAgaW5zdGVhZCAgb2YgbWVyZWx5IHVzaW5nIGl0IHRvIGRvIEhUVFAtbGlrZSBvcGVyYXRpb25zLlxuIgoiICAgICAgICAgIFRoZSB0dW5uZWwgYXBwcm9hY2ggaXMgbWFkZSB3aXRoIHRoZSBIVFRQIHByb3h5IENPTk5FQ1RcbiIKIiAgICAgICAgICByZXF1ZXN0ICBhbmQgcmVxdWlyZXMgdGhhdCB0aGUgcHJveHkgYWxsb3dzIGRpcmVjdCBjb26tXG4iCiIgICAgICAgICAgbmVjdCB0byB0aGUgcmVtb3RlIHBvcnQgbnVtYmVyICBjdXJsICB3YW50cyAgdG8gIHR1bm5lbFxuIgoiICAgICAgICAgIHRocm91Z2ggdG8uXG4iCiJcbiIKIiAgICAgICAgICBJZiAgdGhpcyAgb3B0aW9uICBpcyAgdXNlZCB0d2ljZSwgdGhlIHNlY29uZCB3aWxsIGFnYWluXG4iCiIgICAgICAgICAgZGlzYWJsZSBwcm94eSB0dW5uZWwuXG4iCiJcbiIKIiAgICAgLVAvLS1mdHBwb3J0IDxhZGRyZXNzPlxuIgopOwogcHV0cygKIiAgICAgICAgICAoRlRQKSBSZXZlcnNlcyB0aGUgaW5pdGlhdG9yL2xpc3RlbmVyIHJvbGVzICB3aGVuICBjb26tXG4iCiIgICAgICAgICAgbmVjdGluZyAgd2l0aCAgZnRwLiBUaGlzIHN3aXRjaCBtYWtlcyBDdXJsIHVzZSB0aGUgUE9SVFxuIgoiICAgICAgICAgIGNvbW1hbmQgaW5zdGVhZCBvZiBQQVNWLiBJbiBwcmFjdGljZSwgIFBPUlQgIHRlbGxzICB0aGVcbiIKIiAgICAgICAgICBzZXJ2ZXIgdG8gY29ubmVjdCB0byB0aGUgY2xpZW50J3Mgc3BlY2lmaWVkIGFkZHJlc3MgYW5kXG4iCiIgICAgICAgICAgcG9ydCwgd2hpbGUgUEFTViBhc2tzIHRoZSBzZXJ2ZXIgZm9yIGFuIGlwIGFkZHJlc3MgIGFuZFxuIgoiICAgICAgICAgIHBvcnQgdG8gY29ubmVjdCB0by4gPGFkZHJlc3M+IHNob3VsZCBiZSBvbmUgb2Y6XG4iCiJcbiIKIiAgICAgICAgICBpbnRlcmZhY2UgICBpLmUgIFwiZXRoMFwiIHRvIHNwZWNpZnkgd2hpY2ggaW50ZXJmYWNlJ3MgSVBcbiIKKTsKIHB1dHMoCiIgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyB5b3Ugd2FudCB0byB1c2UgIChVbml4IG9ubHkpXG4iCiJcbiIKIiAgICAgICAgICBJUCBhZGRyZXNzICBpLmUgXCIxOTIuMTY4LjEwLjFcIiB0byBzcGVjaWZ5IGV4YWN0IElQIG51ba1cbiIKIiAgICAgICAgICAgICAgICAgICAgICBiZXJcbiIKIiAgICAgICAgICBob3N0IG5hbWUgICBpLmUgXCJteS5ob3N0LmRvbWFpblwiIHRvIHNwZWNpZnkgbWFjaGluZVxuIgoiXG4iCiIgICAgICAgICAgLSAgICAgICAgICAgKGFueSAgc2luZ2xlLWxldHRlciBzdHJpbmcpIHRvIG1ha2UgaXQgcGlja1xuIgoiICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYWNoaW5lJ3MgZGVmYXVsdFxuIgoiXG4iCiIgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lICB3aWxsICBiZVxuIgoiICAgICB1c2VkLlxuIgoiXG4iCiIgICAgIC1xICAgSWYgdXNlZCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZVxuIgopOwogcHV0cygKIiAgICAgICAgICAkSE9NRS8uY3VybHJjIGZpbGUgd2lsbCBub3QgYmUgcmVhZCBhbmQgdXNlZCBhcyBhICBjb26tXG4iCiIgICAgICAgICAgZmlnIGZpbGUuXG4iCiJcbiIKIiAgICAgLVEvLS1xdW90ZSA8Y29tYW5kPlxuIgoiICAgICAgICAgIChGVFApICBTZW5kICBhbiAgYXJiaXRyYXJ5ICBjb21tYW5kICB0byAgdGhlIHJlbW90ZSBGVFBcbiIKIiAgICAgICAgICBzZXJ2ZXIsIGJ5IHVzaW5nIHRoZSBRVU9URSBjb21tYW5kIG9mIHRoZSAgc2VydmVyLiAgTm90XG4iCiIgICAgICAgICAgYWxsICBzZXJ2ZXJzIHN1cHBvcnQgdGhpcyBjb21tYW5kLCBhbmQgdGhlIHNldCBvZiBRVU9URVxuIgoiICAgICAgICAgIGNvbW1hbmRzIGFyZSBzZXJ2ZXIgc3BlY2lmaWMhIFF1b3RlIGNvbW1hbmRzICBhcmUgIHNlbnRcbiIKIiAgICAgICAgICBCRUZPUkUgIHRoZSAgdHJhbnNmZXIgaXMgdGFraW5nIHBsYWNlLiBUbyBtYWtlIGNvbW1hbmRzXG4iCik7CiBwdXRzKAoiICAgICAgICAgIHRha2UgcGxhY2UgYWZ0ZXIgYSAgc3VjY2Vzc2Z1bCAgdHJhbnNmZXIsICBwcmVmaXggIHRoZW1cbiIKIiAgICAgICAgICB3aXRoIGEgZGFzaCAnLScuIFlvdSBtYXkgc3BlY2lmeSBhbnkgYW1vdW50IG9mIGNvbW1hbmRzXG4iCiIgICAgICAgICAgdG8gYmUgcnVuIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHRyYW5zZmVyLiBJZiB0aGUgIHNlcnZlclxuIgoiICAgICAgICAgIHJldHVybnMgIGZhaWx1cmUgIGZvciAgb25lICBvZiB0aGUgY29tbWFuZHMsIHRoZSBlbnRpcmVcbiIKIiAgICAgICAgICBvcGVyYXRpb24gd2lsbCBiZSBhYm9ydGVkLlxuIgoiXG4iCiIgICAgICAgICAgVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMuXG4iCiJcbiIKIiAgICAgLS1yYW5kb20tZmlsZSA8ZmlsZT5cbiIKIiAgICAgICAgICAoSFRUUFMpIFNwZWNpZnkgdGhlIHBhdGggbmFtZSB0byBmaWxlICBjb250YWluaW5nICB3aGF0XG4iCik7CiBwdXRzKAoiICAgICAgICAgIHdpbGwgIGJlIGNvbnNpZGVyZWQgYXMgcmFuZG9tIGRhdGEuIFRoZSBkYXRhIGlzIHVzZWQgdG9cbiIKIiAgICAgICAgICBzZWVkIHRoZSByYW5kb20gZW5naW5lIGZvciBTU0wgY29ubmVjdGlvbnMuICAgU2VlICBhbHNvXG4iCiIgICAgICAgICAgdGhlIC0tZWRnLWZpbGUgb3B0aW9uLlxuIgoiXG4iCiIgICAgIC1yLy0tcmFuZ2UgPHJhbmdlPlxuIgoiICAgICAgICAgIChIVFRQL0ZUUCkgIFJldHJpZXZlICBhIGJ5dGUgcmFuZ2UgKGkuZSBhIHBhcnRpYWwgZG9jda1cbiIKIiAgICAgICAgICBtZW50KSBmcm9tIGEgSFRUUC8xLjEgb3IgIEZUUCAgc2VydmVyLiAgUmFuZ2VzICBjYW4gIGJlXG4iCiIgICAgICAgICAgc3BlY2lmaWVkIGluIGEgbnVtYmVyIG9mIHdheXMuXG4iCiJcbiIKIiAgICAgICAgICAwLTQ5OSAgICAgc3BlY2lmaWVzIHRoZSBmaXJzdCA1MDAgYnl0ZXNcbiIKIlxuIgoiICAgICAgICAgIDUwMC05OTkgICBzcGVjaWZpZXMgdGhlIHNlY29uZCA1MDAgYnl0ZXNcbiIKIlxuIgopOwogcHV0cygKIiAgICAgICAgICAtNTAwICAgICAgc3BlY2lmaWVzIHRoZSBsYXN0IDUwMCBieXRlc1xuIgoiXG4iCiIgICAgICAgICAgOTUwMCAgICAgIHNwZWNpZmllcyB0aGUgYnl0ZXMgZnJvbSBvZmZzZXQgOTUwMCBhbmQgZm9yrVxuIgoiICAgICAgICAgICAgICAgICAgICB3YXJkXG4iCiJcbiIKIiAgICAgICAgICAwLTAsLTEgICAgc3BlY2lmaWVzIHRoZSBmaXJzdCBhbmQgbGFzdCBieXRlIG9ubHkoKikoSClcbiIKIlxuIgoiICAgICAgICAgIDUwMC03MDAsNjAwLTc5OVxuIgoiICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgMzAwIGJ5dGVzIGZyb20gb2Zmc2V0IDUwMChIKVxuIgoiXG4iCiIgICAgICAgICAgMTAwLTE5OSw1MDAtNTk5XG4iCiIgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyB0d28gc2VwYXJhdGUgMTAwIGJ5dGVzIHJhbmdlcygqKShIKVxuIgoiXG4iCiIgICAgICgqKSAgPSAgTk9URSB0aGF0IHRoaXMgd2lsbCBjYXVzZSB0aGUgc2VydmVyIHRvIHJlcGx5IHdpdGggYVxuIgoiICAgICBtdWx0aXBhcnQgcmVzcG9uc2UhXG4iCiJcbiIKKTsKIHB1dHMoCiIgICAgIFlvdSBzaG91bGQgYWxzbyBiZSBhd2FyZSB0aGF0IG1hbnkgSFRUUC8xLjEgc2VydmVycyAgZG8gIG5vdFxuIgoiICAgICBoYXZlIHRoaXMgZmVhdHVyZSBlbmFibGVkLCBzbyB0aGF0IHdoZW4geW91IGF0dGVtcHQgdG8gZ2V0IGFcbiIKIiAgICAgcmFuZ2UsIHlvdSdsbCBpbnN0ZWFkIGdldCB0aGUgd2hvbGUgZG9jdW1lbnQuXG4iCiJcbiIKIiAgICAgRlRQIHJhbmdlIGRvd25sb2FkcyBvbmx5IHN1cHBvcnQgdGhlIHNpbXBsZSAgc3ludGF4ICAnc3RhcnQtXG4iCiIgICAgIHN0b3AnICAob3B0aW9uYWxseSAgd2l0aCAgb25lICBvZiAgdGhlICBudW1iZXJzIG9taXR0ZWQpLiBJdFxuIgoiICAgICBkZXBlbmRzIG9uIHRoZSBub24tUkZDIGNvbW1hbmQgU0laRS5cbiIKIlxuIgoiICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSAgd2lsbCAgYmVcbiIKIiAgICAgdXNlZC5cbiIKIlxuIgoiICAgICAtcy8tLXNpbGVudFxuIgopOwogcHV0cygKIiAgICAgICAgICBTaWxlbnQgIG1vZGUuICBEb24ndCAgc2hvdyBwcm9ncmVzcyBtZXRlciBvciBlcnJvciBtZXOtXG4iCiIgICAgICAgICAgc2FnZXMuICBNYWtlcyBDdXJsIG11dGUuXG4iCiJcbiIKIiAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHR3aWNlLCAgdGhlICBzZWNvbmQgIHdpbGwgIGFnYWluXG4iCiIgICAgICAgICAgZGlzYWJsZSBtdXRlLlxuIgoiXG4iCiIgICAgIC1TLy0tc2hvdy1lcnJvclxuIgoiICAgICAgICAgIFdoZW4gIHVzZWQgIHdpdGggLXMgaXQgbWFrZXMgY3VybCBzaG93IGVycm9yIG1lc3NhZ2UgaWZcbiIKIiAgICAgICAgICBpdCBmYWlscy5cbiIKIlxuIgoiICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgdHdpY2UsICB0aGUgIHNlY29uZCAgd2lsbCAgYWdhaW5cbiIKIiAgICAgICAgICBkaXNhYmxlIHNob3cgZXJyb3IuXG4iCiJcbiIKIiAgICAgLXQvLS10ZWxuZXQtb3B0aW9uIDxPUFQ9dmFsPlxuIgoiICAgICAgICAgIFBhc3MgIG9wdGlvbnMgdG8gdGhlIHRlbG5ldCBwcm90b2NvbC4gU3VwcG9ydGVkIG9wdGlvbnNcbiIKKTsKIHB1dHMoCiIgICAgICAgICAgYXJlOlxuIgoiXG4iCiIgICAgICAgICAgVFRZUEU9PHRlcm0+IFNldHMgdGhlIHRlcm1pbmFsIHR5cGUuXG4iCiJcbiIKIiAgICAgICAgICBYRElTUExPQz08WCBkaXNwbGF5PiBTZXRzIHRoZSBYIGRpc3BsYXkgbG9jYXRpb24uXG4iCiJcbiIKIiAgICAgICAgICBORVdfRU5WPTx2YXIsdmFsPiBTZXRzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLlxuIgoiXG4iCiIgICAgIC1ULy0tdXBsb2FkLWZpbGUgPGZpbGU+XG4iCiIgICAgICAgICAgTGlrZSAtdCwgYnV0IHRoaXMgdHJhbnNmZXJzIHRoZSBzcGVjaWZpZWQgIGxvY2FsICBmaWxlLlxuIgoiICAgICAgICAgIElmICB0aGVyZSAgaXMgIG5vICBmaWxlIHBhcnQgaW4gdGhlIHNwZWNpZmllZCBVUkwsIEN1cmxcbiIKIiAgICAgICAgICB3aWxsIGFwcGVuZCB0aGUgbG9jYWwgZmlsZSBuYW1lLiBOT1RFIHRoYXQgeW91IG11c3QgdXNlXG4iCiIgICAgICAgICAgYSAgdHJhaWxpbmcgIC8gb24gdGhlIGxhc3QgZGlyZWN0b3J5IHRvIHJlYWxseSBwcm92ZSB0b1xuIgopOwogcHV0cygKIiAgICAgICAgICBDdXJsIHRoYXQgdGhlcmUgaXMgbm8gZmlsZSBuYW1lIG9yIGN1cmwgd2lsbCB0aGluayB0aGF0XG4iCiIgICAgICAgICAgeW91ciAgbGFzdCAgZGlyZWN0b3J5ICBuYW1lICBpcyB0aGUgcmVtb3RlIGZpbGUgbmFtZSB0b1xuIgoiICAgICAgICAgIHVzZS4gVGhhdCB3aWxsIG1vc3QgbGlrZWx5IGNhdXNlIHRoZSAgdXBsb2FkICBvcGVyYXRpb25cbiIKIiAgICAgICAgICB0byAgZmFpbC4gIElmIHRoaXMgaXMgdXNlZCBvbiBhIGh0dHAocykgc2VydmVyLCB0aGUgUFVUXG4iCiIgICAgICAgICAgY29tbWFuZCB3aWxsIGJlIHVzZWQuXG4iCiJcbiIKIiAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsXG4iCiIgICAgICAgICAgYmUgdXNlZC5cbiIKIlxuIgoiICAgICAtdS8tLXVzZXIgPHVzZXI6cGFzc3dvcmQ+XG4iCiIgICAgICAgICAgU3BlY2lmeSAgdXNlciAgYW5kICBwYXNzd29yZCAgdG8gdXNlIHdoZW4gZmV0Y2hpbmcuIFNlZVxuIgopOwogcHV0cygKIiAgICAgICAgICBSRUFETUUuY3VybCBmb3IgZGV0YWlsZWQgZXhhbXBsZXMgb2YgaG93IHRvICB1c2UgIHRoaXMuXG4iCiIgICAgICAgICAgSWYgIG5vICBwYXNzd29yZCAgaXMgIHNwZWNpZmllZCwgIGN1cmwgIHdpbGwgYXNrIGZvciBpdFxuIgoiICAgICAgICAgIGludGVyYWN0aXZlbHkuXG4iCiJcbiIKIiAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsXG4iCiIgICAgICAgICAgYmUgdXNlZC5cbiIKIlxuIgoiICAgICAtVS8tLXByb3h5LXVzZXIgPHVzZXI6cGFzc3dvcmQ+XG4iCiIgICAgICAgICAgU3BlY2lmeSAgdXNlciBhbmQgcGFzc3dvcmQgdG8gdXNlIGZvciBQcm94eSBhdXRoZW50aWNhrVxuIgoiICAgICAgICAgIHRpb24uIElmIG5vIHBhc3N3b3JkIGlzIHNwZWNpZmllZCwgY3VybCB3aWxsIGFzayBmb3IgaXRcbiIKIiAgICAgICAgICBpbnRlcmFjdGl2ZWx5LlxuIgoiXG4iCik7CiBwdXRzKAoiICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGxcbiIKIiAgICAgICAgICBiZSB1c2VkLlxuIgoiXG4iCiIgICAgIC0tdXJsIDxVUkw+XG4iCiIgICAgICAgICAgU3BlY2lmeSBhIFVSTCB0byBmZXRjaC4gVGhpcyAgb3B0aW9uICBpcyAgbW9zdGx5ICBoYW5keVxuIgoiICAgICAgICAgIHdoZW4geW91IHdhbm5hIHNwZWNpZnkgVVJMKHMpIGluIGEgY29uZmlnIGZpbGUuXG4iCiJcbiIKIiAgICAgICAgICBUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZCBhbnkgbnVtYmVyIG9mIHRpbWVzLiBUbyBjb250cm9sXG4iCiIgICAgICAgICAgd2hlcmUgdGhpcyBVUkwgIGlzICB3cml0dGVuLCAgdXNlICB0aGUgIC1vICBvciAgdGhlICAtT1xuIgoiICAgICAgICAgIG9wdGlvbnMuXG4iCiJcbiIKIiAgICAgLXYvLS12ZXJib3NlXG4iCiIgICAgICAgICAgTWFrZXMgICB0aGUgIGZldGNoaW5nICBtb3JlICB2ZXJib3NlL3RhbGthdGl2ZS4gIE1vc3RseVxuIgopOwogcHV0cygKIiAgICAgICAgICB1c2FibGUgZm9yIGRlYnVnZ2luZy4gTGluZXMgIHN0YXJ0aW5nICB3aXRoICAnPicgIG1lYW5zXG4iCiIgICAgICAgICAgZGF0YSBzZW50IGJ5IGN1cmwsICc8JyBtZWFucyBkYXRhIHJlY2VpdmVkIGJ5IGN1cmwgdGhhdFxuIgoiICAgICAgICAgIGlzIGhpZGRlbiBpbiBub3JtYWwgY2FzZXMgYW5kIGxpbmVzIHN0YXJ0aW5nICB3aXRoICAnKidcbiIKIiAgICAgICAgICBtZWFucyBhZGRpdGlvbmFsIGluZm8gcHJvdmlkZWQgYnkgY3VybC5cbiIKIlxuIgoiICAgICAgICAgIElmICB0aGlzICBvcHRpb24gIGlzICB1c2VkIHR3aWNlLCB0aGUgc2Vjb25kIHdpbGwgYWdhaW5cbiIKIiAgICAgICAgICBkaXNhYmxlIHZlcmJvc2UuXG4iCiJcbiIKIiAgICAgLVYvLS12ZXJzaW9uXG4iCiIgICAgICAgICAgRGlzcGxheXMgdGhlIGZ1bGwgdmVyc2lvbiBvZiBjdXJsLCAgbGliY3VybCAgYW5kICBvdGhlclxuIgoiICAgICAgICAgIDNyZCBwYXJ0eSBsaWJyYXJpZXMgbGlua2VkIHdpdGggdGhlIGV4ZWN1dGFibGUuXG4iCiJcbiIKKTsKIHB1dHMoCiIgICAgIC13Ly0td3JpdGUtb3V0IDxmb3JtYXQ+XG4iCiIgICAgICAgICAgRGVmaW5lcyAgd2hhdCB0byBkaXNwbGF5IGFmdGVyIGEgY29tcGxldGVkIGFuZCBzdWNjZXNzrVxuIgoiICAgICAgICAgIGZ1bCBvcGVyYXRpb24uIFRoZSBmb3JtYXQgaXMgYSBzdHJpbmcgdGhhdCBtYXkgIGNvbnRhaW5cbiIKIiAgICAgICAgICBwbGFpbiAgdGV4dCAgbWl4ZWQgIHdpdGggIGFueSAgbnVtYmVyIG9mIHZhcmlhYmxlcy4gVGhlXG4iCiIgICAgICAgICAgc3RyaW5nIGNhbiBiZSBzcGVjaWZpZWQgYXMgXCJzdHJpbmdcIiwgdG8gZ2V0IHJlYWQgZnJvbSBhXG4iCiIgICAgICAgICAgcGFydGljdWxhciAgZmlsZSB5b3Ugc3BlY2lmeSBpdCBcIkBmaWxlbmFtZVwiIGFuZCB0byB0ZWxsXG4iCiIgICAgICAgICAgY3VybCB0byByZWFkIHRoZSBmb3JtYXQgZnJvbSBzdGRpbiB5b3Ugd3JpdGUgXCJALVwiLlxuIgoiXG4iCiIgICAgICAgICAgVGhlIHZhcmlhYmxlcyBwcmVzZW50IGluIHRoZSBvdXRwdXQgZm9ybWF0IHdpbGwgYmUgc3VirVxuIgopOwogcHV0cygKIiAgICAgICAgICBzdGl0dXRlZCAgYnkgdGhlIHZhbHVlIG9yIHRleHQgdGhhdCBjdXJsIHRoaW5rcyBmaXQsIGFzXG4iCiIgICAgICAgICAgZGVzY3JpYmVkICBiZWxvdy4gIEFsbCAgdmFyaWFibGVzICBhcmUgIHNwZWNpZmllZCAgbGlrZVxuIgoiICAgICAgICAgICV7dmFyaWFibGVfbmFtZX0gIGFuZCAgdG8gIG91dHB1dCAgYSAgbm9ybWFsICUgeW91IGp1c3RcbiIKIiAgICAgICAgICB3cml0ZSB0aGVtIGxpa2UgJSUuIFlvdSBjYW4gb3V0cHV0IGEgbmV3bGluZSAgYnkgIHVzaW5nXG4iCiIgICAgICAgICAgXFxuLCBhIGNhcnJpZ2UgcmV0dXJuIHdpdGggXFxyIGFuZCBhIHRhYiBzcGFjZSB3aXRoIFxcdC5cbiIKIlxuIgoiICAgICAgICAgIE5PVEU6ICAgVGhlICAgJS1sZXR0ZXIgIGlzICBhICBzcGVjaWFsICBsZXR0ZXIgIGluICB0aGVcbiIKIiAgICAgICAgICB3aW4zMi1lbnZpcm9ubWVudCwgd2hlcmUgYWxsIG9jY3VycmVuY2VzIG9mICUgIG11c3QgIGJlXG4iCik7CiBwdXRzKAoiICAgICAgICAgIGRvdWJsZWQgd2hlbiB1c2luZyB0aGlzIG9wdGlvbi5cbiIKIlxuIgoiICAgICAgICAgIEF2YWlsYWJsZSB2YXJpYWJsZXMgYXJlIGF0IHRoaXMgcG9pbnQ6XG4iCiJcbiIKIiAgICAgICAgICB1cmxfZWZmZWN0aXZlICBUaGUgIFVSTCAgdGhhdCB3YXMgZmV0Y2hlZCBsYXN0LiBUaGlzIGlzXG4iCiIgICAgICAgICAgICAgICAgICAgICAgICAgbW9zdGx5IG1lYW5pbmdmdWwgaWYgeW91J3ZlIHRvbGQgY3VybCB0b1xuIgoiICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvdyBsb2NhdGlvbjogaGVhZGVycy5cbiIKIlxuIgoiICAgICAgICAgIGh0dHBfY29kZSAgICAgIFRoZSBudW1lcmljYWwgY29kZSB0aGF0IHdhcyBmb3VuZCBpbiB0aGVcbiIKIiAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IHJldHJpZXZlZCBIVFRQKFMpIHBhZ2UuXG4iCiJcbiIKIiAgICAgICAgICB0aW1lX3RvdGFsICAgICBUaGUgdG90YWwgdGltZSwgIGluICBzZWNvbmRzLCAgdGhhdCAgdGhlXG4iCik7CiBwdXRzKAoiICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGwgIG9wZXJhdGlvbiBsYXN0ZWQuIFRoZSB0aW1lIHdpbGwgYmVcbiIKIiAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ZWQgd2l0aCBtaWxsaXNlY29uZCByZXNvbHV0aW9uLlxuIgoiXG4iCiIgICAgICAgICAgdGltZV9uYW1lbG9va3VwXG4iCiIgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHRpbWUsIGluIHNlY29uZHMsIGl0IHRvb2sgIGZyb20gIHRoZVxuIgoiICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICB1bnRpbCB0aGUgbmFtZSByZXNvbHZpbmcgd2FzIGNvba1cbiIKIiAgICAgICAgICAgICAgICAgICAgICAgICBwbGV0ZWQuXG4iCiJcbiIKIiAgICAgICAgICB0aW1lX2Nvbm5lY3QgICBUaGUgdGltZSwgaW4gc2Vjb25kcywgaXQgdG9vayAgZnJvbSAgdGhlXG4iCiIgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgIHVudGlsICB0aGUgIGNvbm5lY3QgdG8gdGhlIHJlbW90ZVxuIgopOwogcHV0cygKIiAgICAgICAgICAgICAgICAgICAgICAgICBob3N0IChvciBwcm94eSkgd2FzIGNvbXBsZXRlZC5cbiIKIlxuIgoiICAgICAgICAgIHRpbWVfcHJldHJhbnNmZXJcbiIKIiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGltZSwgaW4gc2Vjb25kcywgaXQgdG9vayAgZnJvbSAgdGhlXG4iCiIgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgIHVudGlsICB0aGUgIGZpbGUgdHJhbnNmZXIgaXMganVzdFxuIgoiICAgICAgICAgICAgICAgICAgICAgICAgIGFib3V0IHRvIGJlZ2luLiBUaGlzIGluY2x1ZGVzICBhbGwgIHByZS1cbiIKIiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlciAgY29tbWFuZHMgYW5kIG5lZ290aWF0aW9ucyB0aGF0XG4iCiIgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIHNwZWNpZmljIHRvICB0aGUgIHBhcnRpY3VsYXIgIHByb3RvrVxuIgoiICAgICAgICAgICAgICAgICAgICAgICAgIGNvbChzKSBpbnZvbHZlZC5cbiIKIlxuIgopOwogcHV0cygKIiAgICAgICAgICBzaXplX2Rvd25sb2FkICBUaGUgIHRvdGFsICBhbW91bnQgIG9mICBieXRlcyAgdGhhdCB3ZXJlXG4iCiIgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRlZC5cbiIKIlxuIgoiICAgICAgICAgIHNpemVfdXBsb2FkICAgIFRoZSB0b3RhbCAgYW1vdW50ICBvZiAgYnl0ZXMgIHRoYXQgIHdlcmVcbiIKIiAgICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRlZC5cbiIKIlxuIgoiICAgICAgICAgIHNpemVfaGVhZGVyICAgIFRoZSAgdG90YWwgIGFtb3VudCBvZiBieXRlcyBvZiB0aGUgZG93bq1cbiIKIiAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQgaGVhZGVycy5cbiIKIlxuIgoiICAgICAgICAgIHNpemVfcmVxdWVzdCAgIFRoZSB0b3RhbCBhbW91bnQgb2YgYnl0ZXMgdGhhdCB3ZXJlIHNlbnRcbiIKIiAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgSFRUUCByZXF1ZXN0LlxuIgoiXG4iCiIgICAgICAgICAgc3BlZWRfZG93bmxvYWQgVGhlICBhdmVyYWdlICBkb3dubG9hZCAgc3BlZWQgIHRoYXQgY3VybFxuIgopOwogcHV0cygKIiAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZCBmb3IgdGhlIGNvbXBsZXRlIGRvd25sb2FkLlxuIgoiICAgICAgICAgIHNwZWVkX3VwbG9hZCAgIFRoZSBhdmVyYWdlIHVwbG9hZCBzcGVlZCB0aGF0IGN1cmwgIG1lYa1cbiIKIiAgICAgICAgICAgICAgICAgICAgICAgICBzdXJlZCBmb3IgdGhlIGNvbXBsZXRlIHVwbG9hZC5cbiIKIlxuIgoiICAgICBJZiAgdGhpcyAgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGwgYmVcbiIKIiAgICAgdXNlZC5cbiIKIlxuIgoiICAgICAteC8tLXByb3h5IDxwcm94eWhvc3RbOnBvcnRdPlxuIgoiICAgICAgICAgIFVzZSBzcGVjaWZpZWQgcHJveHkuIElmIHRoZSBwb3J0IG51bWJlciBpcyAgbm90ICBzcGVjaa1cbiIKIiAgICAgICAgICBmaWVkLCBpdCBpcyBhc3N1bWVkIGF0IHBvcnQgMTA4MC5cbiIKIlxuIgoiICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGxcbiIKIiAgICAgICAgICBiZSB1c2VkLlxuIgoiXG4iCik7CiBwdXRzKAoiICAgICAtWC8tLXJlcXVlc3QgPGNvbW1hbmQ+XG4iCiIgICAgICAgICAgKEhUVFApIFNwZWNpZmllcyBhIGN1c3RvbSByZXF1ZXN0IHRvIHVzZSB3aGVuICBjb21tdW5prVxuIgoiICAgICAgICAgIGNhdGluZyAgd2l0aCAgdGhlICBIVFRQICBzZXJ2ZXIuICBUaGUgc3BlY2lmaWVkIHJlcXVlc3RcbiIKIiAgICAgICAgICB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgR0VULiBSZWFkIHRoZSBIVFRQXG4iCiIgICAgICAgICAgMS4xIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbHMgYW5kIGV4cGxhbmF0aW9ucy5cbiIKIlxuIgoiICAgICAgICAgIChGVFApICBTcGVjaWZpZXMgYSBjdXN0b20gRlRQIGNvbW1hbmQgdG8gdXNlIGluc3RlYWQgb2ZcbiIKIiAgICAgICAgICBMSVNUIHdoZW4gZG9pbmcgZmlsZSBsaXN0cyB3aXRoIGZ0cC5cbiIKIlxuIgoiICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGxcbiIKIiAgICAgICAgICBiZSB1c2VkLlxuIgoiXG4iCik7CiBwdXRzKAoiICAgICAteS8tLXNwZWVkLXRpbWUgPHRpbWU+XG4iCiIgICAgICAgICAgSWYgYSBkb3dubG9hZCBpcyBzbG93ZXIgdGhhbiBzcGVlZC1saW1pdCBieXRlcyBwZXIgc2VjrVxuIgoiICAgICAgICAgIG9uZCBkdXJpbmcgIGEgIHNwZWVkLXRpbWUgIHBlcmlvZCwgIHRoZSAgZG93bmxvYWQgIGdldHNcbiIKIiAgICAgICAgICBhYm9ydGVkLiBJZiBzcGVlZC10aW1lIGlzIHVzZWQsIHRoZSBkZWZhdWx0IHNwZWVkLWxpbWl0XG4iCiIgICAgICAgICAgd2lsbCBiZSAxIHVubGVzcyBzZXQgd2l0aCAteS5cbiIKIlxuIgoiICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGxcbiIKIiAgICAgICAgICBiZSB1c2VkLlxuIgoiXG4iCiIgICAgIC1ZLy0tc3BlZWQtbGltaXQgPHNwZWVkPlxuIgoiICAgICAgICAgIElmIGEgZG93bmxvYWQgaXMgc2xvd2VyIHRoYW4gdGhpcyBnaXZlbiBzcGVlZCwgaW4gYnl0ZXNcbiIKKTsKIHB1dHMoCiIgICAgICAgICAgcGVyIHNlY29uZCwgZm9yIHNwZWVkLXRpbWUgIHNlY29uZHMgIGl0ICBnZXRzICBhYm9ydGVkLlxuIgoiICAgICAgICAgIHNwZWVkLXRpbWUgaXMgc2V0IHdpdGggLVkgYW5kIGlzIDMwIGlmIG5vdCBzZXQuXG4iCiJcbiIKIiAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsXG4iCiIgICAgICAgICAgYmUgdXNlZC5cbiIKIlxuIgoiICAgICAtei8tLXRpbWUtY29uZCA8ZGF0ZSBleHByZXNzaW9uPlxuIgoiICAgICAgICAgIChIVFRQKSBSZXF1ZXN0IHRvIGdldCBhIGZpbGUgIHRoYXQgIGhhcyAgYmVlbiAgbW9kaWZpZWRcbiIKIiAgICAgICAgICBsYXRlciAgdGhhbiAgdGhlICBnaXZlbiAgdGltZSBhbmQgZGF0ZSwgb3Igb25lIHRoYXQgaGFzXG4iCiIgICAgICAgICAgYmVlbiBtb2RpZmllZCBiZWZvcmUgdGhhdCB0aW1lLiBUaGUgZGF0ZSBleHByZXNzaW9uIGNhblxuIgopOwogcHV0cygKIiAgICAgICAgICBiZSBhbGwgc29ydHMgb2YgZGF0ZSBzdHJpbmdzIG9yIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggYW55XG4iCiIgICAgICAgICAgaW50ZXJuYWwgb25lcywgaXQgdHJpZXMgdG8gZ2V0IHRoZSB0aW1lICBmcm9tICBhICBnaXZlblxuIgoiICAgICAgICAgIGZpbGUgIG5hbWUgIGluc3RlYWQhICBTZWUgIHRoZSBHTlUgZGF0ZSgxKSBvciBjdXJsX2dldK1cbiIKIiAgICAgICAgICBkYXRlKDMpIG1hbiBwYWdlcyBmb3IgZGF0ZSBleHByZXNzaW9uIGRldGFpbHMuXG4iCiJcbiIKIiAgICAgICAgICBTdGFydCB0aGUgZGF0ZSBleHByZXNzaW9uIHdpdGggYSBkYXNoICgtKSAgdG8gIG1ha2UgIGl0XG4iCiIgICAgICAgICAgcmVxdWVzdCAgZm9yICBhICBkb2N1bWVudCAgdGhhdCBpcyBvbGRlciB0aGFuIHRoZSBnaXZlblxuIgoiICAgICAgICAgIGRhdGUvdGltZSwgZGVmYXVsdCBpcyBhIGRvY3VtZW50IHRoYXQgaXMgbmV3ZXIgdGhhbiB0aGVcbiIKIiAgICAgICAgICBzcGVjaWZpZWQgZGF0ZS90aW1lLlxuIgoiXG4iCik7CiBwdXRzKAoiICAgICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgdGhlIGxhc3Qgb25lIHdpbGxcbiIKIiAgICAgICAgICBiZSB1c2VkLlxuIgoiXG4iCiIgICAgIC0zLy0tc3NsdjNcbiIKIiAgICAgICAgICAoSFRUUFMpIEZvcmNlcyBjdXJsIHRvIHVzZSBTU0wgdmVyc2lvbiAzIHdoZW4gbmVnb3RpYXStXG4iCiIgICAgICAgICAgaW5nIHdpdGggYSByZW1vdGUgU1NMIHNlcnZlci5cbiIKIlxuIgoiICAgICAtMi8tLXNzbHYyXG4iCiIgICAgICAgICAgKEhUVFBTKSBGb3JjZXMgY3VybCB0byB1c2UgU1NMIHZlcnNpb24gMiB3aGVuIG5lZ290aWF0rVxuIgoiICAgICAgICAgIGluZyB3aXRoIGEgcmVtb3RlIFNTTCBzZXJ2ZXIuXG4iCiJcbiIKIiAgICAgLSMvLS1wcm9ncmVzcy1iYXJcbiIKIiAgICAgICAgICBNYWtlIGN1cmwgZGlzcGxheSBwcm9ncmVzcyBpbmZvcm1hdGlvbiAgYXMgIGEgIHByb2dyZXNzXG4iCiIgICAgICAgICAgYmFyIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgc3RhdGlzdGljcy5cbiIKIlxuIgopOwogcHV0cygKIiAgICAgICAgICBJZiAgdGhpcyAgb3B0aW9uICBpcyAgdXNlZCB0d2ljZSwgdGhlIHNlY29uZCB3aWxsIGFnYWluXG4iCiIgICAgICAgICAgZGlzYWJsZSB0aGUgcHJvZ3Jlc3MgYmFyLlxuIgoiXG4iCiIgICAgIC0tY3JsZlxuIgoiICAgICAgICAgIChGVFApIENvbnZlcnQgTEYgdG8gQ1JMRiAgaW4gIHVwbG9hZC4gIFVzZWZ1bCAgZm9yICBNVlNcbiIKIiAgICAgICAgICAoT1MvMzkwKS5cbiIKIlxuIgoiICAgICAgICAgIElmICB0aGlzICBvcHRpb24gIGlzICB1c2VkIHR3aWNlLCB0aGUgc2Vjb25kIHdpbGwgYWdhaW5cbiIKIiAgICAgICAgICBkaXNhYmxlIGNybGYgY29udmVydGluZy5cbiIKIlxuIgoiICAgICAtLXN0ZGVyciA8ZmlsZT5cbiIKIiAgICAgICAgICBSZWRpcmVjdCBhbGwgd3JpdGVzIHRvIHN0ZGVyciAgdG8gIHRoZSAgc3BlY2lmaWVkICBmaWxlXG4iCiIgICAgICAgICAgaW5zdGVhZC4gSWYgdGhlIGZpbGUgbmFtZSBpcyBhIHBsYWluICctJywgaXQgaXMgaW5zdGVhZFxuIgopOwogcHV0cygKIiAgICAgICAgICB3cml0dGVuIHRvIHN0ZG91dC4gVGhpcyBvcHRpb24gaGFzIG5vIHBvaW50IHdoZW4geW91J3JlXG4iCiIgICAgICAgICAgdXNpbmcgYSBzaGVsbCB3aXRoIGRlY2VudCByZWRpcmVjdGluZyBjYXBhYmlsaXRpZXMuXG4iCiJcbiIKIiAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHNldmVyYWwgdGltZXMsIHRoZSBsYXN0IG9uZSB3aWxsXG4iCiIgICAgICAgICAgYmUgdXNlZC5cbiIKIlxuIgoiRklMRVNcbiIKIiAgICAgfi8uY3VybHJjXG4iCiIgICAgICAgICAgRGVmYXVsdCBjb25maWcgZmlsZS5cbiIKIlxuIgoiRU5WSVJPTk1FTlRcbiIKIiAgICAgSFRUUF9QUk9YWSBbcHJvdG9jb2w6Ly9dPGhvc3Q+Wzpwb3J0XVxuIgoiICAgICAgICAgIFNldHMgcHJveHkgc2VydmVyIHRvIHVzZSBmb3IgSFRUUC5cbiIKIlxuIgoiICAgICBIVFRQU19QUk9YWSBbcHJvdG9jb2w6Ly9dPGhvc3Q+Wzpwb3J0XVxuIgoiICAgICAgICAgIFNldHMgcHJveHkgc2VydmVyIHRvIHVzZSBmb3IgSFRUUFMuXG4iCiJcbiIKKTsKIHB1dHMoCiIgICAgIEZUUF9QUk9YWSBbcHJvdG9jb2w6Ly9dPGhvc3Q+Wzpwb3J0XVxuIgoiICAgICAgICAgIFNldHMgcHJveHkgc2VydmVyIHRvIHVzZSBmb3IgRlRQLlxuIgoiICAgICBHT1BIRVJfUFJPWFkgW3Byb3RvY29sOi8vXTxob3N0Pls6cG9ydF1cbiIKIiAgICAgICAgICBTZXRzIHByb3h5IHNlcnZlciB0byB1c2UgZm9yIEdPUEhFUi5cbiIKIlxuIgoiICAgICBBTExfUFJPWFkgW3Byb3RvY29sOi8vXTxob3N0Pls6cG9ydF1cbiIKIiAgICAgICAgICBTZXRzIHByb3h5IHNlcnZlciB0byB1c2UgaWYgbm8gcHJvdG9jb2wtc3BlY2lmaWMgIHByb3h5XG4iCiIgICAgICAgICAgaXMgc2V0LlxuIgoiXG4iCiIgICAgIE5PX1BST1hZIDxjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBob3N0cz5cbiIKIiAgICAgICAgICBsaXN0IG9mIGhvc3QgbmFtZXMgdGhhdCBzaG91bGRuJ3QgZ28gdGhyb3VnaCBhbnkgcHJveHkuXG4iCiIgICAgICAgICAgSWYgc2V0IHRvIGEgYXN0ZXJpc2sgJyonIG9ubHksIGl0IG1hdGNoZXMgYWxsIGhvc3RzLlxuIgoiXG4iCik7CiBwdXRzKAoiICAgICBDT0xVTU5TIDxpbnRlZ2VyPlxuIgoiICAgICAgICAgIFRoZSB3aWR0aCBvZiB0aGUgdGVybWluYWwuICBUaGlzIHZhcmlhYmxlIG9ubHkgIGFmZmVjdHNcbiIKIiAgICAgICAgICBjdXJsIHdoZW4gdGhlIC0tcHJvZ3Jlc3MtYmFyIG9wdGlvbiBpcyB1c2VkLlxuIgoiXG4iCiJFWElUIENPREVTXG4iCiIgICAgIFRoZXJlIGV4aXN0cyBhIGJ1bmNoIG9mIGRpZmZlcmVudCBlcnJvciBjb2RlcyBhbmQgdGhlaXIgY29yrVxuIgoiICAgICByZXNwb25kaW5nIGVycm9yIG1lc3NhZ2VzIHRoYXQgbWF5IGFwcGVhciBkdXJpbmcgYmFkICBjb25kaa1cbiIKIiAgICAgdGlvbnMuIEF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZywgdGhlIGV4aXQgY29kZXMgYXJlOlxuIgoiXG4iCiIgICAgIDEgICAgVW5zdXBwb3J0ZWQgcHJvdG9jb2wuIFRoaXMgYnVpbGQgb2YgY3VybCBoYXMgbm8gc3VwcG9ydFxuIgoiICAgICAgICAgIGZvciB0aGlzIHByb3RvY29sLlxuIgoiXG4iCiIgICAgIDIgICAgRmFpbGVkIHRvIGluaXRpYWxpemUuXG4iCiJcbiIKKTsKIHB1dHMoCiIgICAgIDMgICAgVVJMIG1hbGZvcm1hdC4gVGhlIHN5bnRheCB3YXMgbm90IGNvcnJlY3QuXG4iCiJcbiIKIiAgICAgNCAgICBVUkwgdXNlciBtYWxmb3JtYXR0ZWQuIFRoZSB1c2VyLXBhcnQgb2YgdGhlIFVSTCAgc3ludGF4XG4iCiIgICAgICAgICAgd2FzIG5vdCBjb3JyZWN0LlxuIgoiXG4iCiIgICAgIDUgICAgQ291bGRuJ3QgIHJlc29sdmUgcHJveHkuIFRoZSBnaXZlbiBwcm94eSBob3N0IGNvdWxkIG5vdFxuIgoiICAgICAgICAgIGJlIHJlc29sdmVkLlxuIgoiXG4iCiIgICAgIDYgICAgQ291bGRuJ3QgcmVzb2x2ZSBob3N0LiBUaGUgZ2l2ZW4gcmVtb3RlICBob3N0ICB3YXMgIG5vdFxuIgoiICAgICAgICAgIHJlc29sdmVkLlxuIgoiXG4iCiIgICAgIDcgICAgRmFpbGVkIHRvIGNvbm5lY3QgdG8gaG9zdC5cbiIKIlxuIgoiICAgICA4ICAgIEZUUCAgd2VpcmQgIHNlcnZlciAgcmVwbHkuICBUaGUgIHNlcnZlciAgc2VudCBkYXRhIGN1cmxcbiIKIiAgICAgICAgICBjb3VsZG4ndCBwYXJzZS5cbiIKIlxuIgopOwogcHV0cygKIiAgICAgOSAgICBGVFAgYWNjZXNzIGRlbmllZC4gVGhlIHNlcnZlciBkZW5pZWQgbG9naW4uXG4iCiJcbiIKIiAgICAgMTAgICBGVFAgdXNlci9wYXNzd29yZCBpbmNvcnJlY3QuIEVpdGhlciBvbmUgIG9yICBib3RoICB3ZXJlXG4iCiIgICAgICAgICAgbm90IGFjY2VwdGVkIGJ5IHRoZSBzZXJ2ZXIuXG4iCiJcbiIKIiAgICAgMTEgICBGVFAgIHdlaXJkICBQQVNTICByZXBseS4gIEN1cmwgY291bGRuJ3QgcGFyc2UgdGhlIHJlcGx5XG4iCiIgICAgICAgICAgc2VudCB0byB0aGUgUEFTUyByZXF1ZXN0LlxuIgoiXG4iCiIgICAgIDEyICAgRlRQIHdlaXJkIFVTRVIgcmVwbHkuIEN1cmwgIGNvdWxkbid0ICBwYXJzZSAgdGhlICByZXBseVxuIgoiICAgICAgICAgIHNlbnQgdG8gdGhlIFVTRVIgcmVxdWVzdC5cbiIKIiAgICAgMTMgICBGVFAgIHdlaXJkICBQQVNWICByZXBseSwgIEN1cmwgY291bGRuJ3QgcGFyc2UgdGhlIHJlcGx5XG4iCiIgICAgICAgICAgc2VudCB0byB0aGUgUEFTViByZXF1ZXN0LlxuIgoiXG4iCik7CiBwdXRzKAoiICAgICAxNCAgIEZUUCB3ZWlyZCAyMjcgZm9ybWF0LiBDdXJsIGNvdWxkbid0IHBhcnNlIHRoZSAgMjI3LWxpbmVcbiIKIiAgICAgICAgICB0aGUgc2VydmVyIHNlbnQuXG4iCiJcbiIKIiAgICAgMTUgICBGVFAgY2FuJ3QgZ2V0IGhvc3QuIENvdWxkbid0IHJlc29sdmUgdGhlIGhvc3QgSVAgd2UgZ290XG4iCiIgICAgICAgICAgaW4gdGhlIDIyNy1saW5lLlxuIgoiXG4iCiIgICAgIDE2ICAgRlRQIGNhbid0IHJlY29ubmVjdC4gQ291bGRuJ3QgY29ubmVjdCB0byAgdGhlICBob3N0ICB3ZVxuIgoiICAgICAgICAgIGdvdCBpbiB0aGUgMjI3LWxpbmUuXG4iCiJcbiIKIiAgICAgMTcgICBGVFAgIGNvdWxkbid0ICBzZXQgIGJpbmFyeS4gIENvdWxkbid0ICBjaGFuZ2UgIHRyYW5zZmVyXG4iCiIgICAgICAgICAgbWV0aG9kIHRvIGJpbmFyeS5cbiIKIlxuIgoiICAgICAxOCAgIFBhcnRpYWwgZmlsZS4gT25seSBhIHBhcnQgb2YgdGhlIGZpbGUgd2FzIHRyYW5zZmVyZWQuXG4iCiJcbiIKKTsKIHB1dHMoCiIgICAgIDE5ICAgRlRQIGNvdWxkbid0IFJFVFIgZmlsZS4gVGhlIFJFVFIgY29tbWFuZCBmYWlsZWQuXG4iCiJcbiIKIiAgICAgMjAgICBGVFAgd3JpdGUgZXJyb3IuIFRoZSB0cmFuc2ZlciB3YXMgcmVwb3J0ZWQgYmFkICBieSAgdGhlXG4iCiIgICAgICAgICAgc2VydmVyLlxuIgoiXG4iCiIgICAgIDIxICAgRlRQICBxdW90ZSAgZXJyb3IuICBBIHF1b3RlIGNvbW1hbmQgcmV0dXJuZWQgZXJyb3IgZnJvbVxuIgoiICAgICAgICAgIHRoZSBzZXJ2ZXIuXG4iCiJcbiIKIiAgICAgMjIgICBIVFRQIG5vdCBmb3VuZC4gVGhlIHJlcXVlc3RlZCBwYWdlIHdhcyBub3QgZm91bmQuICBUaGlzXG4iCiIgICAgICAgICAgcmV0dXJuIGNvZGUgb25seSBhcHBlYXJzIGlmIC0tZmFpbCBpcyB1c2VkLlxuIgoiXG4iCiIgICAgIDIzICAgV3JpdGUgIGVycm9yLiAgQ3VybCAgY291bGRuJ3QgIHdyaXRlICBkYXRhICB0byAgYSBsb2NhbFxuIgoiICAgICAgICAgIGZpbGVzeXN0ZW0gb3Igc2ltaWxhci5cbiIKIlxuIgopOwogcHV0cygKIiAgICAgMjQgICBNYWxmb3JtYXQgdXNlci4gVXNlciBuYW1lIGJhZGx5IHNwZWNpZmllZC5cbiIKIlxuIgoiICAgICAyNSAgIEZUUCBjb3VsZG4ndCBTVE9SIGZpbGUuICBUaGUgIHNlcnZlciAgZGVuaWVkICB0aGUgIFNUT1JcbiIKIiAgICAgICAgICBvcGVyYXRpb24uXG4iCiJcbiIKIiAgICAgMjYgICBSZWFkIGVycm9yLiBWYXJpb3VzIHJlYWRpbmcgcHJvYmxlbXMuXG4iCiJcbiIKIiAgICAgMjcgICBPdXQgb2YgbWVtb3J5LiBBIG1lbW9yeSBhbGxvY2F0aW9uIHJlcXVlc3QgZmFpbGVkLlxuIgoiXG4iCiIgICAgIDI4ICAgT3BlcmF0aW9uICB0aW1lb3V0LiAgVGhlICBzcGVjaWZpZWQgdGltZS1vdXQgcGVyaW9kIHdhc1xuIgoiICAgICAgICAgIHJlYWNoZWQgYWNjb3JkaW5nIHRvIHRoZSBjb25kaXRpb25zLlxuIgoiXG4iCiIgICAgIDI5ICAgRlRQIGNvdWxkbid0IHNldCBBU0NJSS4gVGhlIHNlcnZlciByZXR1cm5lZCBhbiAgdW5rbm93blxuIgoiICAgICAgICAgIHJlcGx5LlxuIgoiXG4iCik7CiBwdXRzKAoiICAgICAzMCAgIEZUUCBQT1JUIGZhaWxlZC4gVGhlIFBPUlQgY29tbWFuZCBmYWlsZWQuXG4iCiJcbiIKIiAgICAgMzEgICBGVFAgY291bGRuJ3QgdXNlIFJFU1QuIFRoZSBSRVNUIGNvbW1hbmQgZmFpbGVkLlxuIgoiXG4iCiIgICAgIDMyICAgRlRQICBjb3VsZG4ndCAgdXNlICBTSVpFLiAgVGhlIFNJWkUgY29tbWFuZCBmYWlsZWQuIFRoZVxuIgoiICAgICAgICAgIGNvbW1hbmQgaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBvcmlnaW5hbCAgRlRQICBzcGVjICBSRkNcbiIKIiAgICAgICAgICA5NTkuXG4iCiJcbiIKIiAgICAgMzMgICBIVFRQIHJhbmdlIGVycm9yLiBUaGUgcmFuZ2UgXCJjb21tYW5kXCIgZGlkbid0IHdvcmsuXG4iCiJcbiIKIiAgICAgMzQgICBIVFRQICAgcG9zdCAgZXJyb3IuICBJbnRlcm5hbCAgcG9zdC1yZXF1ZXN0ICBnZW5lcmF0aW9uXG4iCiIgICAgICAgICAgZXJyb3IuXG4iCiJcbiIKIiAgICAgMzUgICBTU0wgY29ubmVjdCBlcnJvci4gVGhlIFNTTCBoYW5kc2hha2luZyBmYWlsZWQuXG4iCiJcbiIKKTsKIHB1dHMoCiIgICAgIDM2ICAgRlRQIGJhZCBkb3dubG9hZCByZXN1bWUuIENvdWxkbid0IGNvbnRpbnVlICBhbiAgZWFybGllclxuIgoiICAgICAgICAgIGFib3J0ZWQgZG93bmxvYWQuXG4iCiJcbiIKIiAgICAgMzcgICBGSUxFICBjb3VsZG4ndCByZWFkIGZpbGUuIEZhaWxlZCB0byBvcGVuIHRoZSBmaWxlLiBQZXKtXG4iCiIgICAgICAgICAgbWlzc2lvbnM/XG4iCiJcbiIKIiAgICAgMzggICBMREFQIGNhbm5vdCBiaW5kLiBMREFQIGJpbmQgb3BlcmF0aW9uIGZhaWxlZC5cbiIKIlxuIgoiICAgICAzOSAgIExEQVAgc2VhcmNoIGZhaWxlZC5cbiIKIlxuIgoiICAgICA0MCAgIExpYnJhcnkgbm90IGZvdW5kLiBUaGUgTERBUCBsaWJyYXJ5IHdhcyBub3QgZm91bmQuXG4iCiJcbiIKIiAgICAgNDEgICBGdW5jdGlvbiBub3QgZm91bmQuIEEgcmVxdWlyZWQgTERBUCAgZnVuY3Rpb24gIHdhcyAgbm90XG4iCiIgICAgICAgICAgZm91bmQuXG4iCiJcbiIKIiAgICAgNDIgICBBYm9ydGVkICBieSBjYWxsYmFjay4gQW4gYXBwbGljYXRpb24gdG9sZCBjdXJsIHRvIGFib3J0XG4iCik7CiBwdXRzKAoiICAgICAgICAgIHRoZSBvcGVyYXRpb24uXG4iCiJcbiIKIiAgICAgNDMgICBJbnRlcm5hbCBlcnJvci4gQSBmdW5jdGlvbiB3YXMgY2FsbGVkIHdpdGggYSBiYWQgcGFyYW2tXG4iCiIgICAgICAgICAgZXRlci5cbiIKIlxuIgoiICAgICA0NCAgIEludGVybmFsIGVycm9yLiBBIGZ1bmN0aW9uIHdhcyBjYWxsZWQgaW4gYSBiYWQgb3JkZXIuXG4iCiJcbiIKIiAgICAgNDUgICBJbnRlcmZhY2UgIGVycm9yLiAgQSBzcGVjaWZpZWQgb3V0Z29pbmcgaW50ZXJmYWNlIGNvdWxkXG4iCiIgICAgICAgICAgbm90IGJlIHVzZWQuXG4iCiJcbiIKIiAgICAgNDYgICBCYWQgcGFzc3dvcmQgZW50ZXJlZC4gQW4gZXJyb3Igd2FzIHNpZ25hbGxlZCAgd2hlbiAgdGhlXG4iCiIgICAgICAgICAgcGFzc3dvcmQgd2FzIGVudGVyZWQuXG4iCiJcbiIKIiAgICAgNDcgICBUb28gIG1hbnkgcmVkaXJlY3RzLiBXaGVuIGZvbGxvd2luZyByZWRpcmVjdHMsIGN1cmwgaGl0XG4iCiIgICAgICAgICAgdGhlIG1heGltdW0gYW1vdW50LlxuIgoiXG4iCik7CiBwdXRzKAoiICAgICA0OCAgIFVua25vd24gVEVMTkVUIG9wdGlvbiBzcGVjaWZpZWQuXG4iCiJcbiIKIiAgICAgNDkgICBNYWxmb3JtZWQgdGVsbmV0IG9wdGlvbi5cbiIKIlxuIgoiICAgICBYWCAgIFRoZXJlIHdpbGwgYXBwZWFyICBtb3JlICBlcnJvciAgY29kZXMgIGhlcmUgIGluICBmdXR1cmVcbiIKIiAgICAgICAgICByZWxlYXNlcy4gIFRoZSBleGlzdGluZyBvbmVzIGFyZSBtZWFudCB0byBuZXZlciBjaGFuZ2UuXG4iCiJcbiIKIkJVR1NcbiIKIiAgICAgSWYgeW91IGRvIGZpbmQgYnVncywgbWFpbCB0aGVtIHRvIGN1cmwtYnVnQGhheHguc2UuXG4iCiJBVVRIT1JTIC8gQ09OVFJJQlVUT1JTXG4iCiIgICAgIERhbmllbCBTdGVuYmVyZyBpcyB0aGUgbWFpbiBhdXRob3IsIGJ1dCB0aGUgIHdob2xlICBsaXN0ICBvZlxuIgoiICAgICBjb250cmlidXRvcnMgaXMgZm91bmQgaW4gdGhlIHNlcGFyYXRlIFRIQU5LUyBmaWxlLlxuIgoiXG4iCiJXV1dcbiIKIiAgICAgaHR0cDovL2N1cmwuaGF4eC5zZVxuIgoiXG4iCiJGVFBcbiIKKTsKIHB1dHMoCiIgICAgIGZ0cDovL2Z0cC5zdW5ldC5zZS9wdWIvd3d3L3V0aWxpdGllcy9jdXJsL1xuIgoiXG4iCiJTRUUgQUxTT1xuIgoiICAgICBmdHAoMSksIHdnZXQoMSksIHNuYXJmKDEpXG4iCiJcbiIKIkxBVEVTVCBWRVJTSU9OXG4iCiJcbiIKIiAgWW91IGFsd2F5cyBmaW5kIG5ld3MgYWJvdXQgd2hhdCdzIGdvaW5nIG9uIGFzIHdlbGwgYXMgdGhlIGxhdGVzdCB2ZXJzaW9uc1xuIgoiICBmcm9tIHRoZSBjdXJsIHdlYiBwYWdlcywgbG9jYXRlZCBhdDpcbiIKIlxuIgoiICAgICAgICBodHRwOi8vY3VybC5oYXh4LnNlXG4iCiJcbiIKIlNJTVBMRSBVU0FHRVxuIgoiXG4iCiIgIEdldCB0aGUgbWFpbiBwYWdlIGZyb20gbmV0c2NhcGUncyB3ZWItc2VydmVyOlxuIgoiXG4iCiIgICAgICAgIGN1cmwgaHR0cDovL3d3dy5uZXRzY2FwZS5jb20vXG4iCiJcbiIKIiAgR2V0IHRoZSByb290IFJFQURNRSBmaWxlIGZyb20gZnVuZXQncyBmdHAtc2VydmVyOlxuIgoiXG4iCiIgICAgICAgIGN1cmwgZnRwOi8vZnRwLmZ1bmV0LmZpL1JFQURNRVxuIgoiXG4iCiIgIEdldCBhIHdlYiBwYWdlIGZyb20gYSBzZXJ2ZXIgdXNpbmcgcG9ydCA4MDAwOlxuIgoiXG4iCik7CiBwdXRzKAoiICAgICAgICBjdXJsIGh0dHA6Ly93d3cud2VpcmRzZXJ2ZXIuY29tOjgwMDAvXG4iCiJcbiIKIiAgR2V0IGEgbGlzdCBvZiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgYW4gRlRQIHNpdGU6XG4iCiJcbiIKIiAgICAgICAgY3VybCBmdHA6Ly9jb29sLmhheHguc2UvXG4iCiJcbiIKIiAgR2V0IGEgZ29waGVyIGRvY3VtZW50IGZyb20gZnVuZXQncyBnb3BoZXIgc2VydmVyOlxuIgoiXG4iCiIgICAgICAgIGN1cmwgZ29waGVyOi8vZ29waGVyLmZ1bmV0LmZpXG4iCiJcbiIKIiAgR2V0IHRoZSBkZWZpbml0aW9uIG9mIGN1cmwgZnJvbSBhIGRpY3Rpb25hcnk6XG4iCiJcbiIKIiAgICAgICAgY3VybCBkaWN0Oi8vZGljdC5vcmcvbTpjdXJsXG4iCiJcbiIKIiAgRmV0Y2ggdHdvIGRvY3VtZW50cyBhdCBvbmNlOlxuIgoiXG4iCiIgICAgICAgIGN1cmwgZnRwOi8vY29vbC5oYXh4LnNlLyBodHRwOi8vd3d3LndlaXJkc2VydmVyLmNvbTo4MDAwL1xuIgoiXG4iCiJET1dOTE9BRCBUTyBBIEZJTEVcbiIKIlxuIgoiICBHZXQgYSB3ZWIgcGFnZSBhbmQgc3RvcmUgaW4gYSBsb2NhbCBmaWxlOlxuIgoiXG4iCik7CiBwdXRzKAoiICAgICAgICBjdXJsIC1vIHRoYXRwYWdlLmh0bWwgaHR0cDovL3d3dy5uZXRzY2FwZS5jb20vXG4iCiJcbiIKIiAgR2V0IGEgd2ViIHBhZ2UgYW5kIHN0b3JlIGluIGEgbG9jYWwgZmlsZSwgbWFrZSB0aGUgbG9jYWwgZmlsZSBnZXQgdGhlIG5hbWVcbiIKIiAgb2YgdGhlIHJlbW90ZSBkb2N1bWVudCAoaWYgbm8gZmlsZSBuYW1lIHBhcnQgaXMgc3BlY2lmaWVkIGluIHRoZSBVUkwsIHRoaXNcbiIKIiAgd2lsbCBmYWlsKTpcbiIKIlxuIgoiICAgICAgICBjdXJsIC1PIGh0dHA6Ly93d3cubmV0c2NhcGUuY29tL2luZGV4Lmh0bWxcbiIKIlxuIgoiICBGZXRjaCB0d28gZmlsZXMgYW5kIHN0b3JlIHRoZW0gd2l0aCB0aGVpciByZW1vdGUgbmFtZXM6XG4iCiJcbiIKIiAgICAgICAgY3VybCAtTyB3d3cuaGF4eC5zZS9pbmRleC5odG1sIC1PIGN1cmwuaGF4eC5zZS9kb3dubG9hZC5odG1sXG4iCiJcbiIKIlVTSU5HIFBBU1NXT1JEU1xuIgoiXG4iCiIgRlRQXG4iCiJcbiIKIiAgIFRvIGZ0cCBmaWxlcyB1c2luZyBuYW1lK3Bhc3N3ZCwgaW5jbHVkZSB0aGVtIGluIHRoZSBVUkwgbGlrZTpcbiIKIlxuIgopOwogcHV0cygKIiAgICAgICAgY3VybCBmdHA6Ly9uYW1lOnBhc3N3ZEBtYWNoaW5lLmRvbWFpbjpwb3J0L2Z1bGwvcGF0aC90by9maWxlXG4iCiJcbiIKIiAgIG9yIHNwZWNpZnkgdGhlbSB3aXRoIHRoZSAtdSBmbGFnIGxpa2VcbiIKIlxuIgoiICAgICAgICBjdXJsIC11IG5hbWU6cGFzc3dkIGZ0cDovL21hY2hpbmUuZG9tYWluOnBvcnQvZnVsbC9wYXRoL3RvL2ZpbGVcbiIKIlxuIgoiIEhUVFBcbiIKIlxuIgoiICAgVGhlIEhUVFAgVVJMIGRvZXNuJ3Qgc3VwcG9ydCB1c2VyIGFuZCBwYXNzd29yZCBpbiB0aGUgVVJMIHN0cmluZy4gQ3VybFxuIgoiICAgZG9lcyBzdXBwb3J0IHRoYXQgYW55d2F5IHRvIHByb3ZpZGUgYSBmdHAtc3R5bGUgaW50ZXJmYWNlIGFuZCB0aHVzIHlvdSBjYW5cbiIKIiAgIHBpY2sgYSBmaWxlIGxpa2U6XG4iCiJcbiIKIiAgICAgICAgY3VybCBodHRwOi8vbmFtZTpwYXNzd2RAbWFjaGluZS5kb21haW4vZnVsbC9wYXRoL3RvL2ZpbGVcbiIKIlxuIgoiICAgb3Igc3BlY2lmeSB1c2VyIGFuZCBwYXNzd29yZCBzZXBhcmF0ZWx5IGxpa2UgaW5cbiIKIlxuIgopOwogcHV0cygKIiAgICAgICAgY3VybCAtdSBuYW1lOnBhc3N3ZCBodHRwOi8vbWFjaGluZS5kb21haW4vZnVsbC9wYXRoL3RvL2ZpbGVcbiIKIlxuIgoiICAgTk9URSEgU2luY2UgSFRUUCBVUkxzIGRvbid0IHN1cHBvcnQgdXNlciBhbmQgcGFzc3dvcmQsIHlvdSBjYW4ndCB1c2UgdGhhdFxuIgoiICAgc3R5bGUgd2hlbiB1c2luZyBDdXJsIHZpYSBhIHByb3h5LiBZb3UgX211c3RfIHVzZSB0aGUgLXUgc3R5bGUgZmV0Y2hcbiIKIiAgIGR1cmluZyBzdWNoIGNpcmN1bXN0YW5jZXMuXG4iCiJcbiIKIiBIVFRQU1xuIgoiXG4iCiIgICBQcm9iYWJseSBtb3N0IGNvbW1vbmx5IHVzZWQgd2l0aCBwcml2YXRlIGNlcnRpZmljYXRlcywgYXMgZXhwbGFpbmVkIGJlbG93LlxuIgoiXG4iCiIgR09QSEVSXG4iCiJcbiIKIiAgIEN1cmwgZmVhdHVyZXMgbm8gcGFzc3dvcmQgc3VwcG9ydCBmb3IgZ29waGVyLlxuIgoiXG4iCiJQUk9YWVxuIgoiXG4iCiIgR2V0IGFuIGZ0cCBmaWxlIHVzaW5nIGEgcHJveHkgbmFtZWQgbXktcHJveHkgdGhhdCB1c2VzIHBvcnQgODg4OlxuIgoiXG4iCik7CiBwdXRzKAoiICAgICAgICBjdXJsIC14IG15LXByb3h5Ojg4OCBmdHA6Ly9mdHAubGVhY2hzaXRlLmNvbS9SRUFETUVcbiIKIlxuIgoiIEdldCBhIGZpbGUgZnJvbSBhIEhUVFAgc2VydmVyIHRoYXQgcmVxdWlyZXMgdXNlciBhbmQgcGFzc3dvcmQsIHVzaW5nIHRoZVxuIgoiIHNhbWUgcHJveHkgYXMgYWJvdmU6XG4iCiJcbiIKIiAgICAgICAgY3VybCAtdSB1c2VyOnBhc3N3ZCAteCBteS1wcm94eTo4ODggaHR0cDovL3d3dy5nZXQudGhpcy9cbiIKIlxuIgoiIFNvbWUgcHJveGllcyByZXF1aXJlIHNwZWNpYWwgYXV0aGVudGljYXRpb24uIFNwZWNpZnkgYnkgdXNpbmcgLVUgYXMgYWJvdmU6XG4iCiJcbiIKIiAgICAgICAgY3VybCAtVSB1c2VyOnBhc3N3ZCAteCBteS1wcm94eTo4ODggaHR0cDovL3d3dy5nZXQudGhpcy9cbiIKIlxuIgoiIFNlZSBhbHNvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgQ3VybCBzdXBwb3J0IHRoYXQgb2ZmZXIgZnVydGhlciBwcm94eVxuIgoiIGNvbnRyb2wuXG4iCiJcbiIKIlJBTkdFU1xuIgoiXG4iCik7CiBwdXRzKAoiICBXaXRoIEhUVFAgMS4xIGJ5dGUtcmFuZ2VzIHdlcmUgaW50cm9kdWNlZC4gVXNpbmcgdGhpcywgYSBjbGllbnQgY2FuIHJlcXVlc3RcbiIKIiAgdG8gZ2V0IG9ubHkgb25lIG9yIG1vcmUgc3VicGFydHMgb2YgYSBzcGVjaWZpZWQgZG9jdW1lbnQuIEN1cmwgc3VwcG9ydHNcbiIKIiAgdGhpcyB3aXRoIHRoZSAtciBmbGFnLlxuIgoiXG4iCiIgIEdldCB0aGUgZmlyc3QgMTAwIGJ5dGVzIG9mIGEgZG9jdW1lbnQ6XG4iCiJcbiIKIiAgICAgICAgY3VybCAtciAwLTk5IGh0dHA6Ly93d3cuZ2V0LnRoaXMvXG4iCiJcbiIKIiAgR2V0IHRoZSBsYXN0IDUwMCBieXRlcyBvZiBhIGRvY3VtZW50OlxuIgoiXG4iCiIgICAgICAgIGN1cmwgLXIgLTUwMCBodHRwOi8vd3d3LmdldC50aGlzL1xuIgoiXG4iCiIgIEN1cmwgYWxzbyBzdXBwb3J0cyBzaW1wbGUgcmFuZ2VzIGZvciBGVFAgZmlsZXMgYXMgd2VsbC4gVGhlbiB5b3UgY2FuIG9ubHlcbiIKIiAgc3BlY2lmeSBzdGFydCBhbmQgc3RvcCBwb3NpdGlvbi5cbiIKIlxuIgopOwogcHV0cygKIiAgR2V0IHRoZSBmaXJzdCAxMDAgYnl0ZXMgb2YgYSBkb2N1bWVudCB1c2luZyBGVFA6XG4iCiJcbiIKIiAgICAgICAgY3VybCAtciAwLTk5IGZ0cDovL3d3dy5nZXQudGhpcy9SRUFETUUgIFxuIgoiXG4iCiJVUExPQURJTkdcbiIKIlxuIgoiIEZUUFxuIgoiXG4iCiIgIFVwbG9hZCBhbGwgZGF0YSBvbiBzdGRpbiB0byBhIHNwZWNpZmllZCBmdHAgc2l0ZTpcbiIKIlxuIgoiICAgICAgICBjdXJsIC10IGZ0cDovL2Z0cC51cGxvYWQuY29tL215ZmlsZVxuIgoiXG4iCiIgIFVwbG9hZCBkYXRhIGZyb20gYSBzcGVjaWZpZWQgZmlsZSwgbG9naW4gd2l0aCB1c2VyIGFuZCBwYXNzd29yZDpcbiIKIlxuIgoiICAgICAgICBjdXJsIC1UIHVwbG9hZGZpbGUgLXUgdXNlcjpwYXNzd2QgZnRwOi8vZnRwLnVwbG9hZC5jb20vbXlmaWxlXG4iCiJcbiIKIiAgVXBsb2FkIGEgbG9jYWwgZmlsZSB0byB0aGUgcmVtb3RlIHNpdGUsIGFuZCB1c2UgdGhlIGxvY2FsIGZpbGUgbmFtZSByZW1vdGVcbiIKIiAgdG9vOlxuIgoiIFxuIgopOwogcHV0cygKIiAgICAgICAgY3VybCAtVCB1cGxvYWRmaWxlIC11IHVzZXI6cGFzc3dkIGZ0cDovL2Z0cC51cGxvYWQuY29tL1xuIgoiXG4iCiIgIFVwbG9hZCBhIGxvY2FsIGZpbGUgdG8gZ2V0IGFwcGVuZGVkIHRvIHRoZSByZW1vdGUgZmlsZSB1c2luZyBmdHA6XG4iCiJcbiIKIiAgICAgICAgY3VybCAtVCBsb2NhbGZpbGUgLWEgZnRwOi8vZnRwLnVwbG9hZC5jb20vcmVtb3RlZmlsZVxuIgoiXG4iCiIgIEN1cmwgYWxzbyBzdXBwb3J0cyBmdHAgdXBsb2FkIHRocm91Z2ggYSBwcm94eSwgYnV0IG9ubHkgaWYgdGhlIHByb3h5IGlzXG4iCiIgIGNvbmZpZ3VyZWQgdG8gYWxsb3cgdGhhdCBraW5kIG9mIHR1bm5lbGluZy4gSWYgaXQgZG9lcywgeW91IGNhbiBydW4gY3VybCBpblxuIgoiICBhIGZhc2hpb24gc2ltaWxhciB0bzpcbiIKIlxuIgoiICAgICAgICBjdXJsIC0tcHJveHl0dW5uZWwgLXggcHJveHk6cG9ydCAtVCBsb2NhbGZpbGUgZnRwLnVwbG9hZC5jb21cbiIKIlxuIgoiIEhUVFBcbiIKIlxuIgopOwogcHV0cygKIiAgVXBsb2FkIGFsbCBkYXRhIG9uIHN0ZGluIHRvIGEgc3BlY2lmaWVkIGh0dHAgc2l0ZTpcbiIKIlxuIgoiICAgICAgICBjdXJsIC10IGh0dHA6Ly93d3cudXBsb2FkLmNvbS9teWZpbGVcbiIKIlxuIgoiICBOb3RlIHRoYXQgdGhlIGh0dHAgc2VydmVyIG11c3QndmUgYmVlbiBjb25maWd1cmVkIHRvIGFjY2VwdCBQVVQgYmVmb3JlIHRoaXNcbiIKIiAgY2FuIGJlIGRvbmUgc3VjY2Vzc2Z1bGx5LlxuIgoiXG4iCiIgIEZvciBvdGhlciB3YXlzIHRvIGRvIGh0dHAgZGF0YSB1cGxvYWQsIHNlZSB0aGUgUE9TVCBzZWN0aW9uIGJlbG93LlxuIgoiXG4iCiJWRVJCT1NFIC8gREVCVUdcbiIKIlxuIgoiICBJZiBjdXJsIGZhaWxzIHdoZXJlIGl0IGlzbid0IHN1cHBvc2VkIHRvLCBpZiB0aGUgc2VydmVycyBkb24ndCBsZXQgeW91XG4iCiIgIGluLCBpZiB5b3UgY2FuJ3QgdW5kZXJzdGFuZCB0aGUgcmVzcG9uc2VzOiB1c2UgdGhlIC12IGZsYWcgdG8gZ2V0IFZFUkJPU0VcbiIKKTsKIHB1dHMoCiIgIGZldGNoaW5nLiBDdXJsIHdpbGwgb3V0cHV0IGxvdHMgb2YgaW5mbyBhbmQgYWxsIGRhdGEgaXQgc2VuZHMgYW5kXG4iCiIgIHJlY2VpdmVzIGluIG9yZGVyIHRvIGxldCB0aGUgdXNlciBzZWUgYWxsIGNsaWVudC1zZXJ2ZXIgaW50ZXJhY3Rpb24uXG4iCiJcbiIKIiAgICAgICAgY3VybCAtdiBmdHA6Ly9mdHAudXBsb2FkLmNvbS9cbiIKIlxuIgoiREVUQUlMRUQgSU5GT1JNQVRJT05cbiIKIlxuIgoiICBEaWZmZXJlbnQgcHJvdG9jb2xzIHByb3ZpZGUgZGlmZmVyZW50IHdheXMgb2YgZ2V0dGluZyBkZXRhaWxlZCBpbmZvcm1hdGlvblxuIgoiICBhYm91dCBzcGVjaWZpYyBmaWxlcy9kb2N1bWVudHMuIFRvIGdldCBjdXJsIHRvIHNob3cgZGV0YWlsZWQgaW5mb3JtYXRpb25cbiIKIiAgYWJvdXQgYSBzaW5nbGUgZmlsZSwgeW91IHNob3VsZCB1c2UgLUkvLS1oZWFkIG9wdGlvbi4gSXQgZGlzcGxheXMgYWxsXG4iCik7CiBwdXRzKAoiICBhdmFpbGFibGUgaW5mbyBvbiBhIHNpbmdsZSBmaWxlIGZvciBIVFRQIGFuZCBGVFAuIFRoZSBIVFRQIGluZm9ybWF0aW9uIGlzIGFcbiIKIiAgbG90IG1vcmUgZXh0ZW5zaXZlLlxuIgoiXG4iCiIgIEZvciBIVFRQLCB5b3UgY2FuIGdldCB0aGUgaGVhZGVyIGluZm9ybWF0aW9uICh0aGUgc2FtZSBhcyAtSSB3b3VsZCBzaG93KVxuIgoiICBzaG93biBiZWZvcmUgdGhlIGRhdGEgYnkgdXNpbmcgLWkvLS1pbmNsdWRlLiBDdXJsIHVuZGVyc3RhbmRzIHRoZVxuIgoiICAtRC8tLWR1bXAtaGVhZGVyIG9wdGlvbiB3aGVuIGdldHRpbmcgZmlsZXMgZnJvbSBib3RoIEZUUCBhbmQgSFRUUCwgYW5kIGl0XG4iCiIgIHdpbGwgdGhlbiBzdG9yZSB0aGUgaGVhZGVycyBpbiB0aGUgc3BlY2lmaWVkIGZpbGUuXG4iCiJcbiIKIiAgU3RvcmUgdGhlIEhUVFAgaGVhZGVycyBpbiBhIHNlcGFyYXRlIGZpbGUgKGhlYWRlcnMudHh0IGluIHRoZSBleGFtcGxlKTpcbiIKIlxuIgopOwogcHV0cygKIiAgICAgICAgY3VybCAtLWR1bXAtaGVhZGVyIGhlYWRlcnMudHh0IGN1cmwuaGF4eC5zZVxuIgoiXG4iCiIgIE5vdGUgdGhhdCBoZWFkZXJzIHN0b3JlZCBpbiBhIHNlcGFyYXRlIGZpbGUgY2FuIGJlIHZlcnkgdXNlZnVsIGF0IGEgbGF0ZXJcbiIKIiAgdGltZSBpZiB5b3Ugd2FudCBjdXJsIHRvIHVzZSBjb29raWVzIHNlbnQgYnkgdGhlIHNlcnZlci4gTW9yZSBhYm91dCB0aGF0IGluXG4iCiIgIHRoZSBjb29raWVzIHNlY3Rpb24uXG4iCiJcbiIKIlBPU1QgKEhUVFApXG4iCiJcbiIKIiAgSXQncyBlYXN5IHRvIHBvc3QgZGF0YSB1c2luZyBjdXJsLiBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlIC1kIDxkYXRhPlxuIgoiICBvcHRpb24uICBUaGUgcG9zdCBkYXRhIG11c3QgYmUgdXJsZW5jb2RlZC5cbiIKIlxuIgoiICBQb3N0IGEgc2ltcGxlIFwibmFtZVwiIGFuZCBcInBob25lXCIgZ3Vlc3Rib29rLlxuIgoiXG4iCiIgICAgICAgIGN1cmwgLWQgXCJuYW1lPVJhZmFlbCUyMFNhZ3VsYSZwaG9uZT0zMzIwNzgwXCIgXFxcbiIKKTsKIHB1dHMoCiIgICAgICAgICAgICAgICAgaHR0cDovL3d3dy53aGVyZS5jb20vZ3Vlc3QuY2dpXG4iCiJcbiIKIiAgSG93IHRvIHBvc3QgYSBmb3JtIHdpdGggY3VybCwgbGVzc29uICMxOlxuIgoiXG4iCiIgIERpZyBvdXQgYWxsIHRoZSA8aW5wdXQ+IHRhZ3MgaW4gdGhlIGZvcm0gdGhhdCB5b3Ugd2FudCB0byBmaWxsIGluLiAoVGhlcmUnc1xuIgoiICBhIHBlcmwgcHJvZ3JhbSBjYWxsZWQgZm9ybWZpbmQucGwgb24gdGhlIGN1cmwgc2l0ZSB0aGF0IGhlbHBzIHdpdGggdGhpcykuXG4iCiJcbiIKIiAgSWYgdGhlcmUncyBhIFwibm9ybWFsXCIgcG9zdCwgeW91IHVzZSAtZCB0byBwb3N0LiAtZCB0YWtlcyBhIGZ1bGwgXCJwb3N0XG4iCiIgIHN0cmluZ1wiLCB3aGljaCBpcyBpbiB0aGUgZm9ybWF0XG4iCiJcbiIKIiAgICAgICAgPHZhcmlhYmxlMT49PGRhdGExPiY8dmFyaWFibGUyPj08ZGF0YTI+Ji4uLlxuIgoiXG4iCiIgIFRoZSAndmFyaWFibGUnIG5hbWVzIGFyZSB0aGUgbmFtZXMgc2V0IHdpdGggXCJuYW1lPVwiIGluIHRoZSA8aW5wdXQ+IHRhZ3MsIGFuZFxuIgopOwogcHV0cygKIiAgdGhlIGRhdGEgaXMgdGhlIGNvbnRlbnRzIHlvdSB3YW50IHRvIGZpbGwgaW4gZm9yIHRoZSBpbnB1dHMuIFRoZSBkYXRhICptdXN0KlxuIgoiICBiZSBwcm9wZXJseSBVUkwgZW5jb2RlZC4gVGhhdCBtZWFucyB5b3UgcmVwbGFjZSBzcGFjZSB3aXRoICsgYW5kIHRoYXQgeW91XG4iCiIgIHdyaXRlIHdlaXJkIGxldHRlcnMgd2l0aCAlWFggd2hlcmUgWFggaXMgdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mXG4iCiIgIHRoZSBsZXR0ZXIncyBBU0NJSSBjb2RlLlxuIgoiXG4iCiIgIEV4YW1wbGU6XG4iCiJcbiIKIiAgKHBhZ2UgbG9jYXRlZCBhdCBodHRwOi8vd3d3LmZvcm1wb3N0LmNvbS9nZXR0aGlzL1xuIgoiXG4iCiIgICAgICAgIDxmb3JtIGFjdGlvbj1cInBvc3QuY2dpXCIgbWV0aG9kPVwicG9zdFwiPlxuIgoiICAgICAgICA8aW5wdXQgbmFtZT11c2VyIHNpemU9MTA+XG4iCiIgICAgICAgIDxpbnB1dCBuYW1lPXBhc3MgdHlwZT1wYXNzd29yZCBzaXplPTEwPlxuIgopOwogcHV0cygKIiAgICAgICAgPGlucHV0IG5hbWU9aWQgdHlwZT1oaWRkZW4gdmFsdWU9XCJibGFibGFibGFcIj5cbiIKIiAgICAgICAgPGlucHV0IG5hbWU9ZGluZyB2YWx1ZT1cInN1Ym1pdFwiPlxuIgoiICAgICAgICA8L2Zvcm0+XG4iCiJcbiIKIiAgV2Ugd2FudCB0byBlbnRlciB1c2VyICdmb29iYXInIHdpdGggcGFzc3dvcmQgJzEyMzQ1Jy5cbiIKIlxuIgoiICBUbyBwb3N0IHRvIHRoaXMsIHlvdSBlbnRlciBhIGN1cmwgY29tbWFuZCBsaW5lIGxpa2U6XG4iCiJcbiIKIiAgICAgICAgY3VybCAtZCBcInVzZXI9Zm9vYmFyJnBhc3M9MTIzNDUmaWQ9YmxhYmxhYmxhJmRpZz1zdWJtaXRcIiAgKGNvbnRpbnVlcylcbiIKIiAgICAgICAgICBodHRwOi8vd3d3LmZvcm1wb3N0LmNvbS9nZXR0aGlzL3Bvc3QuY2dpXG4iCiJcbiIKIlxuIgoiICBXaGlsZSAtZCB1c2VzIHRoZSBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgbWltZS10eXBlLCBnZW5lcmFsbHlcbiIKKTsKIHB1dHMoCiIgIHVuZGVyc3Rvb2QgYnkgQ0dJJ3MgYW5kIHNpbWlsYXIsIGN1cmwgYWxzbyBzdXBwb3J0cyB0aGUgbW9yZSBjYXBhYmxlXG4iCiIgIG11bHRpcGFydC9mb3JtLWRhdGEgdHlwZS4gVGhpcyBsYXR0ZXIgdHlwZSBzdXBwb3J0cyB0aGluZ3MgbGlrZSBmaWxlIHVwbG9hZC5cbiIKIlxuIgoiICAtRiBhY2NlcHRzIHBhcmFtZXRlcnMgbGlrZSAtRiBcIm5hbWU9Y29udGVudHNcIi4gSWYgeW91IHdhbnQgdGhlIGNvbnRlbnRzIHRvXG4iCiIgIGJlIHJlYWQgZnJvbSBhIGZpbGUsIHVzZSA8QGZpbGVuYW1lPiBhcyBjb250ZW50cy4gV2hlbiBzcGVjaWZ5aW5nIGEgZmlsZSxcbiIKIiAgeW91IGNhbiBhbHNvIHNwZWNpZnkgdGhlIGZpbGUgY29udGVudCB0eXBlIGJ5IGFwcGVuZGluZyAnO3R5cGU9PG1pbWUgdHlwZT4nXG4iCiIgIHRvIHRoZSBmaWxlIG5hbWUuIFlvdSBjYW4gYWxzbyBwb3N0IHRoZSBjb250ZW50cyBvZiBzZXZlcmFsIGZpbGVzIGluIG9uZSBmaWVsZC5cbiIKKTsKIHB1dHMoCiIgIEZvciBleGFtcGxlLCB0aGUgZmllbGQgbmFtZSAnY29vbGZpbGVzJyBpcyB1c2VkIHRvIHNlbmQgdGhyZWUgIGZpbGVzLCB3aXRoXG4iCiIgIGRpZmZlcmVudCBjb250ZW50IHR5cGVzIHVzaW5nIHRoZSBmb2xsb3dpbmcgc3ludGF4OlxuIgoiXG4iCiIgICAgICAgIGN1cmwgLUYgXCJjb29sZmlsZXM9QGZpbDEuZ2lmO3R5cGU9aW1hZ2UvZ2lmLGZpbDIudHh0LGZpbDMuaHRtbFwiIFxcXG4iCiIgICAgICAgIGh0dHA6Ly93d3cucG9zdC5jb20vcG9zdGl0LmNnaVxuIgoiXG4iCiIgIElmIHRoZSBjb250ZW50LXR5cGUgaXMgbm90IHNwZWNpZmllZCwgY3VybCB3aWxsIHRyeSB0byBndWVzcyBmcm9tIHRoZSBmaWxlXG4iCiIgIGV4dGVuc2lvbiAgKGl0IG9ubHkga25vd3MgYSBmZXcpLCBvciB1c2UgdGhlIHByZXZpb3VzbHkgc3BlY2lmaWVkIHR5cGVcbiIKIiAgKGZyb20gYW4gZWFybGllciBmaWxlIGlmIHNldmVyYWwgZmlsZXMgYXJlIHNwZWNpZmllZCBpbiBhIGxpc3QpIG9yIGVsc2UgaXRcbiIKKTsKIHB1dHMoCiIgIHdpbGwgIHVzaW5nIHRoZSBkZWZhdWx0IHR5cGUgJ3RleHQvcGxhaW4nLlxuIgoiXG4iCiIgIEVtdWxhdGUgYSBmaWxsLWluIGZvcm0gd2l0aCAtRi4gTGV0J3Mgc2F5IHlvdSBmaWxsIGluIHRocmVlIGZpZWxkcyBpbiBhXG4iCiIgIGZvcm0uIE9uZSBmaWVsZCBpcyBhIGZpbGUgbmFtZSB3aGljaCB0byBwb3N0LCBvbmUgZmllbGQgaXMgeW91ciBuYW1lIGFuZCBvbmVcbiIKIiAgZmllbGQgaXMgYSBmaWxlIGRlc2NyaXB0aW9uLiBXZSB3YW50IHRvIHBvc3QgdGhlIGZpbGUgd2UgaGF2ZSB3cml0dGVuIG5hbWVkXG4iCiIgIFwiY29vbHRleHQudHh0XCIuIFRvIGxldCBjdXJsIGRvIHRoZSBwb3N0aW5nIG9mIHRoaXMgZGF0YSBpbnN0ZWFkIG9mIHlvdXJcbiIKIiAgZmF2b3VyaXRlIGJyb3dzZXIsIHlvdSBoYXZlIHRvIHJlYWQgdGhlIEhUTUwgc291cmNlIG9mIHRoZSBmb3JtIHBhZ2UgYW5kIGZpbmRcbiIKKTsKIHB1dHMoCiIgIHRoZSBuYW1lcyBvZiB0aGUgaW5wdXQgZmllbGRzLiBJbiBvdXIgZXhhbXBsZSwgdGhlIGlucHV0IGZpZWxkIG5hbWVzIGFyZVxuIgoiICAnZmlsZScsICd5b3VybmFtZScgYW5kICdmaWxlZGVzY3JpcHRpb24nLlxuIgoiXG4iCiIgICAgICAgIGN1cmwgLUYgXCJmaWxlPUBjb29sdGV4dC50eHRcIiAtRiBcInlvdXJuYW1lPURhbmllbFwiIFxcXG4iCiIgICAgICAgICAgICAgLUYgXCJmaWxlZGVzY3JpcHRpb249Q29vbCB0ZXh0IGZpbGUgd2l0aCBjb29sIHRleHQgaW5zaWRlXCIgXFxcbiIKIiAgICAgICAgICAgICBodHRwOi8vd3d3LnBvc3QuY29tL3Bvc3RpdC5jZ2lcbiIKIlxuIgoiICBUbyBzZW5kIHR3byBmaWxlcyBpbiBvbmUgcG9zdCB5b3UgY2FuIGRvIGl0IGluIHR3byB3YXlzOlxuIgoiXG4iCiIgIDEuIFNlbmQgbXVsdGlwbGUgZmlsZXMgaW4gYSBzaW5nbGUgXCJmaWVsZFwiIHdpdGggYSBzaW5nbGUgZmllbGQgbmFtZTpcbiIKIiBcbiIKIiAgICAgICAgY3VybCAtRiBcInBpY3R1cmVzPUBkb2cuZ2lmLGNhdC5naWZcIiBcbiIKIiBcbiIKKTsKIHB1dHMoCiIgIDIuIFNlbmQgdHdvIGZpZWxkcyB3aXRoIHR3byBmaWVsZCBuYW1lczogXG4iCiJcbiIKIiAgICAgICAgY3VybCAtRiBcImRvY3BpY3R1cmU9QGRvZy5naWZcIiAtRiBcImNhdHBpY3R1cmU9QGNhdC5naWZcIiBcbiIKIlxuIgoiUkVGRVJSRVJcbiIKIlxuIgoiICBBIEhUVFAgcmVxdWVzdCBoYXMgdGhlIG9wdGlvbiB0byBpbmNsdWRlIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIGFkZHJlc3NcbiIKIiAgdGhhdCByZWZlcnJlZCB0byBhY3R1YWwgcGFnZS4gIEN1cmwgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZVxuIgoiICByZWZlcnJlciB0byBiZSB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuIEl0IGlzIGVzcGVjaWFsbHkgdXNlZnVsIHRvXG4iCiIgIGZvb2wgb3IgdHJpY2sgc3R1cGlkIHNlcnZlcnMgb3IgQ0dJIHNjcmlwdHMgdGhhdCByZWx5IG9uIHRoYXQgaW5mb3JtYXRpb25cbiIKIiAgYmVpbmcgYXZhaWxhYmxlIG9yIGNvbnRhaW4gY2VydGFpbiBkYXRhLlxuIgoiXG4iCik7CiBwdXRzKAoiICAgICAgICBjdXJsIC1lIHd3dy5jb29sc2l0ZS5jb20gaHR0cDovL3d3dy5zaG93bWUuY29tL1xuIgoiXG4iCiIgIE5PVEU6IFRoZSByZWZlcmVyIGZpZWxkIGlzIGRlZmluZWQgaW4gdGhlIEhUVFAgc3BlYyB0byBiZSBhIGZ1bGwgVVJMLlxuIgoiXG4iCiJVU0VSIEFHRU5UXG4iCiJcbiIKIiAgQSBIVFRQIHJlcXVlc3QgaGFzIHRoZSBvcHRpb24gdG8gaW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYnJvd3NlclxuIgoiICB0aGF0IGdlbmVyYXRlZCB0aGUgcmVxdWVzdC4gQ3VybCBhbGxvd3MgaXQgdG8gYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kXG4iCiIgIGxpbmUuIEl0IGlzIGVzcGVjaWFsbHkgdXNlZnVsIHRvIGZvb2wgb3IgdHJpY2sgc3R1cGlkIHNlcnZlcnMgb3IgQ0dJXG4iCiIgIHNjcmlwdHMgdGhhdCBvbmx5IGFjY2VwdCBjZXJ0YWluIGJyb3dzZXJzLlxuIgoiXG4iCiIgIEV4YW1wbGU6XG4iCiJcbiIKIiAgY3VybCAtQSAnTW96aWxsYS8zLjAgKFdpbjk1OyBJKScgaHR0cDovL3d3dy5uYXRpb25zYmFuay5jb20vXG4iCiJcbiIKKTsKIHB1dHMoCiIgIE90aGVyIGNvbW1vbiBzdHJpbmdzOlxuIgoiICAgICdNb3ppbGxhLzMuMCAoV2luOTU7IEkpJyAgICAgTmV0c2NhcGUgVmVyc2lvbiAzIGZvciBXaW5kb3dzIDk1XG4iCiIgICAgJ01vemlsbGEvMy4wNCAoV2luOTU7IFUpJyAgICBOZXRzY2FwZSBWZXJzaW9uIDMgZm9yIFdpbmRvd3MgOTVcbiIKIiAgICAnTW96aWxsYS8yLjAyIChPUy8yOyBVKScgICAgIE5ldHNjYXBlIFZlcnNpb24gMiBmb3IgT1MvMlxuIgoiICAgICdNb3ppbGxhLzQuMDQgW2VuXSAoWDExOyBVOyBBSVggNC4yOyBOYXYpJyAgICAgICAgICAgTlMgZm9yIEFJWFxuIgoiICAgICdNb3ppbGxhLzQuMDUgW2VuXSAoWDExOyBVOyBMaW51eCAyLjAuMzIgaTU4NiknICAgICAgTlMgZm9yIExpbnV4XG4iCiJcbiIKIiAgTm90ZSB0aGF0IEludGVybmV0IEV4cGxvcmVyIHRyaWVzIGhhcmQgdG8gYmUgY29tcGF0aWJsZSBpbiBldmVyeSB3YXk6XG4iCiIgICAgJ01vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDQuMDE7IFdpbmRvd3MgOTUpJyAgICBNU0lFIGZvciBXOTVcbiIKKTsKIHB1dHMoCiJcbiIKIiAgTW96aWxsYSBpcyBub3QgdGhlIG9ubHkgcG9zc2libGUgVXNlci1BZ2VudCBuYW1lOlxuIgoiICAgICdLb25xdWVyb3IvMS4wJyAgICAgICAgICAgICBLREUgRmlsZSBNYW5hZ2VyIGRlc2t0b3AgY2xpZW50XG4iCiIgICAgJ0x5bngvMi43LjEgbGlid3d3LUZNLzIuMTQnIEx5bnggY29tbWFuZCBsaW5lIGJyb3dzZXJcbiIKIlxuIgoiQ09PS0lFU1xuIgoiXG4iCiIgIENvb2tpZXMgYXJlIGdlbmVyYWxseSB1c2VkIGJ5IHdlYiBzZXJ2ZXJzIHRvIGtlZXAgc3RhdGUgaW5mb3JtYXRpb24gYXQgdGhlXG4iCiIgIGNsaWVudCdzIHNpZGUuIFRoZSBzZXJ2ZXIgc2V0cyBjb29raWVzIGJ5IHNlbmRpbmcgYSByZXNwb25zZSBsaW5lIGluIHRoZVxuIgoiICBoZWFkZXJzIHRoYXQgbG9va3MgbGlrZSAnU2V0LUNvb2tpZTogPGRhdGE+JyB3aGVyZSB0aGUgZGF0YSBwYXJ0IHRoZW5cbiIKIiAgdHlwaWNhbGx5IGNvbnRhaW5zIGEgc2V0IG9mIE5BTUU9VkFMVUUgcGFpcnMgKHNlcGFyYXRlZCBieSBzZW1pY29sb25zICc7J1xuIgopOwogcHV0cygKIiAgbGlrZSBcIk5BTUUxPVZBTFVFMTsgTkFNRTI9VkFMVUUyO1wiKS4gVGhlIHNlcnZlciBjYW4gYWxzbyBzcGVjaWZ5IGZvciB3aGF0XG4iCiIgIHBhdGggdGhlIFwiY29va2llXCIgc2hvdWxkIGJlIHVzZWQgZm9yIChieSBzcGVjaWZ5aW5nIFwicGF0aD12YWx1ZVwiKSwgd2hlbiB0aGVcbiIKIiAgY29va2llIHNob3VsZCBleHBpcmUgKFwiZXhwaXJlPURBVEVcIiksIGZvciB3aGF0IGRvbWFpbiB0byB1c2UgaXRcbiIKIiAgKFwiZG9tYWluPU5BTUVcIikgYW5kIGlmIGl0IHNob3VsZCBiZSB1c2VkIG9uIHNlY3VyZSBjb25uZWN0aW9ucyBvbmx5XG4iCiIgIChcInNlY3VyZVwiKS5cbiIKIlxuIgoiICBJZiB5b3UndmUgcmVjZWl2ZWQgYSBwYWdlIGZyb20gYSBzZXJ2ZXIgdGhhdCBjb250YWlucyBhIGhlYWRlciBsaWtlOlxuIgoiICAgICAgICBTZXQtQ29va2llOiBzZXNzaW9uaWQ9Ym9vMTIzOyBwYXRoPVwiL2Zvb1wiO1xuIgoiXG4iCik7CiBwdXRzKAoiICBpdCBtZWFucyB0aGUgc2VydmVyIHdhbnRzIHRoYXQgZmlyc3QgcGFpciBwYXNzZWQgb24gd2hlbiB3ZSBnZXQgYW55dGhpbmcgaW5cbiIKIiAgYSBwYXRoIGJlZ2lubmluZyB3aXRoIFwiL2Zvb1wiLlxuIgoiXG4iCiIgIEV4YW1wbGUsIGdldCBhIHBhZ2UgdGhhdCB3YW50cyBteSBuYW1lIHBhc3NlZCBpbiBhIGNvb2tpZTpcbiIKIlxuIgoiICAgICAgICBjdXJsIC1iIFwibmFtZT1EYW5pZWxcIiB3d3cuc2lsbHlwYWdlLmNvbVxuIgoiXG4iCiIgIEN1cmwgYWxzbyBoYXMgdGhlIGFiaWxpdHkgdG8gdXNlIHByZXZpb3VzbHkgcmVjZWl2ZWQgY29va2llcyBpbiBmb2xsb3dpbmdcbiIKIiAgc2Vzc2lvbnMuIElmIHlvdSBnZXQgY29va2llcyBmcm9tIGEgc2VydmVyIGFuZCBzdG9yZSB0aGVtIGluIGEgZmlsZSBpbiBhXG4iCiIgIG1hbm5lciBzaW1pbGFyIHRvOlxuIgoiXG4iCiIgICAgICAgIGN1cmwgLS1kdW1wLWhlYWRlciBoZWFkZXJzIHd3dy5leGFtcGxlLmNvbVxuIgoiXG4iCik7CiBwdXRzKAoiICAuLi4geW91IGNhbiB0aGVuIGluIGEgc2Vjb25kIGNvbm5lY3QgdG8gdGhhdCAob3IgYW5vdGhlcikgc2l0ZSwgdXNlIHRoZVxuIgoiICBjb29raWVzIGZyb20gdGhlICdoZWFkZXJzJyBmaWxlIGxpa2U6XG4iCiJcbiIKIiAgICAgICAgY3VybCAtYiBoZWFkZXJzIHd3dy5leGFtcGxlLmNvbVxuIgoiXG4iCiIgIE5vdGUgdGhhdCBieSBzcGVjaWZ5aW5nIC1iIHlvdSBlbmFibGUgdGhlIFwiY29va2llIGF3YXJlbmVzc1wiIGFuZCB3aXRoIC1MXG4iCiIgIHlvdSBjYW4gbWFrZSBjdXJsIGZvbGxvdyBhIGxvY2F0aW9uOiAod2hpY2ggb2Z0ZW4gaXMgdXNlZCBpbiBjb21iaW5hdGlvblxuIgoiICB3aXRoIGNvb2tpZXMpLiBTbyB0aGF0IGlmIGEgc2l0ZSBzZW5kcyBjb29raWVzIGFuZCBhIGxvY2F0aW9uLCB5b3UgY2FuXG4iCiIgIHVzZSBhIG5vbi1leGlzdGluZyBmaWxlIHRvIHRyaWdnZXIgdGhlIGNvb2tpZSBhd2FyZW5lc3MgbGlrZTpcbiIKIlxuIgoiICAgICAgICBjdXJsIC1MIC1iIGVtcHR5LnR4dCB3d3cuZXhhbXBsZS5jb21cbiIKIlxuIgopOwogcHV0cygKIiAgVGhlIGZpbGUgdG8gcmVhZCBjb29raWVzIGZyb20gbXVzdCBiZSBmb3JtYXR0ZWQgdXNpbmcgcGxhaW4gSFRUUCBoZWFkZXJzIE9SXG4iCiIgIGFzIG5ldHNjYXBlJ3MgY29va2llIGZpbGUuIEN1cmwgd2lsbCBkZXRlcm1pbmUgd2hhdCBraW5kIGl0IGlzIGJhc2VkIG9uIHRoZVxuIgoiICBmaWxlIGNvbnRlbnRzLiAgSW4gdGhlIGFib3ZlIGNvbW1hbmQsIGN1cmwgd2lsbCBwYXJzZSB0aGUgaGVhZGVyIGFuZCBzdG9yZVxuIgoiICB0aGUgY29va2llcyByZWNlaXZlZCBmcm9tIHd3dy5leGFtcGxlLmNvbS4gIGN1cmwgd2lsbCBzZW5kIHRvIHRoZSBzZXJ2ZXIgdGhlXG4iCiIgIHN0b3JlZCBjb29raWVzIHdoaWNoIG1hdGNoIHRoZSByZXF1ZXN0IGFzIGl0IGZvbGxvd3MgdGhlIGxvY2F0aW9uLiAgVGhlXG4iCiIgIGZpbGUgXCJlbXB0eS50eHRcIiBtYXkgYmUgYSBub24tZXhpc3RhbnQgZmlsZS5cbiIKIiAgXG4iCiJcbiIKIlBST0dSRVNTIE1FVEVSXG4iCiJcbiIKKTsKIHB1dHMoCiIgIFRoZSBwcm9ncmVzcyBtZXRlciBleGlzdHMgdG8gc2hvdyBhIHVzZXIgdGhhdCBzb21ldGhpbmcgYWN0dWFsbHkgaXNcbiIKIiAgaGFwcGVuaW5nLiBUaGUgZGlmZmVyZW50IGZpZWxkcyBpbiB0aGUgb3V0cHV0IGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOlxuIgoiXG4iCiIgICUgVG90YWwgICAgJSBSZWNlaXZlZCAlIFhmZXJkICBBdmVyYWdlIFNwZWVkICAgICAgICAgIFRpbWUgICAgICAgICAgICAgQ3Vyci5cbiIKIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERsb2FkICBVcGxvYWQgVG90YWwgICAgQ3VycmVudCAgTGVmdCAgICBTcGVlZFxuIgoiICAwICAxNTFNICAgIDAgMzg2MDggICAgMCAgICAgMCAgIDk0MDYgICAgICAwICA0OjQxOjQzICAwOjAwOjA0ICA0OjQxOjM5ICA5Mjg3XG4iCiJcbiIKIiAgRnJvbSBsZWZ0LXRvLXJpZ2h0OlxuIgoiICAgJSAgICAgICAgICAgICAtIHBlcmNlbnRhZ2UgY29tcGxldGVkIG9mIHRoZSB3aG9sZSB0cmFuc2ZlclxuIgopOwogcHV0cygKIiAgIFRvdGFsICAgICAgICAgLSB0b3RhbCBzaXplIG9mIHRoZSB3aG9sZSBleHBlY3RlZCB0cmFuc2ZlclxuIgoiICAgJSAgICAgICAgICAgICAtIHBlcmNlbnRhZ2UgY29tcGxldGVkIG9mIHRoZSBkb3dubG9hZFxuIgoiICAgUmVjZWl2ZWQgICAgICAtIGN1cnJlbnRseSBkb3dubG9hZGVkIGFtb3VudCBvZiBieXRlc1xuIgoiICAgJSAgICAgICAgICAgICAtIHBlcmNlbnRhZ2UgY29tcGxldGVkIG9mIHRoZSB1cGxvYWRcbiIKIiAgIFhmZXJkICAgICAgICAgLSBjdXJyZW50bHkgdXBsb2FkZWQgYW1vdW50IG9mIGJ5dGVzXG4iCiIgICBBdmVyYWdlIFNwZWVkXG4iCiIgICBEbG9hZCAgICAgICAgIC0gdGhlIGF2ZXJhZ2UgdHJhbnNmZXIgc3BlZWQgb2YgdGhlIGRvd25sb2FkXG4iCiIgICBBdmVyYWdlIFNwZWVkXG4iCiIgICBVcGxvYWQgICAgICAgIC0gdGhlIGF2ZXJhZ2UgdHJhbnNmZXIgc3BlZWQgb2YgdGhlIHVwbG9hZFxuIgoiICAgVGltZSBUb3RhbCAgICAtIGV4cGVjdGVkIHRpbWUgdG8gY29tcGxldGUgdGhlIG9wZXJhdGlvblxuIgopOwogcHV0cygKIiAgIFRpbWUgQ3VycmVudCAgLSB0aW1lIHBhc3NlZCBzaW5jZSB0aGUgaW52b2tlXG4iCiIgICBUaW1lIExlZnQgICAgIC0gZXhwZWN0ZWQgdGltZSBsZWZ0IHRvIGNvbXBsZXRldGlvblxuIgoiICAgQ3Vyci5TcGVlZCAgICAtIHRoZSBhdmVyYWdlIHRyYW5zZmVyIHNwZWVkIHRoZSBsYXN0IDUgc2Vjb25kcyAodGhlIGZpcnN0XG4iCiIgICAgICAgICAgICAgICAgICAgNSBzZWNvbmRzIG9mIGEgdHJhbnNmZXIgaXMgYmFzZWQgb24gbGVzcyB0aW1lIG9mIGNvdXJzZS4pXG4iCiJcbiIKIiAgVGhlIC0jIG9wdGlvbiB3aWxsIGRpc3BsYXkgYSB0b3RhbGx5IGRpZmZlcmVudCBwcm9ncmVzcyBiYXIgdGhhdCBkb2Vzbid0XG4iCiIgIG5lZWQgbXVjaCBleHBsYW5hdGlvbiFcbiIKIlxuIgoiU1BFRUQgTElNSVRcbiIKIlxuIgoiICBDdXJsIGFsbG93cyB0aGUgdXNlciB0byBzZXQgdGhlIHRyYW5zZmVyIHNwZWVkIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldFxuIgopOwogcHV0cygKIiAgdG8gbGV0IHRoZSB0cmFuc2ZlciBrZWVwIGdvaW5nLiBCeSB1c2luZyB0aGUgc3dpdGNoIC15IGFuZCAtWSB5b3VcbiIKIiAgY2FuIG1ha2UgY3VybCBhYm9ydCB0cmFuc2ZlcnMgaWYgdGhlIHRyYW5zZmVyIHNwZWVkIGlzIGJlbG93IHRoZSBzcGVjaWZpZWRcbiIKIiAgbG93ZXN0IGxpbWl0IGZvciBhIHNwZWNpZmllZCB0aW1lLlxuIgoiXG4iCiIgIFRvIGhhdmUgY3VybCBhYm9ydCB0aGUgZG93bmxvYWQgaWYgdGhlIHNwZWVkIGlzIHNsb3dlciB0aGFuIDMwMDAgYnl0ZXMgcGVyXG4iCiIgIHNlY29uZCBmb3IgMSBtaW51dGUsIHJ1bjpcbiIKIlxuIgoiICAgICAgICBjdXJsIC15IDMwMDAgLVkgNjAgd3d3LmZhci1hd2F5LXNpdGUuY29tXG4iCiJcbiIKIiAgVGhpcyBjYW4gdmVyeSB3ZWxsIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgb3ZlcmFsbCB0aW1lIGxpbWl0LCBzb1xuIgoiICB0aGF0IHRoZSBhYm92ZSBvcGVyYXRpb2luIG11c3QgYmUgY29tcGxldGVkIGluIHdob2xlIHdpdGhpbiAzMCBtaW51dGVzOlxuIgoiXG4iCik7CiBwdXRzKAoiICAgICAgICBjdXJsIC1tIDE4MDAgLXkgMzAwMCAtWSA2MCB3d3cuZmFyLWF3YXktc2l0ZS5jb21cbiIKIlxuIgoiQ09ORklHIEZJTEVcbiIKIlxuIgoiICBDdXJsIGF1dG9tYXRpY2FsbHkgdHJpZXMgdG8gcmVhZCB0aGUgLmN1cmxyYyBmaWxlIChvciBfY3VybHJjIGZpbGUgb24gd2luMzJcbiIKIiAgc3lzdGVtcykgZnJvbSB0aGUgdXNlcidzIGhvbWUgZGlyIG9uIHN0YXJ0dXAuXG4iCiJcbiIKIiAgVGhlIGNvbmZpZyBmaWxlIGNvdWxkIGJlIG1hZGUgdXAgd2l0aCBub3JtYWwgY29tbWFuZCBsaW5lIHN3aXRjaGVzLCBidXQgeW91XG4iCiIgIGNhbiBhbHNvIHNwZWNpZnkgdGhlIGxvbmcgb3B0aW9ucyB3aXRob3V0IHRoZSBkYXNoZXMgdG8gbWFrZSBpdCBtb3JlXG4iCiIgIHJlYWRhYmxlLiBZb3UgY2FuIHNlcGFyYXRlIHRoZSBvcHRpb25zIGFuZCB0aGUgcGFyYW1ldGVyIHdpdGggc3BhY2VzLCBvclxuIgoiICB3aXRoID0gb3IgOi4gQ29tbWVudHMgY2FuIGJlIHVzZWQgd2l0aGluIHRoZSBmaWxlLiBJZiB0aGUgZmlyc3QgbGV0dGVyIG9uIGFcbiIKKTsKIHB1dHMoCiIgIGxpbmUgaXMgYSAnIyctbGV0dGVyIHRoZSByZXN0IG9mIHRoZSBsaW5lIGlzIHRyZWF0ZWQgYXMgYSBjb21tZW50LlxuIgoiXG4iCiIgIElmIHlvdSB3YW50IHRoZSBwYXJhbWV0ZXIgdG8gY29udGFpbiBzcGFjZXMsIHlvdSBtdXN0IGluY2xvc2UgdGhlIGVudGlyZVxuIgoiICBwYXJhbWV0ZXIgd2l0aGluIGRvdWJsZSBxdW90ZXMgKFwiKS4gV2l0aGluIHRob3NlIHF1b3RlcywgeW91IHNwZWNpZnkgYVxuIgoiICBxdW90ZSBhcyBcXFwiLlxuIgoiXG4iCiIgIE5PVEU6IFlvdSBtdXN0IHNwZWNpZnkgb3B0aW9ucyBhbmQgdGhlaXIgYXJndW1lbnRzIG9uIHRoZSBzYW1lIGxpbmUuXG4iCiJcbiIKIiAgRXhhbXBsZSwgc2V0IGRlZmF1bHQgdGltZSBvdXQgYW5kIHByb3h5IGluIGEgY29uZmlnIGZpbGU6XG4iCiJcbiIKIiAgICAgICAgIyBXZSB3YW50IGEgMzAgbWludXRlIHRpbWVvdXQ6XG4iCiIgICAgICAgIC1tIDE4MDBcbiIKIiAgICAgICAgIyAuLi4gYW5kIHdlIHVzZSBhIHByb3h5IGZvciBhbGwgYWNjZXNzZXM6XG4iCik7CiBwdXRzKAoiICAgICAgICBwcm94eSA9IHByb3h5Lm91ci5kb21haW4uY29tOjgwODBcbiIKIlxuIgoiICBXaGl0ZSBzcGFjZXMgQVJFIHNpZ25pZmljYW50IGF0IHRoZSBlbmQgb2YgbGluZXMsIGJ1dCBhbGwgd2hpdGUgc3BhY2VzXG4iCiIgIGxlYWRpbmcgdXAgdG8gdGhlIGZpcnN0IGNoYXJhY3RlcnMgb2YgZWFjaCBsaW5lIGFyZSBpZ25vcmVkLlxuIgoiXG4iCiIgIFByZXZlbnQgY3VybCBmcm9tIHJlYWRpbmcgdGhlIGRlZmF1bHQgZmlsZSBieSB1c2luZyAtcSBhcyB0aGUgZmlyc3QgY29tbWFuZFxuIgoiICBsaW5lIHBhcmFtZXRlciwgbGlrZTpcbiIKIlxuIgoiICAgICAgICBjdXJsIC1xIHd3dy50aGF0c2l0ZS5jb21cbiIKIlxuIgoiICBGb3JjZSBjdXJsIHRvIGdldCBhbmQgZGlzcGxheSBhIGxvY2FsIGhlbHAgcGFnZSBpbiBjYXNlIGl0IGlzIGludm9rZWRcbiIKIiAgd2l0aG91dCBVUkwgYnkgbWFraW5nIGEgY29uZmlnIGZpbGUgc2ltaWxhciB0bzpcbiIKIlxuIgoiICAgICAgICAjIGRlZmF1bHQgdXJsIHRvIGdldFxuIgopOwogcHV0cygKIiAgICAgICAgdXJsID0gXCJodHRwOi8vaGVscC53aXRoLmN1cmwuY29tL2N1cmxoZWxwLmh0bWxcIlxuIgoiXG4iCiIgIFlvdSBjYW4gc3BlY2lmeSBhbm90aGVyIGNvbmZpZyBmaWxlIHRvIGJlIHJlYWQgYnkgdXNpbmcgdGhlIC1LLy0tY29uZmlnXG4iCiIgIGZsYWcuIElmIHlvdSBzZXQgY29uZmlnIGZpbGUgbmFtZSB0byBcIi1cIiBpdCdsbCByZWFkIHRoZSBjb25maWcgZnJvbSBzdGRpbixcbiIKIiAgd2hpY2ggY2FuIGJlIGhhbmR5IGlmIHlvdSB3YW50IHRvIGhpZGUgb3B0aW9ucyBmcm9tIGJlaW5nIHZpc2libGUgaW4gcHJvY2Vzc1xuIgoiICB0YWJsZXMgZXRjOlxuIgoiXG4iCiIgICAgICAgIGVjaG8gXCJ1c2VyID0gdXNlcjpwYXNzd2RcIiB8IGN1cmwgLUsgLSBodHRwOi8vdGhhdC5zZWNyZXQuc2l0ZS5jb21cbiIKIlxuIgoiRVhUUkEgSEVBREVSU1xuIgoiXG4iCiIgIFdoZW4gdXNpbmcgY3VybCBpbiB5b3VyIG93biB2ZXJ5IHNwZWNpYWwgcHJvZ3JhbXMsIHlvdSBtYXkgZW5kIHVwIG5lZWRpbmdcbiIKKTsKIHB1dHMoCiIgIHRvIHBhc3Mgb24geW91ciBvd24gY3VzdG9tIGhlYWRlcnMgd2hlbiBnZXR0aW5nIGEgd2ViIHBhZ2UuIFlvdSBjYW4gZG9cbiIKIiAgdGhpcyBieSB1c2luZyB0aGUgLUggZmxhZy5cbiIKIlxuIgoiICBFeGFtcGxlLCBzZW5kIHRoZSBoZWFkZXIgXCJYLXlvdS1hbmQtbWU6IHllc1wiIHRvIHRoZSBzZXJ2ZXIgd2hlbiBnZXR0aW5nIGFcbiIKIiAgcGFnZTpcbiIKIlxuIgoiICAgICAgICBjdXJsIC1IIFwiWC15b3UtYW5kLW1lOiB5ZXNcIiB3d3cubG92ZS5jb21cbiIKIlxuIgoiICBUaGlzIGNhbiBhbHNvIGJlIHVzZWZ1bCBpbiBjYXNlIHlvdSB3YW50IGN1cmwgdG8gc2VuZCBhIGRpZmZlcmVudCB0ZXh0IGluIGFcbiIKIiAgaGVhZGVyIHRoYW4gaXQgbm9ybWFsbHkgZG9lcy4gVGhlIC1IIGhlYWRlciB5b3Ugc3BlY2lmeSB0aGVuIHJlcGxhY2VzIHRoZVxuIgoiICBoZWFkZXIgY3VybCB3b3VsZCBub3JtYWxseSBzZW5kLiBJZiB5b3UgcmVwbGFjZSBhbiBpbnRlcm5hbCBoZWFkZXIgd2l0aCBhblxuIgopOwogcHV0cygKIiAgZW1wdHkgb25lLCB5b3UgcHJldmVudCB0aGF0IGhlYWRlciBmcm9tIGJlaW5nIHNlbnQuIFRvIHByZXZlbnQgdGhlIEhvc3Q6XG4iCiIgIGhlYWRlciBmcm9tIGJlaW5nIHVzZWQ6XG4iCiJcbiIKIiAgICAgICAgY3VybCAtSCBcIkhvc3Q6XCIgd3d3LnNlcnZlci5jb21cbiIKIlxuIgoiRlRQIGFuZCBQQVRIIE5BTUVTXG4iCiJcbiIKIiAgRG8gbm90ZSB0aGF0IHdoZW4gZ2V0dGluZyBmaWxlcyB3aXRoIHRoZSBmdHA6Ly8gVVJMLCB0aGUgZ2l2ZW4gcGF0aCBpc1xuIgoiICByZWxhdGl2ZSB0aGUgZGlyZWN0b3J5IHlvdSBlbnRlci4gVG8gZ2V0IHRoZSBmaWxlICdSRUFETUUnIGZyb20geW91ciBob21lXG4iCiIgIGRpcmVjdG9yeSBhdCB5b3VyIGZ0cCBzaXRlLCBkbzpcbiIKIlxuIgoiICAgICAgICBjdXJsIGZ0cDovL3VzZXI6cGFzc3dkQG15LnNpdGUuY29tL1JFQURNRVxuIgoiXG4iCiIgIEJ1dCBpZiB5b3Ugd2FudCB0aGUgUkVBRE1FIGZpbGUgZnJvbSB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhhdCB2ZXJ5IHNhbWVcbiIKKTsKIHB1dHMoCiIgIHNpdGUsIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGFic29sdXRlIGZpbGUgbmFtZTpcbiIKIlxuIgoiICAgICAgICBjdXJsIGZ0cDovL3VzZXI6cGFzc3dkQG15LnNpdGUuY29tLy9SRUFETUVcbiIKIlxuIgoiICAoSS5lIHdpdGggYW4gZXh0cmEgc2xhc2ggaW4gZnJvbnQgb2YgdGhlIGZpbGUgbmFtZS4pXG4iCiJcbiIKIkZUUCBhbmQgZmlyZXdhbGxzXG4iCiJcbiIKIiAgVGhlIEZUUCBwcm90b2NvbCByZXF1aXJlcyBvbmUgb2YgdGhlIGludm9sdmVkIHBhcnRpZXMgdG8gb3BlbiBhIHNlY29uZFxuIgoiICBjb25uY3Rpb24gYXMgc29vbiBhcyBkYXRhIGlzIGFib3V0IHRvIGdldCB0cmFuc2ZlcmVkLiBUaGVyZSBhcmUgdHdvIHdheXMgdG9cbiIKIiAgZG8gdGhpcy5cbiIKIlxuIgoiICBUaGUgZGVmYXVsdCB3YXkgZm9yIGN1cmwgaXMgdG8gaXNzdWUgdGhlIFBBU1YgY29tbWFuZCB3aGljaCBjYXVzZXMgdGhlXG4iCiIgIHNlcnZlciB0byBvcGVuIGFub3RoZXIgcG9ydCBhbmQgYXdhaXQgYW5vdGhlciBjb25uZWN0aW9uIHBlcmZvcm1lZCBieSB0aGVcbiIKKTsKIHB1dHMoCiIgIGNsaWVudC4gVGhpcyBpcyBnb29kIGlmIHRoZSBjbGllbnQgaXMgYmVoaW5kIGEgZmlyZXdhbGwgdGhhdCBkb24ndCBhbGxvd1xuIgoiICBpbmNvbWluZyBjb25uZWN0aW9ucy5cbiIKIlxuIgoiICAgICAgICBjdXJsIGZ0cC5kb3dubG9hZC5jb21cbiIKIlxuIgoiICBJZiB0aGUgc2VydmVyIGZvciBleGFtcGxlLCBpcyBiZWhpbmQgYSBmaXJld2FsbCB0aGF0IGRvbid0IGFsbG93IGNvbm5lY3Rpb25zXG4iCiIgIG9uIG90aGVyIHBvcnRzIHRoYW4gMjEgKG9yIGlmIGl0IGp1c3QgZG9lc24ndCBzdXBwb3J0IHRoZSBQQVNWIGNvbW1hbmQpLCB0aGVcbiIKIiAgb3RoZXIgd2F5IHRvIGRvIGl0IGlzIHRvIHVzZSB0aGUgUE9SVCBjb21tYW5kIGFuZCBpbnN0cnVjdCB0aGUgc2VydmVyIHRvXG4iCiIgIGNvbm5lY3QgdG8gdGhlIGNsaWVudCBvbiB0aGUgZ2l2ZW4gKGFzIHBhcmFtZXRlcnMgdG8gdGhlIFBPUlQgY29tbWFuZCkgSVBcbiIKIiAgbnVtYmVyIGFuZCBwb3J0LlxuIgoiXG4iCik7CiBwdXRzKAoiICBUaGUgLVAgZmxhZyB0byBjdXJsIHN1cHBvcnRzIGEgZmV3IGRpZmZlcmVudCBvcHRpb25zLiBZb3VyIG1hY2hpbmUgbWF5IGhhdmVcbiIKIiAgc2V2ZXJhbCBJUC1hZGRyZXNzZXMgYW5kL29yIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgY3VybCBhbGxvd3MgeW91IHRvIHNlbGVjdFxuIgoiICB3aGljaCBvZiB0aGVtIHRvIHVzZS4gRGVmYXVsdCBhZGRyZXNzIGNhbiBhbHNvIGJlIHVzZWQ6XG4iCiJcbiIKIiAgICAgICAgY3VybCAtUCAtIGZ0cC5kb3dubG9hZC5jb21cbiIKIlxuIgoiICBEb3dubG9hZCB3aXRoIFBPUlQgYnV0IHVzZSB0aGUgSVAgYWRkcmVzcyBvZiBvdXIgJ2xlMCcgaW50ZXJmYWNlICh0aGlzIGRvZXNcbiIKIiAgbm90IHdvcmsgb24gd2luZG93cyk6XG4iCiJcbiIKIiAgICAgICAgY3VybCAtUCBsZTAgZnRwLmRvd25sb2FkLmNvbVxuIgoiXG4iCiIgIERvd25sb2FkIHdpdGggUE9SVCBidXQgdXNlIDE5Mi4xNjguMC4xMCBhcyBvdXIgSVAgYWRkcmVzcyB0byB1c2U6XG4iCiJcbiIKKTsKIHB1dHMoCiIgICAgICAgIGN1cmwgLVAgMTkyLjE2OC4wLjEwIGZ0cC5kb3dubG9hZC5jb21cbiIKIlxuIgoiTkVUV09SSyBJTlRFUkZBQ0VcbiIKIlxuIgoiICBHZXQgYSB3ZWIgcGFnZSBmcm9tIGEgc2VydmVyIHVzaW5nIGEgc3BlY2lmaWVkIHBvcnQgZm9yIHRoZSBpbnRlcmZhY2U6XG4iCiJcbiIKIgljdXJsIC0taW50ZXJmYWNlIGV0aDA6MSBodHRwOi8vd3d3Lm5ldHNjYXBlLmNvbS9cbiIKIlxuIgoiICBvclxuIgoiXG4iCiIJY3VybCAtLWludGVyZmFjZSAxOTIuMTY4LjEuMTAgaHR0cDovL3d3dy5uZXRzY2FwZS5jb20vXG4iCiJcbiIKIkhUVFBTXG4iCiJcbiIKIiAgU2VjdXJlIEhUVFAgcmVxdWlyZXMgU1NMIGxpYnJhcmllcyB0byBiZSBpbnN0YWxsZWQgYW5kIHVzZWQgd2hlbiBjdXJsIGlzXG4iCiIgIGJ1aWx0LiBJZiB0aGF0IGlzIGRvbmUsIGN1cmwgaXMgY2FwYWJsZSBvZiByZXRyaWV2aW5nIGFuZCBwb3N0aW5nIGRvY3VtZW50c1xuIgoiICB1c2luZyB0aGUgSFRUUFMgcHJvY290b2wuXG4iCiJcbiIKIiAgRXhhbXBsZTpcbiIKIlxuIgoiICAgICAgICBjdXJsIGh0dHBzOi8vd3d3LnNlY3VyZS1zaXRlLmNvbVxuIgoiXG4iCik7CiBwdXRzKAoiICBDdXJsIGlzIGFsc28gY2FwYWJsZSBvZiB1c2luZyB5b3VyIHBlcnNvbmFsIGNlcnRpZmljYXRlcyB0byBnZXQvcG9zdCBmaWxlc1xuIgoiICBmcm9tIHNpdGVzIHRoYXQgcmVxdWlyZSB2YWxpZCBjZXJ0aWZpY2F0ZXMuIFRoZSBvbmx5IGRyYXdiYWNrIGlzIHRoYXQgdGhlXG4iCiIgIGNlcnRpZmljYXRlIG5lZWRzIHRvIGJlIGluIFBFTS1mb3JtYXQuIFBFTSBpcyBhIHN0YW5kYXJkIGFuZCBvcGVuIGZvcm1hdCB0b1xuIgoiICBzdG9yZSBjZXJ0aWZpY2F0ZXMgd2l0aCwgYnV0IGl0IGlzIG5vdCB1c2VkIGJ5IHRoZSBtb3N0IGNvbW1vbmx5IHVzZWRcbiIKIiAgYnJvd3NlcnMgKE5ldHNjYXBlIGFuZCBNU0VJIGJvdGggdXNlIHRoZSBzbyBjYWxsZWQgUEtDUyMxMiBmb3JtYXQpLiBJZiB5b3VcbiIKIiAgd2FudCBjdXJsIHRvIHVzZSB0aGUgY2VydGlmaWNhdGVzIHlvdSB1c2Ugd2l0aCB5b3VyIChmYXZvdXJpdGUpIGJyb3dzZXIsIHlvdVxuIgopOwogcHV0cygKIiAgbWF5IG5lZWQgdG8gZG93bmxvYWQvY29tcGlsZSBhIGNvbnZlcnRlciB0aGF0IGNhbiBjb252ZXJ0IHlvdXIgYnJvd3NlcidzXG4iCiIgIGZvcm1hdHRlZCBjZXJ0aWZpY2F0ZXMgdG8gUEVNIGZvcm1hdHRlZCBvbmVzLiBUaGlzIGtpbmQgb2YgY29udmVydGVyIGlzXG4iCiIgIGluY2x1ZGVkIGluIHJlY2VudCB2ZXJzaW9ucyBvZiBPcGVuU1NMLCBhbmQgZm9yIG9sZGVyIHZlcnNpb25zIERyIFN0ZXBoZW5cbiIKIiAgTi4gSGVuc29uIGhhcyB3cml0dGVuIGEgcGF0Y2ggZm9yIFNTTGVheSB0aGF0IGFkZHMgdGhpcyBmdW5jdGlvbmFsaXR5LiBZb3VcbiIKIiAgY2FuIGdldCBoaXMgcGF0Y2ggKHRoYXQgcmVxdWlyZXMgYW4gU1NMZWF5IGluc3RhbGxhdGlvbikgZnJvbSBoaXMgc2l0ZSBhdDpcbiIKIiAgaHR0cDovL3d3dy5kcmgtY29uc3VsdGFuY3kuZGVtb24uY28udWsvXG4iCiJcbiIKKTsKIHB1dHMoCiIgIEV4YW1wbGUgb24gaG93IHRvIGF1dG9tYXRpY2FsbHkgcmV0cmlldmUgYSBkb2N1bWVudCB1c2luZyBhIGNlcnRpZmljYXRlIHdpdGhcbiIKIiAgYSBwZXJzb25hbCBwYXNzd29yZDpcbiIKIlxuIgoiICAgICAgICBjdXJsIC1FIC9wYXRoL3RvL2NlcnQucGVtOnBhc3N3b3JkIGh0dHBzOi8vc2VjdXJlLnNpdGUuY29tL1xuIgoiXG4iCiIgIElmIHlvdSBuZWdsZWN0IHRvIHNwZWNpZnkgdGhlIHBhc3N3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHlvdSB3aWxsIGJlXG4iCiIgIHByb21wdGVkIGZvciB0aGUgY29ycmVjdCBwYXNzd29yZCBiZWZvcmUgYW55IGRhdGEgY2FuIGJlIHJlY2VpdmVkLlxuIgoiXG4iCiIgIE1hbnkgb2xkZXIgU1NMLXNlcnZlcnMgaGF2ZSBwcm9ibGVtcyB3aXRoIFNTTHYzIG9yIFRMUywgdGhhdCBuZXdlciB2ZXJzaW9uc1xuIgoiICBvZiBPcGVuU1NMIGV0YyBpcyB1c2luZywgdGhlcmVmb3JlIGl0IGlzIHNvbWV0aW1lcyB1c2VmdWwgdG8gc3BlY2lmeSB3aGF0XG4iCik7CiBwdXRzKAoiICBTU0wtdmVyc2lvbiBjdXJsIHNob3VsZCB1c2UuIFVzZSAtMyBvciAtMiB0byBzcGVjaWZ5IHRoYXQgZXhhY3QgU1NMIHZlcnNpb25cbiIKIiAgdG8gdXNlOlxuIgoiXG4iCiIgICAgICAgIGN1cmwgLTIgaHR0cHM6Ly9zZWN1cmUuc2l0ZS5jb20vXG4iCiJcbiIKIiAgT3RoZXJ3aXNlLCBjdXJsIHdpbGwgZmlyc3QgYXR0ZW1wdCB0byB1c2UgdjMgYW5kIHRoZW4gdjIuXG4iCiJcbiIKIiAgVG8gdXNlIE9wZW5TU0wgdG8gY29udmVydCB5b3VyIGZhdm91cml0ZSBicm93c2VyJ3MgY2VydGlmaWNhdGUgaW50byBhIFBFTVxuIgoiICBmb3JtYXR0ZWQgb25lIHRoYXQgY3VybCBjYW4gdXNlLCBkbyBzb21ldGhpbmcgbGlrZSB0aGlzIChhc3N1bWluZyBuZXRzY2FwZSxcbiIKIiAgYnV0IElFIGlzIGxpa2VseSB0byB3b3JrIHNpbWlsYXJseSk6XG4iCiJcbiIKIiAgICBZb3Ugc3RhcnQgd2l0aCBoaXR0aW5nIHRoZSAnc2VjdXJpdHknIG1lbnUgYnV0dG9uIGluIG5ldHNjYXBlLiBcbiIKIlxuIgopOwogcHV0cygKIiAgICBTZWxlY3QgJ2NlcnRpZmljYXRlcy0+eW91cnMnIGFuZCB0aGVuIHBpY2sgYSBjZXJ0aWZpY2F0ZSBpbiB0aGUgbGlzdCBcbiIKIlxuIgoiICAgIFByZXNzIHRoZSAnZXhwb3J0JyBidXR0b24gXG4iCiJcbiIKIiAgICBlbnRlciB5b3VyIFBJTiBjb2RlIGZvciB0aGUgY2VydHMgXG4iCiJcbiIKIiAgICBzZWxlY3QgYSBwcm9wZXIgcGxhY2UgdG8gc2F2ZSBpdCBcbiIKIlxuIgoiICAgIFJ1biB0aGUgJ29wZW5zc2wnIGFwcGxpY2F0aW9uIHRvIGNvbnZlcnQgdGhlIGNlcnRpZmljYXRlLiBJZiB5b3UgY2QgdG8gdGhlXG4iCiIgICAgb3BlbnNzbCBpbnN0YWxsYXRpb24sIHlvdSBjYW4gZG8gaXQgbGlrZTpcbiIKIlxuIgoiICAgICAjIC4vYXBwcy9vcGVuc3NsIHBrY3MxMiAtY2VydGZpbGUgW2ZpbGUgeW91IHNhdmVkXSAtb3V0IFtQRU1maWxlXVxuIgoiXG4iCiJcbiIKIlJFU1VNSU5HIEZJTEUgVFJBTlNGRVJTXG4iCiJcbiIKIiBUbyBjb250aW51ZSBhIGZpbGUgdHJhbnNmZXIgd2hlcmUgaXQgd2FzIHByZXZpb3VzbHkgYWJvcnRlZCwgY3VybCBzdXBwb3J0c1xuIgopOwogcHV0cygKIiByZXN1bWUgb24gaHR0cChzKSBkb3dubG9hZHMgYXMgd2VsbCBhcyBmdHAgdXBsb2FkcyBhbmQgZG93bmxvYWRzLlxuIgoiXG4iCiIgQ29udGludWUgZG93bmxvYWRpbmcgYSBkb2N1bWVudDpcbiIKIlxuIgoiICAgICAgICBjdXJsIC1jIC1vIGZpbGUgZnRwOi8vZnRwLnNlcnZlci5jb20vcGF0aC9maWxlXG4iCiJcbiIKIiBDb250aW51ZSB1cGxvYWRpbmcgYSBkb2N1bWVudCgqMSk6XG4iCiJcbiIKIiAgICAgICAgY3VybCAtYyAtVCBmaWxlIGZ0cDovL2Z0cC5zZXJ2ZXIuY29tL3BhdGgvZmlsZVxuIgoiXG4iCiIgQ29udGludWUgZG93bmxvYWRpbmcgYSBkb2N1bWVudCBmcm9tIGEgd2ViIHNlcnZlcigqMik6XG4iCiJcbiIKIiAgICAgICAgY3VybCAtYyAtbyBmaWxlIGh0dHA6Ly93d3cuc2VydmVyLmNvbS9cbiIKIlxuIgoiICgqMSkgPSBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGZ0cCBzZXJ2ZXIgc3VwcG9ydHMgdGhlIG5vbi1zdGFuZGFyZCBjb21tYW5kXG4iCiIgICAgICAgIFNJWkUuIElmIGl0IGRvZXNuJ3QsIGN1cmwgd2lsbCBzYXkgc28uXG4iCiJcbiIKKTsKIHB1dHMoCiIgKCoyKSA9IFRoaXMgcmVxdWlyZXMgdGhhdCB0aGUgd2ViIHNlcnZlciBzdXBwb3J0cyBhdCBsZWFzdCBIVFRQLzEuMS4gSWYgaXRcbiIKIiAgICAgICAgZG9lc24ndCwgY3VybCB3aWxsIHNheSBzby5cbiIKIlxuIgoiVElNRSBDT05ESVRJT05TXG4iCiJcbiIKIiBIVFRQIGFsbG93cyBhIGNsaWVudCB0byBzcGVjaWZ5IGEgdGltZSBjb25kaXRpb24gZm9yIHRoZSBkb2N1bWVudCBpdFxuIgoiIHJlcXVlc3RzLiBJdCBpcyBJZi1Nb2RpZmllZC1TaW5jZSBvciBJZi1Vbm1vZGlmaWVkLVNpbmNlLiBDdXJsIGFsbG93IHlvdSB0b1xuIgoiIHNwZWNpZnkgdGhlbSB3aXRoIHRoZSAtei8tLXRpbWUtY29uZCBmbGFnLlxuIgoiXG4iCiIgRm9yIGV4YW1wbGUsIHlvdSBjYW4gZWFzaWx5IG1ha2UgYSBkb3dubG9hZCB0aGF0IG9ubHkgZ2V0cyBwZXJmb3JtZWQgaWYgdGhlXG4iCiIgcmVtb3RlIGZpbGUgaXMgbmV3ZXIgdGhhbiBhIGxvY2FsIGNvcHkuIEl0IHdvdWxkIGJlIG1hZGUgbGlrZTpcbiIKIlxuIgopOwogcHV0cygKIiAgICAgICAgY3VybCAteiBsb2NhbC5odG1sIGh0dHA6Ly9yZW1vdGUuc2VydmVyLmNvbS9yZW1vdGUuaHRtbFxuIgoiXG4iCiIgT3IgeW91IGNhbiBkb3dubG9hZCBhIGZpbGUgb25seSBpZiB0aGUgbG9jYWwgZmlsZSBpcyBuZXdlciB0aGFuIHRoZSByZW1vdGVcbiIKIiBvbmUuIERvIHRoaXMgYnkgcHJlcGVuZGluZyB0aGUgZGF0ZSBzdHJpbmcgd2l0aCBhICctJywgYXMgaW46XG4iCiJcbiIKIiAgICAgICAgY3VybCAteiAtbG9jYWwuaHRtbCBodHRwOi8vcmVtb3RlLnNlcnZlci5jb20vcmVtb3RlLmh0bWxcbiIKIlxuIgoiIFlvdSBjYW4gc3BlY2lmeSBhIFwiZnJlZSB0ZXh0XCIgZGF0ZSBhcyBjb25kaXRpb24uIFRlbGwgY3VybCB0byBvbmx5IGRvd25sb2FkXG4iCiIgdGhlIGZpbGUgaWYgaXQgd2FzIHVwZGF0ZWQgc2luY2UgeWVzdGVyZGF5OlxuIgoiXG4iCiIgICAgICAgIGN1cmwgLXogeWVzdGVyZGF5IGh0dHA6Ly9yZW1vdGUuc2VydmVyLmNvbS9yZW1vdGUuaHRtbFxuIgoiXG4iCik7CiBwdXRzKAoiIEN1cmwgd2lsbCB0aGVuIGFjY2VwdCBhIHdpZGUgcmFuZ2Ugb2YgZGF0ZSBmb3JtYXRzLiBZb3UgYWx3YXlzIG1ha2UgdGhlIGRhdGVcbiIKIiBjaGVjayB0aGUgb3RoZXIgd2F5IGFyb3VuZCBieSBwcmVwZW5kaW5nIGl0IHdpdGggYSBkYXNoICctJy5cbiIKIlxuIgoiRElDVFxuIgoiXG4iCiIgIEZvciBmdW4gdHJ5XG4iCiJcbiIKIiAgICAgICAgY3VybCBkaWN0Oi8vZGljdC5vcmcvbTpjdXJsXG4iCiIgICAgICAgIGN1cmwgZGljdDovL2RpY3Qub3JnL2Q6aGVpc2VuYnVnOmphcmdvblxuIgoiICAgICAgICBjdXJsIGRpY3Q6Ly9kaWN0Lm9yZy9kOmRhbmllbDp3ZWIxOTEzXG4iCiJcbiIKIiAgQWxpYXNlcyBmb3IgJ20nIGFyZSAnbWF0Y2gnIGFuZCAnZmluZCcsIGFuZCBhbGlhc2VzIGZvciAnZCcgYXJlICdkZWZpbmUnXG4iCiIgIGFuZCAnbG9va3VwJy4gRm9yIGV4YW1wbGUsXG4iCiJcbiIKIiAgICAgICAgY3VybCBkaWN0Oi8vZGljdC5vcmcvZmluZDpjdXJsXG4iCiJcbiIKKTsKIHB1dHMoCiIgIENvbW1hbmRzIHRoYXQgYnJlYWsgdGhlIFVSTCBkZXNjcmlwdGlvbiBvZiB0aGUgUkZDIChidXQgbm90IHRoZSBESUNUXG4iCiIgIHByb3RvY29sKSBhcmVcbiIKIlxuIgoiICAgICAgICBjdXJsIGRpY3Q6Ly9kaWN0Lm9yZy9zaG93OmRiXG4iCiIgICAgICAgIGN1cmwgZGljdDovL2RpY3Qub3JnL3Nob3c6c3RyYXRcbiIKIlxuIgoiICBBdXRoZW50aWNhdGlvbiBpcyBzdGlsbCBtaXNzaW5nIChidXQgdGhpcyBpcyBub3QgcmVxdWlyZWQgYnkgdGhlIFJGQylcbiIKIlxuIgoiTERBUFxuIgoiXG4iCiIgIElmIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgT3BlbkxEQVAgbGlicmFyeSwgY3VybCBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgaXRcbiIKIiAgYW5kIG9mZmVyIGxkYXA6Ly8gc3VwcG9ydC5cbiIKIlxuIgoiICBMREFQIGlzIGEgY29tcGxleCB0aGluZyBhbmQgd3JpdGluZyBhbiBMREFQIHF1ZXJ5IGlzIG5vdCBhbiBlYXN5IHRhc2suIEkgZG9cbiIKKTsKIHB1dHMoCiIgIGFkdmljZSB5b3UgdG8gZGlnIHVwIHRoZSBzeW50YXggZGVzY3JpcHRpb24gZm9yIHRoYXQgZWxzZXdoZXJlLCBSRkMgMTk1OSBpZlxuIgoiICBubyBvdGhlciBwbGFjZSBpcyBiZXR0ZXIuXG4iCiJcbiIKIiAgVG8gc2hvdyB5b3UgYW4gZXhhbXBsZSwgdGhpcyBpcyBub3cgSSBjYW4gZ2V0IGFsbCBwZW9wbGUgZnJvbSBteSBsb2NhbCBMREFQXG4iCiIgIHNlcnZlciB0aGF0IGhhcyBhIGNlcnRhaW4gc3ViLWRvbWFpbiBpbiB0aGVpciBlbWFpbCBhZGRyZXNzOlxuIgoiXG4iCiIgICAgICAgIGN1cmwgLUIgXCJsZGFwOi8vbGRhcC5mcm9udGVjLnNlL289ZnJvbnRlYz8/c3ViP21haWw9KnN0aC5mcm9udGVjLnNlXCJcbiIKIlxuIgoiICBJZiBJIHdhbnQgdGhlIHNhbWUgaW5mbyBpbiBIVE1MIGZvcm1hdCwgSSBjYW4gZ2V0IGl0IGJ5IG5vdCB1c2luZyB0aGUgLUJcbiIKIiAgKGVuZm9yY2UgQVNDSUkpIGZsYWcuXG4iCiJcbiIKIkVOVklST05NRU5UIFZBUklBQkxFU1xuIgoiXG4iCik7CiBwdXRzKAoiICBDdXJsIHJlYWRzIGFuZCB1bmRlcnN0YW5kcyB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlczpcbiIKIlxuIgoiICAgICAgICBIVFRQX1BST1hZLCBIVFRQU19QUk9YWSwgRlRQX1BST1hZLCBHT1BIRVJfUFJPWFlcbiIKIlxuIgoiICBUaGV5IHNob3VsZCBiZSBzZXQgZm9yIHByb3RvY29sLXNwZWNpZmljIHByb3hpZXMuIEdlbmVyYWwgcHJveHkgc2hvdWxkIGJlXG4iCiIgIHNldCB3aXRoXG4iCiIgICAgICAgIFxuIgoiICAgICAgICBBTExfUFJPWFlcbiIKIlxuIgoiICBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGhvc3QgbmFtZXMgdGhhdCBzaG91bGRuJ3QgZ28gdGhyb3VnaCBhbnkgcHJveHkgaXNcbiIKIiAgc2V0IGluIChvbmx5IGFuIGFzdGVyaXNrLCAnKicgbWF0Y2hlcyBhbGwgaG9zdHMpXG4iCiJcbiIKIiAgICAgICAgTk9fUFJPWFlcbiIKIlxuIgoiICBJZiBhIHRhaWwgc3Vic3RyaW5nIG9mIHRoZSBkb21haW4tcGF0aCBmb3IgYSBob3N0IG1hdGNoZXMgb25lIG9mIHRoZXNlXG4iCik7CiBwdXRzKAoiICBzdHJpbmdzLCB0cmFuc2FjdGlvbnMgd2l0aCB0aGF0IG5vZGUgd2lsbCBub3QgYmUgcHJveGllZC5cbiIKIlxuIgoiXG4iCiIgIFRoZSB1c2FnZSBvZiB0aGUgLXgvLS1wcm94eSBmbGFnIG92ZXJyaWRlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuIgoiXG4iCiJORVRSQ1xuIgoiXG4iCiIgIFVuaXggaW50cm9kdWNlZCB0aGUgLm5ldHJjIGNvbmNlcHQgYSBsb25nIHRpbWUgYWdvLiBJdCBpcyBhIHdheSBmb3IgYSB1c2VyXG4iCiIgIHRvIHNwZWNpZnkgbmFtZSBhbmQgcGFzc3dvcmQgZm9yIGNvbW1vbmx5IHZpc2l0ZWQgZnRwIHNpdGVzIGluIGEgZmlsZSBzb1xuIgoiICB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIHR5cGUgdGhlbSBpbiBlYWNoIHRpbWUgeW91IHZpc2l0IHRob3NlIHNpdGVzLiBZb3VcbiIKIiAgcmVhbGl6ZSB0aGlzIGlzIGEgYmlnIHNlY3VyaXR5IHJpc2sgaWYgc29tZW9uZSBlbHNlIGdldHMgaG9sZCBvZiB5b3VyXG4iCik7CiBwdXRzKAoiICBwYXNzd29yZHMsIHNvIHRoZXJlZm9yIG1vc3QgdW5peCBwcm9ncmFtcyB3b24ndCByZWFkIHRoaXMgZmlsZSB1bmxlc3MgaXQgaXNcbiIKIiAgb25seSByZWFkYWJsZSBieSB5b3Vyc2VsZiAoY3VybCBkb2Vzbid0IGNhcmUgdGhvdWdoKS5cbiIKIlxuIgoiICBDdXJsIHN1cHBvcnRzIC5uZXRyYyBmaWxlcyBpZiB0b2xkIHNvICh1c2luZyB0aGUgLW4vLS1uZXRyYyBvcHRpb24pLiBUaGlzIGlzXG4iCiIgIG5vdCByZXN0cmljdGVkIHRvIG9ubHkgZnRwLCBidXQgY3VybCBjYW4gdXNlIGl0IGZvciBhbGwgcHJvdG9jb2xzIHdoZXJlXG4iCiIgIGF1dGhlbnRpY2F0aW9uIGlzIHVzZWQuXG4iCiJcbiIKIiAgQSB2ZXJ5IHNpbXBsZSAubmV0cmMgZmlsZSBjb3VsZCBsb29rIHNvbWV0aGluZyBsaWtlOlxuIgoiXG4iCiIgICAgICAgIG1hY2hpbmUgY3VybC5oYXh4LnNlIGxvZ2luIGlhbWRhbmllbCBwYXNzd29yZCBteXNlY3JldFxuIgoiXG4iCiJDVVNUT00gT1VUUFVUXG4iCiJcbiIKKTsKIHB1dHMoCiIgIFRvIGJldHRlciBhbGxvdyBzY3JpcHQgcHJvZ3JhbW1lcnMgdG8gZ2V0IHRvIGtub3cgYWJvdXQgdGhlIHByb2dyZXNzIG9mXG4iCiIgIGN1cmwsIHRoZSAtdy8tLXdyaXRlLW91dCBvcHRpb24gd2FzIGludHJvZHVjZWQuIFVzaW5nIHRoaXMsIHlvdSBjYW4gc3BlY2lmeVxuIgoiICB3aGF0IGluZm9ybWF0aW9uIGZyb20gdGhlIHByZXZpb3VzIHRyYW5zZmVyIHlvdSB3YW50IHRvIGV4dHJhY3QuXG4iCiJcbiIKIiAgVG8gZGlzcGxheSB0aGUgYW1vdW50IG9mIGJ5dGVzIGRvd25sb2FkZWQgdG9nZXRoZXIgd2l0aCBzb21lIHRleHQgYW5kIGFuXG4iCiIgIGVuZGluZyBuZXdsaW5lOlxuIgoiXG4iCiIgICAgICAgIGN1cmwgLXcgJ1dlIGRvd25sb2FkZWQgJXtzaXplX2Rvd25sb2FkfSBieXRlc1xcbicgd3d3LmRvd25sb2FkLmNvbVxuIgoiXG4iCiJLRVJCRVJPUzQgRlRQIFRSQU5TRkVSXG4iCiJcbiIKIiAgQ3VybCBzdXBwb3J0cyBrZXJiZXJvczQgZm9yIEZUUCB0cmFuc2ZlcnMuIFlvdSBuZWVkIHRoZSBrZXJiZXJvcyBwYWNrYWdlXG4iCik7CiBwdXRzKAoiICBpbnN0YWxsZWQgYW5kIHVzZWQgYXQgY3VybCBidWlsZCB0aW1lIGZvciBpdCB0byBiZSB1c2VkLlxuIgoiXG4iCiIgIEZpcnN0LCBnZXQgdGhlIGtyYi10aWNrZXQgdGhlIG5vcm1hbCB3YXksIGxpa2Ugd2l0aCB0aGUga2F1dGggdG9vbC4gVGhlbiB1c2VcbiIKIiAgY3VybCBpbiB3YXkgc2ltaWxhciB0bzpcbiIKIlxuIgoiICAgICAgICBjdXJsIC0ta3JiNCBwcml2YXRlIGZ0cDovL2tyYjRzaXRlLmNvbSAtdSB1c2VybmFtZTpmYWtlcHdkXG4iCiJcbiIKIiAgVGhlcmUncyBubyB1c2UgZm9yIGEgcGFzc3dvcmQgb24gdGhlIC11IHN3aXRjaCwgYnV0IGEgYmxhbmsgb25lIHdpbGwgbWFrZVxuIgoiICBjdXJsIGFzayBmb3Igb25lIGFuZCB5b3UgYWxyZWFkeSBlbnRlcmVkIHRoZSByZWFsIHBhc3N3b3JkIHRvIGthdXRoLlxuIgoiXG4iCiJURUxORVRcbiIKIlxuIgoiICBUaGUgY3VybCB0ZWxuZXQgc3VwcG9ydCBpcyBiYXNpYyBhbmQgdmVyeSBlYXN5IHRvIHVzZS4gQ3VybCBwYXNzZXMgYWxsIGRhdGFcbiIKKTsKIHB1dHMoCiIgIHBhc3NlZCB0byBpdCBvbiBzdGRpbiB0byB0aGUgcmVtb3RlIHNlcnZlci4gQ29ubmVjdCB0byBhIHJlbW90ZSB0ZWxuZXRcbiIKIiAgc2VydmVyIHVzaW5nIGEgY29tbWFuZCBsaW5lIHNpbWlsYXIgdG86XG4iCiJcbiIKIiAgICAgICAgY3VybCB0ZWxuZXQ6Ly9yZW1vdGUuc2VydmVyLmNvbVxuIgoiXG4iCiIgIEFuZCBlbnRlciB0aGUgZGF0YSB0byBwYXNzIHRvIHRoZSBzZXJ2ZXIgb24gc3RkaW4uIFRoZSByZXN1bHQgd2lsbCBiZSBzZW50XG4iCiIgIHRvIHN0ZG91dCBvciB0byB0aGUgZmlsZSB5b3Ugc3BlY2lmeSB3aXRoIC1vLlxuIgoiXG4iCiIgIFlvdSBtaWdodCB3YW50IHRoZSAtTi8tLW5vLWJ1ZmZlciBvcHRpb24gdG8gc3dpdGNoIG9mZiB0aGUgYnVmZmVyZWQgb3V0cHV0XG4iCiIgIGZvciBzbG93IGNvbm5lY3Rpb25zIG9yIHNpbWlsYXIuXG4iCiJcbiIKIiAgTk9URTogdGhlIHRlbG5ldCBwcm90b2NvbCBkb2VzIG5vdCBzcGVjaWZ5IGFueSB3YXkgdG8gbG9naW4gd2l0aCBhIHNwZWNpZmllZFxuIgopOwogcHV0cygKIiAgdXNlciBhbmQgcGFzc3dvcmQgc28gY3VybCBjYW4ndCBkbyB0aGF0IGF1dG9tYXRpY2FsbHkuIFRvIGRvIHRoYXQsIHlvdSBuZWVkXG4iCiIgIHRvIHRyYWNrIHdoZW4gdGhlIGxvZ2luIHByb21wdCBpcyByZWNlaXZlZCBhbmQgc2VuZCB0aGUgdXNlcm5hbWUgYW5kXG4iCiIgIHBhc3N3b3JkIGFjY29yZGluZ2x5LlxuIgoiXG4iCiJQRVJTSVNUQU5UIENPTk5FQ1RJT05TXG4iCiJcbiIKIiAgU3BlY2lmeWluZyBtdWx0aXBsZSBmaWxlcyBvbiBhIHNpbmdsZSBjb21tYW5kIGxpbmUgd2lsbCBtYWtlIGN1cmwgdHJhbnNmZXJcbiIKIiAgYWxsIG9mIHRoZW0sIG9uZSBhZnRlciB0aGUgb3RoZXIgaW4gdGhlIHNwZWNpZmllZCBvcmRlci5cbiIKIlxuIgoiICBsaWJjdXJsIHdpbGwgYXR0ZW1wdCB0byB1c2UgcGVyc2lzdGFudCBjb25uZWN0aW9ucyBmb3IgdGhlIHRyYW5zZmVycyBzbyB0aGF0XG4iCiIgIHRoZSBzZWNvbmQgdHJhbnNmZXIgdG8gdGhlIHNhbWUgaG9zdCBjYW4gdXNlIHRoZSBzYW1lIGNvbm5lY3Rpb24gdGhhdCB3YXNcbiIKKTsKIHB1dHMoCiIgIGFscmVhZHkgaW5pdGlhdGVkIGFuZCB3YXMgbGVmdCBvcGVuIGluIHRoZSBwcmV2aW91cyB0cmFuc2Zlci4gVGhpcyBncmVhdGx5XG4iCiIgIGRlY3JlYXNlcyBjb25uZWN0aW9uIHRpbWUgZm9yIGFsbCBidXQgdGhlIGZpcnN0IHRyYW5zZmVyIGFuZCBpdCBtYWtlcyBhIGZhclxuIgoiICBiZXR0ZXIgdXNlIG9mIHRoZSBuZXR3b3JrLlxuIgoiXG4iCiIgIE5vdGUgdGhhdCBjdXJsIGNhbm5vdCB1c2UgcGVyc2lzdGFudCBjb25uZWN0aW9ucyBmb3IgdHJhbnNmZXJzIHRoYXQgYXJlIHVzZWRcbiIKIiAgaW4gc3Vic2VxdWVuY2UgY3VybCBpbnZva2VzLiBUcnkgdG8gc3R1ZmYgYXMgbWFueSBVUkxzIGFzIHBvc3NpYmxlIG9uIHRoZVxuIgoiICBzYW1lIGNvbW1hbmQgbGluZSBpZiB0aGV5IGFyZSB1c2luZyB0aGUgc2FtZSBob3N0LCBhcyB0aGF0J2xsIG1ha2UgdGhlXG4iCiIgIHRyYW5zZmVycyBmYXN0ZXIuIElmIHlvdSB1c2UgYSBodHRwIHByb3h5IGZvciBmaWxlIHRyYW5zZmVycywgcHJhY3RpY2x5XG4iCik7CiBwdXRzKAoiICBhbGwgdHJhbnNmZXJzIHdpbGwgYmUgcGVyc2lzdGFudC5cbiIKIlxuIgoiICBQZXJzaXN0YW50IGNvbm5lY3Rpb25zIHdlcmUgaW50cm9kdWNlZCBpbiBjdXJsIDcuNy5cbiIKIlxuIgoiTUFJTElORyBMSVNUU1xuIgoiXG4iCiIgIEZvciB5b3VyIGNvbnZlbmllbmNlLCB3ZSBoYXZlIHNldmVyYWwgb3BlbiBtYWlsaW5nIGxpc3RzIHRvIGRpc2N1c3MgY3VybCxcbiIKIiAgaXRzIGRldmVsb3BtZW50IGFuZCB0aGluZ3MgcmVsZXZhbnQgdG8gdGhpcy5cbiIKIlxuIgoiICBUbyBzdWJzY3JpYmUgdG8gdGhlIG1haW4gY3VybCBsaXN0LCBtYWlsIGN1cmwtcmVxdWVzdEBjb250YWN0b3Iuc2Ugd2l0aFxuIgoiICBcInN1YnNjcmliZSA8ZmlsbCBpbiB5b3VyIGVtYWlsIGFkZHJlc3M+XCIgaW4gdGhlIGJvZHkuXG4iCiJcbiIKIiAgVG8gc3Vic2NyaWJlIHRvIHRoZSBjdXJsLWxpYnJhcnkgdXNlcnMvZGV2ZXJsb3BlcnMgbGlzdCwgZm9sbG93IHRoZVxuIgoiICBpbnN0cnVjdGlvbnMgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL1xuIgoiXG4iCik7CiBwdXRzKAoiICBUbyBzdWJzY3JpYmUgdG8gdGhlIGN1cmwtYW5ub3VuY2UgbGlzdCwgdG8gb25seSBnZXQgaW5mb3JtYXRpb24gYWJvdXQgbmV3XG4iCiIgIHJlbGVhc2VzLCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBhdCBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvXG4iCiJcbiIKIiAgVG8gc3Vic2NyaWJlIHRvIHRoZSBjdXJsLWFuZC1QSFAgbGlzdCBpbiB3aGljaCBjdXJsIHVzaW5nIHdpdGggUEhQIGlzXG4iCiIgIGRpc2N1c3NlZCwgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgYXQgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL1xuIgoiXG4iCiIgIFBsZWFzZSBkaXJlY3QgY3VybCBxdWVzdGlvbnMsIGZlYXR1cmUgcmVxdWVzdHMgYW5kIHRyb3VibGUgcmVwb3J0cyB0byBvbmUgb2ZcbiIKIiAgdGhlc2UgbWFpbGluZyBsaXN0cyBpbnN0ZWFkIG9mIG1haWxpbmcgYW55IGluZGl2aWR1YWwuXG4iCiApIDsKfQo=