LyoKICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IEJvcmxhbmQgU29mdHdhcmUgQ29ycG9yYXRpb24KICogCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCiAqCiAqIENvbnRyaWJ1dG9yczoKICogICAgRG1pdHJ5IFN0YWRuaWsgKEJvcmxhbmQpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAqICAgIEFsZXhhbmRlciBTaGF0YWxpbiAoQm9ybGFuZCkgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICovCgqrSU1QT1JUICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2dtZi8yMDA4L0dlbk1vZGVsIrsKCqtERUZJTkUgTWFpbiBGT1IgZ21mZ2VuOjpHZW5MaW5rLbsKq0VYUEFORCB4cHQ6OkNvbW1vbjo6Y29weXJpZ2h0IEZPUiBnZXREaWFncmFtKCkuZWRpdG9yR2VuLbsKcGFja2FnZSCrZ2V0RGlhZ3JhbSgpLmVkaXRQYXJ0c1BhY2thZ2VOYW1luzsKCqtFWFBBTkQgeHB0OjpDb21tb246OmdlbmVyYXRlZENsYXNzQ29tbWVudLsKcHVibGljIGNsYXNzIKtlZGl0UGFydENsYXNzTmFtZbsgq0VYUEFORCBleHRlbmRzTGlzdLsgq0VYUEFORCBpbXBsZW1lbnRzTGlzdLsgewoKCatFWFBBTkQgYXR0cmlidXRlcy27CgkKCatFWFBBTkQgaW1wbDo6ZGlhZ3JhbTo6ZWRpdHBhcnRzOjpMaW5rRWRpdFBhcnQ6OmNvbnN0cnVjdG9yLbsKCQoJq0VYUEFORCBjcmVhdGVEZWZhdWx0RWRpdFBvbGljaWVzLbsKCatFWFBBTkQgaW1wbDo6ZGlhZ3JhbTo6ZWRpdHBhcnRzOjpMaW5rRWRpdFBhcnQ6OmFkZEZpeGVkQ2hpbGQtuwoJq0VYUEFORCBpbXBsOjpkaWFncmFtOjplZGl0cGFydHM6OkxpbmtFZGl0UGFydDo6YWRkQ2hpbGRWaXN1YWwtuwoJCgmrRVhQQU5EIGltcGw6OmRpYWdyYW06OmVkaXRwYXJ0czo6TGlua0VkaXRQYXJ0OjpjcmVhdGVMaW5rRmlndXJlLbsKCQoJq0VYUEFORCBhZGRpdGlvbnMtuwp9CqtFTkRERUZJTkW7CgqrREVGSU5FIGV4dGVuZHNMaXN0IEZPUiBnbWZnZW46Okdlbkxpbmu7ZXh0ZW5kcyBvcmcuZWNsaXBzZS5nbWYucnVudGltZS5kaWFncmFtLnVpLmVkaXRwYXJ0cy5Db25uZWN0aW9uTm9kZUVkaXRQYXJ0q0VORERFRklORbsKCqtERUZJTkUgaW1wbGVtZW50c0xpc3QgRk9SIGdtZmdlbjo6R2VuTGluay27CgmrSUYgdHJlZUJyYW5jaLtpbXBsZW1lbnRzIG9yZy5lY2xpcHNlLmdtZi5ydW50aW1lLmRpYWdyYW0udWkuZWRpdHBhcnRzLklUcmVlQnJhbmNoRWRpdFBhcnSrRU5ESUYtuwqrRU5EREVGSU5FuwoKq0RFRklORSBhdHRyaWJ1dGVzIEZPUiBnbWZnZW46OkdlbkxpbmstuwoJq0VYUEFORCB4cHQ6OmRpYWdyYW06OmVkaXRwYXJ0czo6Q29tbW9uOjp2aXN1YWxJRENvbnN0YW50LbsKq0VORERFRklORbsKCqtERUZJTkUgY3JlYXRlRGVmYXVsdEVkaXRQb2xpY2llcyBGT1IgZ21mZ2VuOjpHZW5MaW5rLbsKCatFWFBBTkQgeHB0OjpDb21tb246OmdlbmVyYXRlZE1lbWJlckNvbW1lbnS7Cglwcm90ZWN0ZWQgdm9pZCBjcmVhdGVEZWZhdWx0RWRpdFBvbGljaWVzKCkgewoJCatFWFBBTkQgaW1wbDo6ZGlhZ3JhbTo6ZWRpdHBhcnRzOjpMaW5rRWRpdFBhcnQ6OmNyZWF0ZURlZmF1bHRFZGl0UG9saWNpZXNCb2R5LbsKCX0Kq0VORERFRklORbsKCqtERUZJTkUgYWRkaXRpb25zIEZPUiBnbWZnZW46OkdlbkxpbmstuwqrRU5EREVGSU5Fuw==