LyoKICogTm9yd2VnaWFuIEJva23lbCBsYW5ndWFnZSByZXNvdXJjZSBmaWxlIGZvciBDcmVkZW50aWFscyBVSQogKgogKiBDb3B5cmlnaHQgMjAwNyBBbGV4YW5kZXIgTi4gU/hybmVzIDxhbGV4QHRoZWhhbmRvZmFnb255LmNvbT4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19OT1JXRUdJQU4sIFNVQkxBTkdfTk9SV0VHSUFOX0JPS01BTAoKSUREX0NSRURESUFMT0cgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAyMTMsIDE0OQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgRFNfQ0VOVEVSIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJJRFNfVElUTEVGT1JNQVQiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIENPTlRST0wgICAgICAgICBJREJfQkFOTkVSLC0xLCJTdGF0aWMiLFNTX0JJVE1BUCB8IFNTX0NFTlRFUklNQUdFLDAsCiAgICAgICAgICAgICAgICAgICAgMCwyMTMsMzcKICAgIExURVhUICAgICAgICAgICAiSURTX01FU1NBR0VGT1JNQVQiLElEQ19NRVNTQUdFLDgsNDgsMTk5LDgsTk9UIFdTX0dST1VQCiAgICBMVEVYVCAgICAgICAgICAgIkJyJnVrZXJuYXZuOiIsLTEsOCw2Miw3MiwxMixTU19DRU5URVJJTUFHRQogICAgQ09OVFJPTCAgICAgICAgICIiLElEQ19VU0VSTkFNRSwiQ29tYm9Cb3hFeDMyIixDQlNfRFJPUERPV04gfAogICAgICAgICAgICAgICAgICAgIENCU19OT0lOVEVHUkFMSEVJR0hUIHwgV1NfVEFCU1RPUCw4MCw2MiwxMjYsODcKICAgIExURVhUICAgICAgICAgICAiJlBhc3NvcmQ6IiwtMSw4LDgwLDcyLDEyLFNTX0NFTlRFUklNQUdFCiAgICBFRElUVEVYVCAgICAgICAgSURDX1BBU1NXT1JELDgwLDgwLDEyNiwxMixFU19QQVNTV09SRCB8IEVTX0FVVE9IU0NST0xMCiAgICBDT05UUk9MICAgICAgICAgIiZSZW1lbWJlciBteSBwYXNzd29yZCIsSURDX1NBVkUsIkJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUCw4MCw5OCwxMjYsMTIKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssOTcsMTI4LDUwLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkF2YnJ5dCIsSURDQU5DRUwsMTU2LDEyOCw1MCwxNApFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIElEU19USVRMRUZPUk1BVCAgICAgIktvYmxlIHRpbCAlcyIKICAgIElEU19NRVNTQUdFRk9STUFUICAgIktvYmxlciB0aWwgJXMiCiAgICBJRFNfSU5DT1JSRUNUUEFTU1dPUkRUSVRMRSAgIktsYXJ0ZSBpa2tlIGxvZ2dlIHDlIgogICAgSURTX0lOQ09SUkVDVFBBU1NXT1JEICAgICAgICJT+HJnIGZvciBhdCBkdSBvcHBnYSByaWt0aWdcbmJydWtlcm5hdm4gb2cgcGFzc29yZC4iCiAgICBJRFNfQ0FQU0xPQ0tPTlRJVExFICJDYXBzIExvY2sgZXIgcOUiCiAgICBJRFNfQ0FQU0xPQ0tPTiAgICAgICLFIGhhIENhcHMgTG9jayBw5SBrYW4gZvhyZSB0aWwgYXQgZHUgc2tyaXZlciBpbm4gcGFzc29yZGV0IHDlIGZlaWwgbeV0ZS5cblxuVHJ5a2sgcOUgQ2FwcyBMb2NrLWtuYXBwZW4gcOUgdGFzdGF0dXJldCBmb3Ig5SBzbOUgYXYgQ2FwcyBMb2NrIGb4ciBkdVxuc2tyaXZlciBpbm4gcGFzc29yZGV0IHDlIG55dHQuIgp9Cg==