LyoKICogS29yZWFuIHJlc291cmNlcyBmb3IgU0VUVVBBUEkKICoKICogQ29weXJpZ2h0IDIwMDUgWXVuU29uZyBId2FuZwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAic2V0dXBhcGlfcHJpdmF0ZS5oIgoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewoJSURTX1BST01QVERJU0sgICAiwMwgxsTAzyAgJyVzJyDAuiAlc7+hvK0gx8q/5LfOIMfVtM+02SIKCUlEU19VTktOT1dOICAgICAgIr7LvPYgvvjAvSIKCUlEU19DT1BZRlJPTSAgICAgIrq5u+fH0iDGxMDPwMwgwKfEocfRILD3OiIKCUlEU19JTkZPICAgICAgICAgIsbEwM/AzCDAp8Shx9EgsOa3zrimIMDUt8LHz7DtLCDIrsDOwLsgxay4r8fPvcq9w7/ALiIKfQoKQ09QWUZJTEVETEdPUkQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMjAsIDIwLCAyMDgsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04KQ0FQVElPTiAixsTAzyC6ubvnwd8uLi4iCkZPTlQgOSwgIk1TIFNoZWxsIERsZyIKQkVHSU4KCVBVU0hCVVRUT04gIsPrvNIiLCBJRENBTkNFTCwgNzksIDg0LCA1MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKCUxURVhUICK/+Lq7OiIsIC0xLCA3LCA3LCA3NywgMTEsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQCglMVEVYVCAiIiwgU09VUkNFU1RST1JELCA3LCAxOCwgMTk0LCAxMSwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAKCUxURVhUICK48cD7wfY6IiwgLTEsIDcsIDMwLCA3NywgMTEsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQCglMVEVYVCAiIiwgREVTVFNUUk9SRCwgNywgNDEsIDE5NCwgMjIsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQCglDT05UUk9MICIiLCBQUk9HUkVTU09SRCwgInNldHVweF9wcm9ncmVzcyIsIDcsIDYzLCAxOTQsIDEzLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCkVORAoKSURQUk9NUFRGT1JESVNLIERJQUxPRyBNT1ZFQUJMRSBESVNDQVJEQUJMRSAwLCAwLCAyNTAsIDEyMApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAix8q/5MfRIMbEwM+16SIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgoJTFRFWFQgIsGmwNu758DHILyzxKEgtfC9usWpuKYgu/DA1MfPsO0sIFwgvsa3ocDHILyxxcO1yCC15bbzwMy66rChIL/Dudm4pcH2IMiuwM7Hz73Dv8AgIiwgSURDX0ZJTEVORUVERUQsIDEwLCAxMCwgMTc1LCAyMiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfR1JPVVAKCUxURVhUICIiLCBJRENfSU5GTywgMTAsIDUwLCAxNzUsIDIyLCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19HUk9VUAoJTFRFWFQgIsGmwNu758DHIMbEwM+16SC6ubvnx9IgsPc6IiwgSURDX0NPUFlGUk9NLCAxMCwgOTAsIDE3NSwgMTEsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQCglDT05UUk9MICIiLCBJRENfUEFUSCwgIkNPTUJPQk9YIiwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgV1NfVlNDUk9MTCB8IFdTX1ZJU0lCTEUgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX0RST1BET1dOLCAxMCwgMTAwLCAxNzUsIDE0CglQVVNIQlVUVE9OICLIrsDOIiwgSURPSywgMTk1LCAxMCwgNTAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCglQVVNIQlVUVE9OICLD67zSIiwgSURDQU5DRUwsIDE5NSwgMzAsIDUwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAoJUFVTSEJVVFRPTiAiw6Ox4i4uLiIsIElEQ19SVU5ETEdfQlJPV1NFLCAxOTUsIDEwMCwgNTAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCkVORAo=