LyoKICogQ29weXJpZ2h0IDIwMDcgQXJ0ZW0gUmV6bmlrb3YKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgImF2aWZpbGVfcHJpdmF0ZS5oIgoKTEFOR1VBR0UgTEFOR19VS1JBSU5JQU4sIFNVQkxBTkdfREVGQVVMVAoKSUREX1NBVkVPUFRJT05TIERJQUxPRyBGSVhFRCBJTVBVUkUgIDQzLCAzNywgMTk2LCA4MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiz+Dw4Ozl8vDoIPHy6PHt5e3t/yIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICImzuHl8LPy/CDv7vKz6joiLC0xLDIsNSwxMTQsMTAKICAgIENPTUJPQk9YICAgICAgICBJRENfU1RSRUFNLDIsMTgsMTM0LDYxLENCU19EUk9QRE9XTkxJU1QgfCBXU19WU0NST0xMIHwKICAgICAgICAgICAgICAgICAgICBXU19UQUJTVE9QCiAgICBQVVNIQlVUVE9OICAgICAgIs8m4PDg7OXy8OguLi4iLElEQ19PUFRJT05TLDE0NSwxNyw0NSwxNAogICAgQVVUT0NIRUNLQk9YICAgICImsu3y5fDi4Osg9+Xw4/Pi4O3t/yIsSURDX0lOVEVSTEVBVkUsMyw0Miw2MCwxMSxXU19UQUJTVE9QCiAgICBFRElUVEVYVCAgICAgICAgSURDX0lOVEVSTEVBVkVFVkVSWSw2Niw0MSwzMiwxMixFU19BVVRPSFNDUk9MTAogICAgTFRFWFQgICAgICAgICAgICLq4OTws+IiLC0xLDEwNCw0MywzNiw5CiAgICBMVEVYVCAgICAgICAgICAgIs/u8u737ejpIPTu8Ozg8joiLC0xLDMsNTYsNTMsOQogICAgTFRFWFQgICAgICAgICAgICLW5SDss/H25SDn5OC68vzx/yDiIO7w5e3k8yIsSURDX0ZPUk1BVFRFWFQsNTUsNTYsOTAsMjYKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTQ1LDQyLDQ1LDE0CiAgICBQVVNIQlVUVE9OICAgICAgItHq4PHz4uDy6CIsSURDQU5DRUwsMTQ1LDYxLDQ1LDE0CkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogIElEU19XQVZFU1RSRUFNRk9STUFUCSLH4vPq7uLo6SDv7vKz6jogJXMiCiAgSURTX1dBVkVGSUxFVFlQRQkix+Lz6u7i6Okg7+7ys+oiCiAgSURTX0FMTE1VTFRJTUVESUEJItPxsyDs8+v88ujs5eSz6e2zIPTg6evoIgogIElEU19BTExGSUxFUwkJItPxsyD04Onr6CAoKi4qKUAqLioiCiAgSURTX1ZJREVPCQki4rPk5e4iCiAgSURTX0FVRElPCQki4PPks+4iCiAgSURTX0FWSVNUUkVBTUZPUk1BVAkiJXMgJXMgIyVkIgogIElEU19BVklGSUxFVFlQRQkiV2luZSDu4fDu4e3o6iBBVkkt9ODp67PiIOfgIOfg7O7i9/Pi4O3t/+wiCiAgSURTX1VOQ09NUFJFU1NFRCAgICAgICLh5ecg8fLo8e3l7e3/Igp9Cg==