LyoKICogU3RhcnQKICogRW5nbGlzaCBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAzIERhbiBLZWdlbAogKiBDb3B5cmlnaHQgMjAwNCBIZW5uaW5nIEdlcmhhcmR0CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfR0VSTUFOLCBTVUJMQU5HX0RFRkFVTFQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfR0VSTUFOLCBTVUJMQU5HX0RFRkFVTFQKewpTVFJJTkdfVVNBR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnRldCBlaW4gUHJvZ3JhbW0sIG9kZXIg9mZmbmV0IGVpbiBEb2t1bWVudCBpbiBkZW0gUHJvZ3JhbW0sIGRhc3Mgbm9ybWFsZXJ3ZWlzZSBm/HIgZGllIERhdGVpZW4gbWl0IGRpZXNlciBEYXRlaWVuZHVuZyBiZW51dHp0IHdpcmQuLiBcblwKR2VicmF1Y2g6IFxuXApzdGFydCBbT3B0aW9uZW5dIFByb2dyYW1tX0RhdGVpbmFtZSBbLi4uXSBcblwKc3RhcnQgW09wdGlvbmVuXSBEb2t1bWVudF9EYXRlaW5hbWUgXG5cCiBcblwKT3B0aW9uZW46IFxuXAovTVtpbmltaXplZF0gU3RhcnRlIGRhcyBQcm9ncmFtbSBtaW5pbWllcnQuIFxuXAovTUFYW2ltaXplZF0gU3RhcnRlIGRhcyBQcm9ncmFtbSBtYXhpbWllcnQuIFxuXAovUltlc3RvcmVkXSAgU3RhcnRlIGRhcyBQcm9ncmFtbSBub3JtYWwgKHdlZGVyIG1pbmltaWVydCBub2NoIG1heGltaWVydCkuIFxuXAovV1thaXRdICAgICAgV2FydGV0IGJpcyBkYXMgZ2VzdGFydGV0ZSBQcm9ncmFtbSBzaWNoIGJlZW5kZXQsIFxuXHQgICAgIGRhbm4gYmVlbmRldCBzaWNoIHN0YXJ0IG1pdCBkZXNzZW4gRXhpdGNvZGUgZGVzIFByb2dyYW1tZXMuXG5cCi9MICAgICAgICAgICBaZWlnZSBkaWUgRW5kYmVudXR6ZXJsaXplbnogYW4uIFxuXAogXG5cCnN0YXJ0LmV4ZSBWZXJzaW9uIDAuMiBDb3B5cmlnaHQgKEMpIDIwMDMsIERhbiBLZWdlbCBcblwKU3RhcnQga29tbXRlIEFCU09MVVQgT0hORSBHQVJBTlRJRTsgZvxyIGRldGFsaWVydGUgSW5mb3JtYXRpb25lbiwgc3RhcnRlIGVzIG1pdCBkZXIgL0wgT3B0aW9uLiBcblwKRGllcyBpc3QgZnJlaWUgU29mdHdhcmUsIHVuZCBkdSBiaXN0IHdpbGxrb21tZW4sIGVzIHVudGVyIGJlc3RpbW10ZW4gXG5cCkJlZGluZ3VuZ2VuIHdlaXRlciB6dSB2ZXJicmVpdGVuOyBm/GhyZSAnc3RhcnQgL0wnIGb8ciBtZWhyIERldGFpbHMgYXVzLiBcblwKIgoKU1RSSU5HX0xJQ0VOU0UsICJzdGFydC5leGUgdmVyc2lvbiAwLjIgQ29weXJpZ2h0IChDKSAyMDAzLCBEYW4gS2VnZWwgXG5cClRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgXG5cCm1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2UgXG5cCmFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgXG5cCm9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiBcblwKIFxuXApUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgXG5cCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIFxuXApNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIFxuXApHTlUgTGVzc2VyIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuIFxuXAogXG5cCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgUHVibGljIExpY2Vuc2UgXG5cCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIFxuXApGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gXG5cCiBcblwKU2NoYXUgaW4gZGllIERhdGVpIENPUFlJTkcuTElCIGb8ciBMaXplbnppbmZvcm1hdGlvbmVuLiBcblwKIgoKU1RSSU5HX0VYRUNGQUlMICJFcyBrb25udGUga2VpbmUgQW53ZW5kdW5nIGdlc3RhcnRldCB3ZXJkZW4sIG9kZXIgZXMgaXN0IGtlaW5lIEFud2VuZHVuZyBtaXQgZGVyIGFuZ2VnZWJlbmVuIERhdGVpIHZlcmtu/HBmdC5cblNoZWxsRXhlY3V0ZUV4IGdlc2NoZWl0ZXJ0Igp9Cg==