LyoKICogU3RhcnQKICogRW5nbGlzaCBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAzIERhbiBLZWdlbAogKiBDb3B5cmlnaHQgMjAwNCBIZW5uaW5nIEdlcmhhcmR0CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfR0VSTUFOLCBTVUJMQU5HX05FVVRSQUwKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfR0VSTUFOLCBTVUJMQU5HX05FVVRSQUwKewpTVFJJTkdfVVNBR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnRldCBlaW4gUHJvZ3JhbW0sIG9kZXIg9mZmbmV0IGVpbiBEb2t1bWVudCBpbiBkZW0gUHJvZ3JhbW0sIGRhc3Mgbm9ybWFsZXJ3ZWlzZSBm/HIgZGllIERhdGVpZW4gbWl0IGRpZXNlciBEYXRlaWVuZHVuZyBiZW51dHp0IHdpcmQuLlxuXApHZWJyYXVjaDpcblwKc3RhcnQgW09wdGlvbmVuXSBQcm9ncmFtbV9EYXRlaW5hbWUgWy4uLl1cblwKc3RhcnQgW09wdGlvbmVuXSBEb2t1bWVudF9EYXRlaW5hbWVcblwKXG5cCk9wdGlvbmVuOlxuXAovTVtpbmltaXplZF0gU3RhcnRlIGRhcyBQcm9ncmFtbSBtaW5pbWllcnQuXG5cCi9NQVhbaW1pemVkXSBTdGFydGUgZGFzIFByb2dyYW1tIG1heGltaWVydC5cblwKL1JbZXN0b3JlZF0gIFN0YXJ0ZSBkYXMgUHJvZ3JhbW0gbm9ybWFsICh3ZWRlciBtaW5pbWllcnQgbm9jaCBtYXhpbWllcnQpLlxuXAovV1thaXRdICAgICAgV2FydGV0IGJpcyBkYXMgZ2VzdGFydGV0ZSBQcm9ncmFtbSBzaWNoIGJlZW5kZXQsXG5cdCAgICAgZGFubiBiZWVuZGV0IHNpY2ggc3RhcnQgbWl0IGRlc3NlbiBFeGl0Y29kZSBkZXMgUHJvZ3JhbW1lcy5cblwKL0wgICAgICAgICAgIFplaWdlIGRpZSBFbmRiZW51dHplcmxpemVueiBhbi5cblwKXG5cCnN0YXJ0LmV4ZSBWZXJzaW9uIDAuMiBDb3B5cmlnaHQgKEMpIDIwMDMsIERhbiBLZWdlbFxuXApTdGFydCBrb21tdCBBQlNPTFVUIE9ITkUgR0FSQU5USUU7IGb8ciBkZXRhaWxsaWVydGUgSW5mb3JtYXRpb25lbiwgc3RhcnRlIGVzIG1pdCBkZXIgL0wgT3B0aW9uLlxuXApEaWVzIGlzdCBmcmVpZSBTb2Z0d2FyZSwgdW5kIGR1IGJpc3Qgd2lsbGtvbW1lbiwgZXMgdW50ZXIgYmVzdGltbXRlblxuXApCZWRpbmd1bmdlbiB3ZWl0ZXIgenUgdmVyYnJlaXRlbjsgZvxocmUgJ3N0YXJ0IC9MJyBm/HIgbWVociBEZXRhaWxzIGF1cy5cblwKIgoKU1RSSU5HX0xJQ0VOU0UsICJzdGFydC5leGUgdmVyc2lvbiAwLjIgQ29weXJpZ2h0IChDKSAyMDAzLCBEYW4gS2VnZWxcblwKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vclxuXAptb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlXG5cCmFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjFcblwKb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cClxuXApUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcblwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcblwKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuXApHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cClxuXApZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlXG5cCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG5cCkZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuXG5cClxuXApTY2hhdSBpbiBkaWUgRGF0ZWkgQ09QWUlORy5MSUIgZvxyIExpemVuemluZm9ybWF0aW9uZW4uXG5cCiIKClNUUklOR19FWEVDRkFJTCAiRXMga29ubnRlIGtlaW5lIEFud2VuZHVuZyBnZXN0YXJ0ZXQgd2VyZGVuLCBvZGVyIGVzIGlzdCBrZWluZSBBbndlbmR1bmcgbWl0IGRlciBhbmdlZ2ViZW5lbiBEYXRlaSB2ZXJrbvxwZnQuXG5TaGVsbEV4ZWN1dGVFeCBnZXNjaGVpdGVydCIKClNUUklOR19VTklYRkFJTCAiRGVyIGFuZ2VnZWJlbmUgVW5peCBEYXRlaW5hbWUga29ubnRlIG5pY2h0IGluIGVpbmVuIERPUyBEYXRlaW5hbWVuIHVtZ2V3YW5kZWx0IHdlcmRlbi4iCn0K