LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDIgUm9iZXJ0IERpY2tlbnNvbgogKiBDb3B5cmlnaHQgMjAxMCCjdWthc3ogV29qbmmzb3dpY3oKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgInJlc291cmNlLmgiCgpMQU5HVUFHRSBMQU5HX1BPTElTSCwgU1VCTEFOR19ERUZBVUxUCgovKgogKiBEaWFsb2cKICovCgpJRERfRVhQT1JUX1RFTVBMQVRFIERJQUxPRyAgNTAsIDUwLCAyNzgsIDU0ClNUWUxFIERTXzNETE9PSyB8IERTX0NPTlRST0wgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19DTElQU0lCTElOR1MgfAogICAgV1NfQk9SREVSCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIEdST1VQQk9YICImRWtzcG9ydHVqIHJlamVzdHIiLCBJRENfRVhQT1JUX0JBU0UsIDYsIDYsIDI2NiwgNDIsIFdTX0dST1VQCiAgICBBVVRPUkFESU9CVVRUT04gIiZDYbN5IHJlamVzdHIiLCBJRENfRVhQT1JUX0FMTCwgMTIsIDE1LCAyNDQsIDEyCiAgICBBVVRPUkFESU9CVVRUT04gIiZXeWJyYW65IGdhs7mfOiIsIElEQ19FWFBPUlRfU0VMRUNURUQsIDEyLCAzMCwgNzAsIDEyCiAgICBFRElUVEVYVCBJRENfRVhQT1JUX1BBVEgsIDgyLCAzMCwgMTg0LCAxMgpFTkQKCklERF9GSU5EIERJQUxPRyAgMjIsIDE3LCAyMjAsIDg1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJXeXN6dWthaiB3IHJlamVzdHJ6ZSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICJabmFqZJ86IixJRENfU1RBVElDLDUsNywxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9OQU1FLDQwLDUsMTI1LDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgRVNfQVVUT0hTQ1JPTEwKICAgIExURVhUICAgICAgICAgICAiU3p1a2FqIHc6IixJRENfU1RBVElDLDUsIDIyLCAxMTksIDgKICAgIENIRUNLQk9YICAgICAgICAiS2x1Y3phY2giLCBJRENfRklORF9LRVlTLCA1LCAzNCwgOTAsIDEwLCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBCU19BVVRPQ0hFQ0tCT1gKICAgIENIRUNLQk9YICAgICAgICAiTmF6d2FjaCB3YXJ0b5xjaSIsIElEQ19GSU5EX1ZBTFVFUywgNSwgNDYsIDkwLCAxMCwgV1NfVEFCU1RPUCB8IEJTX0FVVE9DSEVDS0JPWAogICAgQ0hFQ0tCT1ggICAgICAgICJUcmWcY2kgd2FydG+cY2kiLCBJRENfRklORF9DT05URU5ULCA1LCA1OCwgOTAsIDEwLCBXU19UQUJTVE9QIHwgQlNfQVVUT0NIRUNLQk9YCiAgICBDSEVDS0JPWCAgICAgICAgIlR5bGtvIHBls25lIGRvcGFzb3dhbmllIiwgSURDX0ZJTkRfV0hPTEUsIDUsIDcwLCAxMjAsIDEwLCBXU19UQUJTVE9QIHwgQlNfQVVUT0NIRUNLQk9YCiAgICBERUZQVVNIQlVUVE9OICAgIlpuYWpknyIsSURPSywxNzUsNSw0MCwxNSxXU19HUk9VUAogICAgUFVTSEJVVFRPTiAgICAgICJaYW1rbmlqIixJRENBTkNFTCwxNzUsMjQsNDAsMTUsIFdTX0dST1VQCkVORAoKSUREX0FEREZBVk9SSVRFIERJQUxPRyAgMjIsIDE3LCAyMTAsIDU1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJEb2RhaiBkbyB1bHViaW9ueWNoIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIk5hendhOiIsSURDX1NUQVRJQyw1LDUsMTE5LDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfTkFNRSw1LDE1LDIwMCwxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUCB8IEVTX0FVVE9IU0NST0xMCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDEyMCwzNiw0MCwxNSxXU19HUk9VUAogICAgUFVTSEJVVFRPTiAgICAgICJBbnVsdWoiLElEQ0FOQ0VMLDE2NSwzNiw0MCwxNSwgV1NfR1JPVVAKRU5ECgpJRERfREVMRkFWT1JJVEUgRElBTE9HICAyMiwgMTcsIDIxMCwgOTAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlVzdfEgdWx1YmlvbnkiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiTmF6d2E6IixJRENfU1RBVElDLDUsNSwxMTksOAogICAgTElTVEJPWCAgICAgICAgIElEQ19OQU1FX0xJU1QsNSwxNSwyMDAsNTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBMQlNfU09SVCB8IExCU19OT0lOVEVHUkFMSEVJR0hUIHwgV1NfVlNDUk9MTAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxMjAsNzIsNDAsMTUsV1NfR1JPVVAKICAgIFBVU0hCVVRUT04gICAgICAiQW51bHVqIixJRENBTkNFTCwxNjUsNzIsNDAsMTUsIFdTX0dST1VQCkVORAoKSUREX0VESVRfU1RSSU5HIERJQUxPRyAgMjIsIDE3LCAyMTAsIDc1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJFZHljamEgZGFuZWogdGVrc3Rvd2VqIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIk5hendhOiIsSURDX1NUQVRJQyw1LDUsMTE5LDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfTkFNRSw1LDE1LDIwMCwxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUCB8IEVTX0FVVE9IU0NST0xMIHwgV1NfRElTQUJMRUQKICAgIExURVhUICAgICAgICAgICAiV2FydG+c5joiLElEQ19TVEFUSUMsNSwzMCwxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9EQVRBLDUsNDAsMjAwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgRVNfQVVUT0hTQ1JPTEwKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTIwLDU2LDQwLDE1LFdTX0dST1VQCiAgICBQVVNIQlVUVE9OICAgIkFudWx1aiIsSURDQU5DRUwsMTY1LDU2LDQwLDE1LFdTX0dST1VQCkVORAoKSUREX0VESVRfRFdPUkQgRElBTE9HICAyMiwgMTcsIDIxMCwgMTAwClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJFZHljamEgZGFuZWogbGljemJvd2VqIChEV09SRCkiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiTmF6d2E6IixJRENfU1RBVElDLDUsNSwxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9OQU1FLDUsMTUsMjAwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgRVNfQVVUT0hTQ1JPTEwgfCBXU19ESVNBQkxFRAogICAgTFRFWFQgICAgICAgICAgICJXYXJ0b5zmOiIsSURDX1NUQVRJQyw1LDMwLDkwLDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfREFUQSw1LDQwLDkwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCiAgICBHUk9VUEJPWCAgICAgICAgIlN5c3RlbSIsIElEQ19EV09SRF9CQVNFLCAxMjAsIDMwLCA4NSwgMzcsIEJTX0dST1VQQk9YCiAgICBBVVRPUkFESU9CVVRUT04gIlN6ZXNuYXN0a293eSIsIElEQ19EV09SRF9IRVgsIDEzMCwgNDAsIDYwLCAxMCwgV1NfVEFCU1RPUAogICAgQVVUT1JBRElPQlVUVE9OICJEemllc2nqdG55IiwgSURDX0RXT1JEX0RFQywgMTMwLCA1MiwgNjAsIDEwLCBXU19UQUJTVE9QCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDEyMCw3OCw0MCwxNSxXU19HUk9VUAogICAgUFVTSEJVVFRPTiAgICJBbnVsdWoiLElEQ0FOQ0VMLDE2NSw3OCw0MCwxNSxXU19HUk9VUApFTkQKCklERF9FRElUX0JJTkFSWSBESUFMT0cgIDIyLCAxNywgMTcwLCAxMDAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX05PSURMRU1TRyB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkVkeWNqYSBkYW5laiBiaW5hcm5laiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICJOYXp3YToiLElEQ19TVEFUSUMsNSw1LDExOSw4CiAgICBFRElUVEVYVCAgICAgICAgSURDX1ZBTFVFX05BTUUsNSwxNSwxNjAsMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBFU19BVVRPSFNDUk9MTHwgV1NfRElTQUJMRUQKICAgIExURVhUICAgICAgICAgICAiV2FydG+c5joiLElEQ19TVEFUSUMsNSwzMCw5MCw4CiAgICBDT05UUk9MICAgICAgICAgIiIsSURDX1ZBTFVFX0RBVEEsIkhleEVkaXQiLFdTX1RBQlNUT1AsNSw0MCwxNjAsNDAKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssODAsODMsNDAsMTUsV1NfR1JPVVAKICAgIFBVU0hCVVRUT04gICAiQW51bHVqIixJRENBTkNFTCwxMjUsODMsNDAsMTUsV1NfR1JPVVAKRU5ECgpJRERfRURJVF9NVUxUSV9TVFJJTkcgRElBTE9HICAyMiwgMTcsIDIxMCwgMTc1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJFZHljamEgZGFuZWogd2llbG90ZWtzdG93ZWoiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiTmF6d2E6IixJRENfU1RBVElDLDUsNSwxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9OQU1FLDUsMTUsMjAwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgRVNfQVVUT0hTQ1JPTEx8IFdTX0RJU0FCTEVECiAgICBMVEVYVCAgICAgICAgICAgIldhcnRvnOY6IixJRENfU1RBVElDLDUsMzAsMTE5LDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfREFUQSw1LDQwLDIwMCwxMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBXU19IU0NST0xMIHwgV1NfVlNDUk9MTCB8IEVTX01VTFRJTElORSB8IEVTX1dBTlRSRVRVUk4KICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTIwLDE1Niw0MCwxNSxXU19HUk9VUAogICAgUFVTSEJVVFRPTiAgICJBbnVsdWoiLElEQ0FOQ0VMLDE2NSwxNTYsNDAsMTUsV1NfR1JPVVAKRU5ECgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKgogKiBURVhUSU5DTFVERQogKi8KCjEgVEVYVElOQ0xVREUKQkVHSU4KICAgICJyZXNvdXJjZS5oXDAiCkVORAo=