LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfSkFQQU5FU0UsIFNVQkxBTkdfREVGQVVMVAoKTUVOVV8wMDEgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJTUVOVUlURU0gIpHlgquCyLGyut0oJkcpIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCU1FTlVJVEVNICKPrIKzgsixsrrdKCZNKSIsCUZDSURNX1NIVklFV19TTUFMTElDT04KCU1FTlVJVEVNICKI6peXKCZMKSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCU1FTlVJVEVNICKP2o3XKCZEKSIsCQlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwpFTkQKCk1FTlVfMDAyIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCVBPUFVQICIiCglCRUdJTgoJICBQT1BVUCAilVxcjqYoJlYpIgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICKR5YKrgqKDQYNDg1KDkygmRykiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJICAgIE1FTlVJVEVNICKPrIKzgqKDQYNDg1KDkygmTSkiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCgkgICAgTUVOVUlURU0gIojql5coJkwpIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJICAgIE1FTlVJVEVNICKP2o3XKCZEKSIsCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIoNBg0ODUoOTgsyQrpfxKCZJKSIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAilryRT4+HKCZOKSIsCTB4MzAJLyogY29sdW1uIDAgKi8KCSAgICBNRU5VSVRFTSAiju2X3o+HKCZUKSIsCTB4MzIJLyogY29sdW1uIDIgKi8KCSAgICBNRU5VSVRFTSAig1SDQ4NZj4coJlMpIiwJMHgzMQkvKiAuLi4gKi8KCSAgICBNRU5VSVRFTSAik/qVdI+HKCZEKSIsCTB4MzMKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgICBNRU5VSVRFTSAig0GDQ4NSg5OCzI6pk66QrpfxKCZBKSIsCUZDSURNX1NIVklFV19BVVRPQVJSQU5HRQoJICBFTkQKCSAgTUVOVUlURU0gIpOZitSKdYLJkK6X8SIsCUZDSURNX1NIVklFV19TTkFQVE9HUklECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAik1xcguiVdIKvIiwJCUZDSURNX1NIVklFV19JTlNFUlQKCSAgTUVOVUlURU0gIoNWg4eBW4Nng0qDYoNngsyTXFyC6JV0gq8iLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwoJICBQT1BVUCAikFaLS43skKwiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIpBWi0uDdINIg4uDXygmRikiLAkweDcwNTMKCSAgICBNRU5VSVRFTSAikFaLS4NWg4eBW4Nng0qDYoNnKCZMKSIsCTB4NzA1MgoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBFTkQKCSAgTUVOVUlURU0gIoN2g42DcINlg0IiLAkJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKCk1FTlVfU0hWX0ZJTEUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIE1FTlVJVEVNICKQ2ILojuaC6CgmVSkiLAkJRkNJRE1fU0hWSUVXX0NVVAoJICBNRU5VSVRFTSAig1KDc4FbKCZDKSIsCUZDSURNX1NIVklFV19DT1BZCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAig1aDh4Fbg2eDSoNig2eCzI3skKwoJkwpIiwJMHg3MDUxCgkgIE1FTlVJVEVNICKN7Y+cKCZEKSIsCUZDSURNX1NIVklFV19ERUxFVEUKCSAgTUVOVUlURU0gIpa8kU+CzJXPjVgoJlIpIiwJMHg3MDUwCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAig3aDjYNwg2WDQigmUCkiLAlGQ0lETV9TSFZJRVdfUFJPUEVSVElFUwoJRU5ECkVORAoKLyoKCXNwZWNpYWwgZm9sZGVycwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfREVTS1RPUAkJIsPevbjEr8zfIgoJSURTX01ZQ09NUFVURVIJCSLPsrrdy9+tsMAiCn0KCi8qCgljb250ZXh0IG1lbnVzCiovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19WSUVXX0xBUkdFCQkikeWCq4Kig0GDQ4NSg5MoJkcpIgoJSURTX1ZJRVdfU01BTEwJCSKPrIKzgqKDQYNDg1KDkygmTSkiCglJRFNfVklFV19MSVNUCQkiiOqXlygmTCkiCglJRFNfVklFV19ERVRBSUxTCSKP2o3XKCZEKSIKCUlEU19TRUxFQ1QJCSKRSZHwIgoJSURTX09QRU4JCSKKSoKtIgp9CgpTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAyMTAsIDE1MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiJXMggsmCwoKigsQiCkZPTlQgMTAsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgMTUzLCAxMzAsIDUwLCAxMgogTElTVEJPWCA5OSwgOCwgNjUsIDEzNywgODIsIExCU19OT1RJRlkgfCBXU19WU0NST0xMIHwgV1NfQk9SREVSCiBJQ09OICIiLCAxMDg4LCAxODksIDEwLCAxNCwgMTYKIExURVhUICIiLCAxMDAsIDgsIDEwLCAxMzcsIDMzCiBMVEVYVCAiV2luZSB3YXMgYnJvdWdodCB0byB5b3UgYnk6IiwgOTgsIDgsIDU1LCAxMzcsIDEwCn0KClNIRUxMX1JVTl9ETEcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMCwgMCwgMjI3LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIElDT04gIiIsIDEyMjk3LCA3LCAxMSwgMTgsIDIwLCBXU19WSVNJQkxFCiBMVEVYVCAiVHlwZSB0aGUgbmFtZSBvZiBhIHByb2dyYW0sIGZvbGRlciwgZG9jdW1lbnQsIG9yIEludGVybmV0IHJlc291cmNlLCBhbmQgV2luZSB3aWxsIG9wZW4gaXQgZm9yIHlvdS4iLCAxMjI4OSwgMzYsIDExLCAxODIsIDE4CiBMVEVYVCAiJk9wZW46IiwgMTIzMDUsIDcsIDM5LCAyNCwgMTAKIENPTlRST0wgIiIsIDEyMjk4LCAiQ09NQk9CT1giLCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBXU19WU0NST0xMIHwgV1NfVklTSUJMRSB8IENCU19ESVNBQkxFTk9TQ1JPTEwgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfRFJPUERPV04sIDM2LCAzNywgMTgzLCAxMDAKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgNjIsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIkNhbmNlbCIsIElEQ0FOQ0VMLCAxMTYsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIiZCcm93c2UuLi4iLCAxMjI4OCwgMTcwLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCn0KCi8qCWNvbHVtbnMgaW4gdGhlIHNoZWxsdmlldwkqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgoJSURTX1NIVl9DT0xVTU4xCQkilryRTyIKCUlEU19TSFZfQ09MVU1OMgkJIoNUg0ODWSIKCUlEU19TSFZfQ09MVU1OMwkJIoN0g0CDQ4OLgsyO7ZfeIgoJSURTX1NIVl9DT0xVTU40CQkijViQVpP6jp4iCglJRFNfU0hWX0NPTFVNTjUJCSKRrpCrIgoJSURTX1NIVl9DT0xVTU42CQkijYeMdoNUg0ODWSIKCUlEU19TSFZfQ09MVU1ONwkJIovzgquXZZfKIgoJSURTX1NIVl9DT0xVTU44CQkiTmFtZSIgLypGSVhNRSovCglJRFNfU0hWX0NPTFVNTjkJCSJDb21tZW50cyIgLypGSVhNRSovCkVORAo=