LyoKICogV2luZUZpbGUKICogU3dlZGlzaCBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDA1IERhdmlkIE5vcmRlbmJlcmcKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19TV0VESVNILCBTVUJMQU5HX0RFRkFVTFQKI3ByYWdtYSBjb2RlX3BhZ2UoMTI1MikKCgovKiBNZW51ICovCgoKSURNX1dJTkVGSUxFIE1FTlUgRklYRUQgSU1QVVJFCnsKCVBPUFVQICImQXJraXYiICB7CiAgICAgICAgTUVOVUlURU0gIibWcHBuYVx0RW50ZXIiLCAgICAgICAgICAgICAgICBJRF9BQ1RJVkFURQogICAgICAgIE1FTlVJVEVNICImRmx5dHRhLi4uXHRGNyIsICAgICAgICAgICAgICAgIElEX0ZJTEVfTU9WRQogICAgICAgIE1FTlVJVEVNICImS29waWVyYS4uLlx0RjgiLCAgICAgICAgICAgICAgICAxMDcKICAgICAgICBNRU5VSVRFTSAiJkkgdXJrbGlwcC4uLlx0RjkiLCAgICAgICAgMTE4CiAgICAgICAgTUVOVUlURU0gIiZUYSBib3J0XHREZWwiLCAgICAgICAgICAgICAgICAxMDgKICAgICAgICBNRU5VSVRFTSAiJkJ5dCBuYW1uLi4uIiwgICAgICAgICAgICAgICAgICAxMDkKICAgICAgICBNRU5VSVRFTSAiJkVnZW5za2FwZXIuLi5cdEFsdCtFbnRlciIsICAgSURfRURJVF9QUk9QRVJUSUVTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZLb21wcmltZXJhLi4uIiwgICAgICAgICAgICAgICAgMTE5CiAgICAgICAgTUVOVUlURU0gIlBhY2thICZ1cHAuLi4iLCAgICAgICAgICAgICAgMTIwCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZL9nIuLi4iLCAgICAgICAgICAgICAgICAgICAgIElEX0VYRUNVVEUKICAgICAgICBNRU5VSVRFTSAiJlNrcml2IHV0Li4uIiwgICAgICAgICAgICAgICAgICAgMTAyCiAgICAgICAgTUVOVUlURU0gIkFzc29jaWVyYS4uLiIsICAgICAgICAgICAgICAgIDEwMwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJTa2FwYSBtYXBwLi4uIiwgICAgICAgIDExMQogICAgICAgIE1FTlVJVEVNICImU/ZrLi4uIiwgICAgICAgICAgICAgICAgICAxMDQKICAgICAgICBNRU5VSVRFTSAiJlbkbGogZmlsZXIuLi4iLCAgICAgICAgICAgIDExNgoJCU1FTlVJVEVNIFNFUEFSQVRPUgojaWZuZGVmIF9OT19FWFRFTlNJT05TCgkJTUVOVUlURU0gIiZBdnNsdXRhXHRBbHQrWCIgLCAJCQlJRF9GSUxFX0VYSVQKI2Vsc2UKCQlNRU5VSVRFTSAiJkF2c2x1dGEiLCAJCQkJSURfRklMRV9FWElUCiNlbmRpZgoJfQoKCVBPUFVQICImRGlzayIgIHsKICAgICAgICBNRU5VSVRFTSAiJktvcGllcmEgZGlzay4uLiIsICAgICAgICAgICAgICAgMjAxCiAgICAgICAgTUVOVUlURU0gIiZOYW1uZ2UgZGlzay4uLiIsICAgICAgICAgICAgICAyMDIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkZvcm1hdGVyYSBkaXNrLi4uIiwgICAgICAgICAgICAgSURfRk9STUFUX0RJU0sKI2lmZGVmIF9XSU45NQoJCU1FTlVJVEVNICImU2thcGEgc3lzdGVtZGlzay4uLiIsIC0xCS8qVE9ETyovCiNlbmRpZgoJCU1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJBbnNsdXQgJk7kdHZlcmtzZW5oZXQiLCAgICAgIElEX0NPTk5FQ1RfTkVUV09SS19EUklWRQogICAgICAgIE1FTlVJVEVNICImS29wcGxhIGlmcuVuIE7kdHZlcmtzZW5oZXQiLCAgIElEX0RJU0NPTk5FQ1RfTkVUV09SS19EUklWRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJEZWxhIHV0Li4uIiwgICAgICAgICAgICAgICAgIDI1NAogICAgICAgIE1FTlVJVEVNICImVGEgYm9ydCB1dGRlbG5pbmcuLi4iLCAgICAgICAgICAgIDI1NQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImVuRsaiBlbmhldC4uLiIsICAgICAgICAgICAgMjUxCgl9CgoJUE9QVVAgIiZUcuRkIiAgewogICAgICAgIE1FTlVJVEVNICImTuRzdGEgbml25Vx0KyIsICAgICAgICAgICAgICAzMDEKICAgICAgICBNRU5VSVRFTSAiVXT2a2EgJnRy5GRcdCoiLCAgICAgICAgICAgICAzMDIKICAgICAgICBNRU5VSVRFTSAiVXT2a2EgJmFsbGFcdEN0cmwrKiIsICAgICAgICAgMzAzCiAgICAgICAgTUVOVUlURU0gIktvbGxhcHNhICZ0cuRkXHQtIiwgICAgICAgICAgIDMwNAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImTWFya2VyYSB1bmRlcm1hcHBhciIsICAgICAgICAgICAgICAgIDUwNQoJfQoKCVBPUFVQICImVmlzYSIgIHsKICAgICAgICBNRU5VSVRFTSAiJlRy5GQgb2NoIG1hcHAiLCAgICAgICAgIDQxMwogICAgICAgIE1FTlVJVEVNICJCYXJhIHRyJuRkIiwgICAgICAgICAgICAgICAgICA0MTEKICAgICAgICBNRU5VSVRFTSAiQmFyYSAmbWFwcCIsICAgICAgICAgICAgIDQxMgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJEZSZsYSIsICAgICAgICAgICAgICAgICAgICAgIDQxNAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImTmFtbiIsICAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX05BTUUKCQlNRU5VSVRFTSAiJkFsbGEgRmlsZGV0YWxqZXIiICwJCQkJSURfVklFV19BTExfQVRUUklCVVRFUywgQ0hFQ0tFRAoJCU1FTlVJVEVNICImVmlzc2EgZGV0YWxqZXIuLi4iICwJCQlJRF9WSUVXX1NFTEVDVEVEX0FUVFJJQlVURVMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCU1FTlVJVEVNICImU29ydGVyYSBlZnRlciBuYW1uIiwgCUlEX1ZJRVdfU09SVF9OQU1FCglNRU5VSVRFTSAiU29ydGVyYSBlZnRlciB0JnlwIiwJCUlEX1ZJRVdfU09SVF9UWVBFCglNRU5VSVRFTSAiU29ydGVyYSBlZnRlciBzdCZvcmxlayIsCUlEX1ZJRVdfU09SVF9TSVpFCglNRU5VSVRFTSAiU29ydGVyYSBlZnRlciAmZGF0dW0iLAlJRF9WSUVXX1NPUlRfREFURQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJTb3J0ZXJhIGVmdGVyICYuLi4iLCAgICAgICAgICAgICAgICA0MDkKCX0KCglQT1BVUCAiJkluc3TkbGxuaW5nYXIiICB7CiAgICAgICAgTUVOVUlURU0gIiZCZWty5GZ0ZWxzZS4uLiIsICAgICAgICAgICAgLTEKICAgICAgICBNRU5VSVRFTSAiJlRlY2tlbnNuaXR0Li4uIiwgICAgICAgICAgICAgICAgICAgIElEX1NFTEVDVF9GT05UCiAgICAgICAgTUVOVUlURU0gIiZLb25maWd1cmVyYSB2ZXJrdHlnc2bkbHQuLi4iLCAgICAgICAtMQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImVmVya3R5Z3Nm5Gx0IiwgICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfVE9PTF9CQVIsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiJkVuaGV0c2bkbHQiLCAgICAgICAgICAgICAgICAgICBJRF9WSUVXX0RSSVZFX0JBUiwgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICJTdCZhdHVzZuRsdCIsICAgICAgICAgICAgICAgICBJRF9WSUVXX1NUQVRVU0JBUiwgQ0hFQ0tFRAojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIkYmdWxsc2vkcm1cdEN0cmwrU2hpZnQrUyIsICBJRF9WSUVXX0ZVTExTQ1JFRU4KI2VuZGlmCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZNaW5pbWVyYSB2aWQga/ZybmluZyIgLAkJLTEKICAgICAgICBNRU5VSVRFTSAiJlNwYXJhIORuZHJpbmdhciB2aWQgc3TkbmduaW5nIiwgNTExCgl9CgoKCVBPUFVQICImU+RrZXJoZXQiICB7CgkJTUVOVUlURU0gIibFdGtvbXN0Li4uIiAsCQk2MDUKCQlNRU5VSVRFTSAiJkxvZ2duaW5nLi4uIiAsCQkJNjA2CgkJTUVOVUlURU0gIibEZ2FyZS4uLiIgLAkJNjA3Cgl9CgoJUE9QVVAgIiZG9m5zdGVyIiAgewogICAgICAgIE1FTlVJVEVNICJOeXR0ICZm9m5zdGVyIiwgICAgICAgICAgICAgICAgIElEX1dJTkRPV19ORVcKICAgICAgICBNRU5VSVRFTSAi1nZlcmxhcHBhbmRlXHRDdHJsK0Y1IiwgICAgICAgICAgSURfV0lORE9XX0NBU0NBREUKICAgICAgICBNRU5VSVRFTSAiT3JkbmEgJmhvcml6b250ZWxsdCIsICAgICAgICAgIElEX1dJTkRPV19USUxFX0hPUloKICAgICAgICBNRU5VSVRFTSAiT3JkbmEgJnZlcnRpa2FsdFx0Q3RybCtGNCIsICAgSURfV0lORE9XX1RJTEVfVkVSVAojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIk9yZG5hIGF1dG9tYXRpc2t0IiwgICAgICAgSURfV0lORE9XX0FVVE9TT1JUCiNlbmRpZgogICAgICAgIE1FTlVJVEVNICJPcmRuYSAmc3ltYm9sZXIiLCAgICAgICAgICAgIElEX1dJTkRPV19BUlJBTkdFCiAgICAgICAgTUVOVUlURU0gIiZVcHBkYXRlcmFcdEY1IiwgICAgICAgICAgICAgICAgSURfUkVGUkVTSAoJfQoKCglQT1BVUCAiJj8iICB7CiAgICAgICAgTUVOVUlURU0gIiZIauRscGF2c25pdHRcdEYxIiwgICAgICAgICAgICBJRF9IRUxQCiAgICAgICAgTUVOVUlURU0gIkhq5GxwICZz9msuLi5cdEYxIiwgICAgICAgICBJRF9IRUxQCiAgICAgICAgTUVOVUlURU0gIiZBbnbkbmRhIGhq5GxwZW5cdEYxIiwgICAgICAgICAgICAgSURfSEVMUF9VU0lORwoJCU1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJJbmZvcm1hdGlvbiBvbSAmV2luZWZpbGUuLi4iLCAgICAgSURfQUJPVVQKCQlQT1BVUCAiSW5mby4uLiIgIHsKCQkgIE1FTlVJVEVNICJJbmZvIGFib3V0ICZXaW5lLi4uIiAsCQkJSURfQUJPVVRfV0lORQovKgkJICBNRU5VSVRFTSAiJkxpY2Vuc2UuLi4iCQlJRF9MSUNFTlNFCgkJICBNRU5VSVRFTSAiJk5PIFdBUlJBTlRZIgkJSURfTk9fV0FSUkFOVFkgKi8KCQl9Cgl9Cn0KCgpJRERfRVhFQ1VURSBESUFMT0cgRklYRUQgSU1QVVJFIDE1LCAxMywgMjEwLCA2MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJL9nIiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJQ09OVFJPTCAJCSIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKCUNPTlRST0wgCQkiJktvbW1hbmRvOiIgLCAtMSwgIlN0YXRpYyIsIFNTX0xFRlROT1dPUkRXUkFQfFdTX0dST1VQLCAzLCAxOCwgNjAsIDEwCglFRElUVEVYVAkJMjAxLCAzLCAyOSwgMTM0LCAxMiwgRVNfQVVUT0hTQ1JPTEwKCUNPTlRST0wgCQkiU29tICZzeW1ib2wiICwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgoJREVGUFVTSEJVVFRPTgkJIk9LIiAsIDEsIDE1OCwgNiwgNDcsIDE0CglQVVNIQlVUVE9OCQkiQXZicnl0IiAsIDIsIDE1OCwgMjMsIDQ3LCAxNAoJUFVTSEJVVFRPTgkJIiZIauRscCIgLCAyNTQsIDE1OCwgNDMsIDQ3LCAxNAp9CgpJRERfU0VMRUNUX0RFU1RJTkFUSU9OIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlbkbGogbeVsIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUNPTlRST0wgCQkiIiwgMTAxLCAiU3RhdGljIiwgU1NfU0lNUExFfFNTX05PUFJFRklYLCAzLCA2LCAxNjIsIDEwCglDT05UUk9MIAkJIiZT9mt25Gc6IiAsIC0xLCAiU3RhdGljIiwgU1NfTEVGVE5PV09SRFdSQVB8V1NfR1JPVVAsIDMsIDE4LCA2MCwgMTAKCUVESVRURVhUCQkyMDEsIDMsIDI5LCAxMzQsIDEyLCBFU19BVVRPSFNDUk9MTAoJREVGUFVTSEJVVFRPTgkJIk9LIiAsIDEsIDE1OCwgNiwgNDcsIDE0CglQVVNIQlVUVE9OCQkiQXZicnl0IiAsIDIsIDE1OCwgMjMsIDQ3LCAxNAoJUFVTSEJVVFRPTgkJIiZCbORkZHJhIiAsIDI1NCwgMTU4LCA0MywgNDcsIDE0Cn0KClNUUklOR1RBQkxFCnsKCUlEU19GT05UX1NFTF9ETEdfTkFNRQkiVmVya3N05GxsIHRlY2tlbnNuaXR0c2luc3TkbGxuaW5nYXIiCglJRFNfRk9OVF9TRUxfRVJST1IJIkV0dCBmZWwgdXBwc3RvZyBu5HIgZXR0IG55dHQgdGVja2Vuc25pdHQgdmFsZGVzLiIKfQoKU1RSSU5HVEFCTEUKewoJSURTX1dJTkVGSUxFCSJXaW5lZmlsZSIKCUlEU19FUlJPUgkJIkZlbCIKCUlEU19ST09UX0ZTCQkicm9vdCBmcyIKCUlEU19VTklYRlMJCSJ1bml4ZnMiCglJRFNfREVTS1RPUAkJIlNrcml2Ym9yZCIKCUlEU19TSEVMTAkJIlNrYWwiCglJRFNfVElUTEVGTVQJIiVzIC0gJXMiCglJRFNfTk9fSU1QTAkJIkVqIGltcGxlbWVudGVyYXQg5G5udSIKCUlEU19XSU5FCQkiV0lORSIKCUlEU19XSU5FX0ZJTEUJIldpbmUgRmlsZSIKfQoKU1RSSU5HVEFCTEUKewoJSURTX0NPTF9OQU1FCSJOYW1uIgoJSURTX0NPTF9TSVpFCSJTdG9ybGVrIgoJSURTX0NPTF9DREFURQkiQ0RhdHVtIgoJSURTX0NPTF9BREFURQkiQURhdHVtIgoJSURTX0NPTF9NREFURQkiTURhdHVtIgoJSURTX0NPTF9JRFgJCSJJbmRleC9Jbm9kZSIKCUlEU19DT0xfTElOS1MJIkzkbmthciIKCUlEU19DT0xfQVRUUgkiQXR0cmlidXQiCglJRFNfQ09MX1NFQwkJIlPka2VyaGV0Igp9Cg==