LyogSGV5LCBFbWFjcywgb3BlbiB0aGlzIGZpbGUgd2l0aCAtKi0gY29kaW5nOiBjcDEyNTAgLSotCiAqCiAqIFdpbmVGaWxlCiAqIEN6ZWNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgTWFydGluIEZ1Y2hzCiAqIENvcHlyaWdodCAyMDAyIFN0ZXZlbiBFZHdhcmRzCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZAogKiBDb3B5cmlnaHQgMjAwNCBEYXZpZCBLcmVkYmEKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgInJlc291cmNlLmgiCgpMQU5HVUFHRSBMQU5HX0NaRUNILCBTVUJMQU5HX0RFRkFVTFQKCi8qIEN6ZWNoIHN0cmluZ3MgaW4gQ1AxMjUwICovCgovKiBNZW51ICovCgpJRE1fV0lORUZJTEUgTUVOVSBGSVhFRCBJTVBVUkUKewogICAgUE9QVVAgIiZTb3Vib3IiICB7CiAgICAgICAgTUVOVUlURU0gIiZPdGV2+O10XHRFbnRlciIsICAgICAgICAgICAgIElEX0FDVElWQVRFCiAgICAgICAgTUVOVUlURU0gIiZQ+GVzdW5vdXQuLi5cdEY3IiwgICAgICAgICAgIElEX0ZJTEVfTU9WRQogICAgICAgIE1FTlVJVEVNICImS29w7XJvdmF0Li4uXHRGOCIsICAgICAgICAgICBJRF9GSUxFX0NPUFkKICAgICAgICBNRU5VSVRFTSAiJlZlIHNjaHLhbmNlLi4uXHRGOSIsICAgICAgICAgMTE4CiAgICAgICAgTUVOVUlURU0gIiZTbWF6YXRcdERlbCIsICAgICAgICAgICAgICAgIElEX0ZJTEVfREVMRVRFCiAgICAgICAgTUVOVUlURU0gIlD4JmVqbWVub3ZhdC4uLiIsICAgICAgICAgICAgIDEwOQogICAgICAgIE1FTlVJVEVNICJWJmxhc3Rub3N0aS4uLlx0QWx0K0VudGVyIiwgICBJRF9FRElUX1BST1BFUlRJRVMKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJktvbXByZXNlLi4uIiwgICAgICAgICAgICAgICAgMTE5CiAgICAgICAgTUVOVUlURU0gIiZEZWtvbXByZXNlLi4uIiwgICAgICAgICAgICAgIDEyMAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImU3B1c3RpdC4uLiIsICAgICAgICAgICAgICAgICBJRF9SVU4KICAgICAgICBNRU5VSVRFTSAiJlRpc2tub3V0Li4uIiwgICAgICAgICAgICAgICAgMTAyCiAgICAgICAgTUVOVUlURU0gIkFzb2Npb3ZhdC4uLiIsICAgICAgICAgICAgICAgIDEwMwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJWJnl0dm/4aXQgYWRyZXPh+C4uLiIsICAgICAgICAxMTEKICAgICAgICBNRU5VSVRFTSAiJkhsZWRhdC4uLiIsICAgICAgICAgICAgICAgICAgMTA0CiAgICAgICAgTUVOVUlURU0gIiZadm9saXQgdm91Ym9yeS4uLiIsICAgICAgICAgIDExNgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIksmb25lY1x0QWx0K1giLCAgICAgICAgICAgICAgIElEX0ZJTEVfRVhJVAojZWxzZQogICAgICAgIE1FTlVJVEVNICJLJm9uZWMiLCAgICAgICAgICAgICAgICAgICAgICBJRF9GSUxFX0VYSVQKI2VuZGlmCiAgICB9CgogICAgUE9QVVAgIiZEaXNrIiAgewogICAgICAgIE1FTlVJVEVNICImS29w7XJvdmF0IGRpc2suLi4iLCAgICAgICAgICAyMDEKICAgICAgICBNRU5VSVRFTSAiJkptZW5vdmthIGRpc2suLi4iLCAgICAgICAgICAgMjAyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZGb3Jt4XRvdmF0IGRpc2suLi4iLCAgICAgICAgIElEX0ZPUk1BVF9ESVNLCiNpZmRlZiBfV0lOOTUKICAgICAgICBNRU5VSVRFTSAiJlZ5dHZv+Gl0IHN5c3RlbW92/SBkaXNrLi4uIiwgLTEgIC8qVE9ETyovCiNlbmRpZgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJQ+Glwb2ppdCAmc+2db3bpIHph+O16ZW7tIiwgICBJRF9DT05ORUNUX05FVFdPUktfRFJJVkUKICAgICAgICBNRU5VSVRFTSAiJk9kcG9qaXQgJnPtnW926SB6YfjtemVu7SIsICAgSURfRElTQ09OTkVDVF9ORVRXT1JLX0RSSVZFCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlNk7WxldCBqYWtvLi4uIiwgICAgICAgICAgICAgIDI1NAogICAgICAgIE1FTlVJVEVNICImT2RzdHJhbml0IHNk7Wxlbu0uLi4iLCAgICAgICAyNTUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlp2b2xpdCB6YfjtemVu7S4uLiIsICAgICAgICAgMjUxCiAgICB9CgogICAgUE9QVVAgIiZBZHJlc+H4ZSIgIHsKICAgICAgICBNRU5VSVRFTSAiJkRhbJrtIPpyb3Zl8lx0KyIsICAgICAgICAgICAgMzAxCiAgICAgICAgTUVOVUlURU0gIlJvemJhbGl0ICZzdHJvbVx0KiIsICAgICAgICAgIDMwMgogICAgICAgIE1FTlVJVEVNICJSb3piYWxpdCAmdpplXHRTdHJnKyoiLCAgICAgICAzMDMKICAgICAgICBNRU5VSVRFTSAiU2JhbGl0ICZzdHJvbVx0LSIsICAgICAgICAgICAgMzA0CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZPem5h6Gl0IHBvdG9ta3kiLCAgICAgICAgICAgIDUwNQogICAgfQoKICAgIFBPUFVQICImWm9icmF6ZW7tIiAgewogICAgICAgIE1FTlVJVEVNICImU3Ryb20gYSBhZHJlc+H4ZSIsICAgICAgICAgICA0MTMKICAgICAgICBNRU5VSVRFTSAiJkplbiBzdHJvbSIsICAgICAgICAgICAgICAgICAgNDExCiAgICAgICAgTUVOVUlURU0gIkplbiAmYWRyZXPh+GUiLCAgICAgICAgICAgICAgIDQxMgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImUm96ZOxsaXQiLCAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZKbelubyIsICAgICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfTkFNRQogICAgICAgIE1FTlVJVEVNICImRGV0YWlseSB2mmVjaCBzb3Vib3L5IiwgICAgICBJRF9WSUVXX0FMTF9BVFRSSUJVVEVTLCBDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIsjhJnN0Zehu6SBkZXRhaWx5Li4uIiwgICAgICAgIElEX1ZJRVdfU0VMRUNURURfQVRUUklCVVRFUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImVPjtZGl0IHBvZGxlIGpt6W5hIiwgICAgICAgICBJRF9WSUVXX1NPUlRfTkFNRQogICAgICAgIE1FTlVJVEVNICJU+O1kaXQgJnBvZGxlIHR5cHUiLCAgICAgICAgICBJRF9WSUVXX1NPUlRfVFlQRQogICAgICAgIE1FTlVJVEVNICJU+O1kaXQgcG9kbGUgJnZlbGlrb3N0aSIsICAgICBJRF9WSUVXX1NPUlRfU0laRQogICAgICAgIE1FTlVJVEVNICJU+O1kaXQgcG9kbGUgJmRhdGEiLCAgICAgICAgICBJRF9WSUVXX1NPUlRfREFURQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJU+O1kaXQgcG9kbGUgJi4uLiIsICAgICAgICAgICBJRF9WSUVXX0ZJTFRFUgogICAgfQoKICAgIFBPUFVQICImTmFzdGF2ZW7tIiAgewogICAgICAgIE1FTlVJVEVNICImUG90dnJ6b3bhbu0uLi4iLCAgICAgICAgICAgICA1MDEKICAgICAgICBNRU5VSVRFTSAiJlDtc21vLi4uIiwgICAgICAgICAgICAgICAgICAgSURfU0VMRUNUX0ZPTlQKICAgICAgICBNRU5VSVRFTSAiVXByYXZpdCBwYW5lbCAmbuFzdHJvavkuLi4iLCAgNTEyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZQYW5lbCBu4XN0cm9q+SIsICAgICAgICAgICAgIElEX1ZJRVdfVE9PTF9CQVIsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiJlBhbmVsIHph+O1lbu0iLCAgICAgICAgICAgICAgSURfVklFV19EUklWRV9CQVIsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiJlN0YXZvdv0g+OFkZWsiLCAgICAgICAgICAgICAgSURfVklFV19TVEFUVVNCQVIsIENIRUNLRUQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICImQ2VsYeEgb2JyYXpvdmthXHRDdHJsK1NoaWZ0K1MiLCBJRF9WSUVXX0ZVTExTQ1JFRU4KI2VuZGlmCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZNaW5pbWFsaXpvdmF0IHD4aSBzcHWadOxu7SIsIDUwNAogICAgICAgIE1FTlVJVEVNICImVWxvnml0IG5hc3RhdmVu7SBw+GkgdnlwbnV07SIsNTExCiAgICB9CgoKICAgIFBPUFVQICImWmFiZXpwZehlbu0iICB7CiAgICAgICAgTUVOVUlURU0gIiZQ+O1zdHVwLi4uIiwgICAgICAgICAgICAgICAgIDYwNQogICAgICAgIE1FTlVJVEVNICImTG9nb3bhbu0uLi4iLCAgICAgICAgICAgICAgICA2MDYKICAgICAgICBNRU5VSVRFTSAiJlZsYXN0bu1rLi4uIiwgICAgICAgICAgICAgICAgNjA3CiAgICB9CgogICAgUE9QVVAgIiZPa25vIiAgewogICAgICAgIE1FTlVJVEVNICJOb3bpICZva25vIiwgICAgICAgICAgICAgICAgICBJRF9XSU5ET1dfTkVXCiAgICAgICAgTUVOVUlURU0gIkthc2vhZG924W7tXHRDdHJsK0Y1IiwgICAgICAgIElEX1dJTkRPV19DQVNDQURFCiAgICAgICAgTUVOVUlURU0gIlVzcG/44WRhdCAmaG9yaXpvbnThbG7sIiwgICAgIElEX1dJTkRPV19USUxFX0hPUloKICAgICAgICBNRU5VSVRFTSAiVXNwb/jhZGF0ICZ2ZXJ0aWvhbG7sXHRDdHJsK0Y0IixJRF9XSU5ET1dfVElMRV9WRVJUCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiWmFyb3ZuYXQgYXV0b21hdGlja3kiLCAgICAgICAgSURfV0lORE9XX0FVVE9TT1JUCiNlbmRpZgogICAgICAgIE1FTlVJVEVNICJaYXJvdm5hdCAmc3ltYm9seSIsICAgICAgICAgICBJRF9XSU5ET1dfQVJSQU5HRQogICAgICAgIE1FTlVJVEVNICImQWt0dWFsaXpvdmF0XHRGNSIsICAgICAgICAgICBJRF9SRUZSRVNICiAgICB9CgogICAgUE9QVVAgIiY/IiAgewogICAgICAgIE1FTlVJVEVNICImVOltYXRhIG7hcG927GR5XHRGMSIsICAgICAgICBJRF9IRUxQCiAgICAgICAgTUVOVUlURU0gIkhsZWThbu0gdiAmbuFwb3bsZOwuLi5cdEYxIiwgIElEX0hFTFAKICAgICAgICBNRU5VSVRFTSAiJkphayBwb3We7XZhdCBu4XBvduxkdVx0RjEiLCAgSURfSEVMUF9VU0lORwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImSW5mb3JtYWNlIG8gV2luZWZpbGUuLi4iLCAgICBJRF9BQk9VVAogICAgfQp9CgpJRERfU0VMRUNUX0RFU1RJTkFUSU9OIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlp2b2x0ZSBj7WwiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgQ09OVFJPTCAgICAgICAgICIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKICAgIENPTlRST0wgICAgICAgICAiJkNlc3RhOiIsIC0xLCAiU3RhdGljIiwgU1NfTEVGVE5PV09SRFdSQVB8V1NfR1JPVVAsIDMsIDE4LCA2MCwgMTAKICAgIEVESVRURVhUICAgICAgICAyMDEsIDMsIDI5LCAxMzQsIDEyLCBFU19BVVRPSFNDUk9MTAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsIDEsIDE1OCwgNiwgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIlpydZppdCIsIDIsIDE1OCwgMjMsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICImUHJvY2jhemV0IiwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQoKU1RSSU5HVEFCTEUKewogICAgSURTX0ZPTlRfU0VMX0RMR19OQU1FICAgIkFwbGlrb3bhbu0gbmFzdGF2ZW7tIHDtc21hIgogICAgSURTX0ZPTlRfU0VMX0VSUk9SICAgICAgIkNoeWJhIHD4aSB2b2xi7CBub3bpaG8gcO1zbWEuIgp9CgpTVFJJTkdUQUJMRQp7CiAgICBJRFNfV0lORUZJTEUgICAgICAgICAgICAiV2luZWZpbGUiCiAgICBJRFNfRVJST1IgICAgICAgICAgICAgICAiQ2h5YmEiCiAgICBJRFNfUk9PVF9GUyAgICAgICAgICAgICAicm9vdCBmcyIKICAgIElEU19VTklYRlMgICAgICAgICAgICAgICJ1bml4ZnMiCiAgICBJRFNfREVTS1RPUCAgICAgICAgICAgICAiUGxvY2hhIgogICAgSURTX1NIRUxMICAgICAgICAgICAgICAgIlD47Wthem92/SD44WRlayIKICAgIElEU19USVRMRUZNVCAgICAgICAgICAgICIlcyAtICVzIgogICAgSURTX05PX0lNUEwgICAgICAgICAgICAgIlphdO1tIG5laW1wbGVtZW50b3bhbm8iCiAgICBJRFNfV0lORV9GSUxFICAgICAgICAgICAiV2luZSBGaWxlIgp9CgpTVFJJTkdUQUJMRQp7CiAgICBJRFNfQ09MX05BTUUgICAgICAgICAgICAiSm3pbm8iCiAgICBJRFNfQ09MX1NJWkUgICAgICAgICAgICAiVmVsaWtvc3QiCiAgICBJRFNfQ09MX0NEQVRFICAgICAgICAgICAiRGF0dW0gdnl0dm/4ZW7tIgogICAgSURTX0NPTF9BREFURSAgICAgICAgICAgIkRhdHVtIHBvc2xlZG7taG8gcPjtc3R1cHUiCiAgICBJRFNfQ09MX01EQVRFICAgICAgICAgICAiRGF0dW0gcG9zbGVkbu0gbW9kaWZpa2FjZSIKICAgIElEU19DT0xfSURYICAgICAgICAgICAgICJJbmRleC9Jbm9kZSIKICAgIElEU19DT0xfTElOS1MgICAgICAgICAgICJMaW5reSIKICAgIElEU19DT0xfQVRUUiAgICAgICAgICAgICJBdHJpYnV0eSIKICAgIElEU19DT0xfU0VDICAgICAgICAgICAgICJaYWJlenBl6GVu7SIKCiAgICBJRFNfRlJFRV9TUEFDRV9GTVQgICAgICAiJXMgeiAlcyB2b2xu6WhvIgp9Cg==