LyoKICogV2luZUZpbGUKICogSHVuZ2FyaWFuIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgTWFydGluIEZ1Y2hzCiAqIENvcHlyaWdodCAyMDAyIFN0ZXZlbiBFZHdhcmRzCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZAogKiBDb3B5cmlnaHQgMjAwMiBab2x5IE5hZ3kKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19IVU5HQVJJQU4sIFNVQkxBTkdfREVGQVVMVAoKLyogTWVudSAqLwoKSURNX1dJTkVGSUxFIE1FTlUgRklYRUQgSU1QVVJFCnsKCVBPUFVQICImRuFqbCIgIHsKCQlNRU5VSVRFTSAiJk1lZ3luaXThc1x0RW50ZXIiICwJCQkxMDEKCQlNRU5VSVRFTSAiwXQmaGVseWV66XMuLi5cdEY3IiAsIAkJCTEwNgoJCU1FTlVJVEVNICImTeFzb2zhcy4uLlx0RjgiICwJCQkxMDcKCQlNRU5VSVRFTSAiJlbhZ/NsYXBvbi4uLlx0RjkiICwJCTExOAoJCU1FTlVJVEVNICImVPZybOlzXHREZWwiICwJCQkxMDgKCQlNRU5VSVRFTSAiwXQmbmV2ZXrpcy4uLiIgLAkJCTEwOQoJCU1FTlVJVEVNICJUJnVsYWpkb25z4Wdvay4uLlx0QWx0K0VudGVyIiAsIElEX0VESVRfUFJPUEVSVElFUwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImQmVjc29tYWdvbOFzLi4uIiAsCQkxMTkKCQlNRU5VSVRFTSAiSyZpY3NvbWFnb2zhcy4uLiIgLAkJMTIwCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZGdXR0YXThcy4uLiIgLAkJCUlEX0VYRUNVVEUKCQlNRU5VSVRFTSAiJk55b210YXThcy4uLiIgLCAJCQkxMDIKCQlNRU5VSVRFTSAiVOFyc+104XMuLi4iICwJCTEwMwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICLaaiAmbWFwcGEuLi4iICwJCQkxMTEKCQlNRU5VSVRFTSAiS2VyZSZz6XMuLi4iICwJCQkxMDQKCQlNRU5VSVRFTSAiRuFqbG9rIGtpJnbhbGFzenThc2EuLi4iICwJCQkxMTYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwoJCU1FTlVJVEVNICImS2ls6XDpc1x0QWx0K1giICwgCQkJSURfRklMRV9FWElUCiNlbHNlCgkJTUVOVUlURU0gIiZLaWzpcOlzIiwgCQkJCUlEX0ZJTEVfRVhJVAojZW5kaWYKCX0KCglQT1BVUCAiJkxlbWV6IiAgewoJCU1FTlVJVEVNICJMZW1leiAmbeFzb2zhc2EuLi4iICwJCQkyMDEKCQlNRU5VSVRFTSAiJkxlbWV6Y2lta2UuLi4iICwJCQkyMDIKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkZvcm1hdOFs4XMuLi4iICwJCQkyMDMKI2lmZGVmIF9XSU45NQoJCU1FTlVJVEVNICImUmVuZHN6ZXJsZW1leiBr6XN67XTpc2UuLi4iLCAtMQkvKkBAICovCiNlbmRpZgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImSOFs83phdGkgbWVnaGFqdPMgY3NhdGxha296dGF04XNhIiAsCQkJMjUyCgkJTUVOVUlURU0gIkjhbPN6YXRpIG1lZ2hhanTzIGxlduFsYXN6dOFzYSIgLAkJMjUzCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIk1lZ29zenThcy4uLiIgLAkJCTI1NAoJCU1FTlVJVEVNICJNZWdvc3p04XMgJm1lZ3N6/G50ZXTpc2UuLi4iICwJCQkyNTUKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiTWVnaGFqdPMga2kmduFsYXN6dOFzYS4uLiIgLAkJCTI1MQoJfQoKCVBPUFVQICImTWFwcOFrIiAgewoJCU1FTlVJVEVNICImS/Z2ZXRrZXr1IHN6aW50XHQrIiAsCQkJMzAxCgkJTUVOVUlURU0gIiZGYSBraW55aXThc2FcdCoiICwJCTMwMgoJCU1FTlVJVEVNICImTWluZGVuIGtpbnlpdOFzYVx0U3RyZysqIiAsCQkzMDMKCQlNRU5VSVRFTSAiRmEgJmJlY3N1a+FzYVx0LSIgLAkJCTMwNAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImR3llcm1la2VrIGtpamVs9mzpc2UiICwJCQkJNTA1Cgl9CgoJUE9QVVAgIiZO6XpldCIgIHsKCQlNRU5VSVRFTSAiJlRlbGplcyIgLAkJCTQxMwoJCU1FTlVJVEVNICImS/ZueXZ04XJmYSIgLAkJCTQxMQoJCU1FTlVJVEVNICImQ3NhayBtYXBw4WsiICwJCQk0MTIKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkZlbG9zenThcyIgLAkJCTQxNAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImTul2IiAsCQkJSURfVklFV19OQU1FCgkJTUVOVUlURU0gIiZNaW5kZW4gculzemxldCIgLAkJCQlJRF9WSUVXX0FMTF9BVFRSSUJVVEVTLCBDSEVDS0VECgkJTUVOVUlURU0gIiZFZ3llZGkuLi4iICwJCQlJRF9WSUVXX1NFTEVDVEVEX0FUVFJJQlVURVMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJlJlbmRleulzIG7pdiBzemVyaW50IiAsCQk0MDQKCQlNRU5VSVRFTSAiUmVuZGV66XMgayZpdGVyamVzenTpcyBzemVyaW50IiAsCQk0MDUKCQlNRU5VSVRFTSAiUmVuZGV66XMgJm3pcmV0IHN6ZXJpbnQiICwgCQk0MDYKCQlNRU5VSVRFTSAiUmVuZGV66XMgJmThdHVtIHN6ZXJpbnQiICwgCQk0MDcKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiRWd5ZWRpIHJlbmRleulzICYuLi4iICwJCQk0MDkKCX0KCglQT1BVUCAiJkJl4Wxs7XThc29rIiAgewoJCU1FTlVJVEVNICImTWVnZXL1c+106XMuLi4iICwJCS0xCgkJTUVOVUlURU0gIiZCZXT7a+lzemxldC4uLiIgLAkJCS0xCgkJTUVOVUlURU0gIkUmZ3llZGkgZXN6a/Z6dOFyLi4uIiAsIC0xCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZFc3pr9np04XIiICwJCUlEX1ZJRVdfVE9PTF9CQVIsIENIRUNLRUQKCQlNRU5VSVRFTSAiJkxlbWV6dOFyIiAsCQlJRF9WSUVXX0RSSVZFX0JBUiwgQ0hFQ0tFRAoJCU1FTlVJVEVNICImwWxsYXBvdHNvciIgLAlJRF9WSUVXX1NUQVRVU0JBUiwgQ0hFQ0tFRAojaWZuZGVmIF9OT19FWFRFTlNJT05TCgkJTUVOVUlURU0gIiZUZWxqZXMga+lwZXJuefVzXHRDdHJsK1NoaWZ0K1MiICwgCUlEX1ZJRVdfRlVMTFNDUkVFTgojZW5kaWYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiUHJvZ3JhbWZ1dHRhdOFzIHV04W5pICZzemltYvNsdW0iICwJCS0xCgkJTUVOVUlURU0gIk1lZ3N6/G50ZXTpcyBhIHThcm9s4XMgduln6W4iICwJCQk1MTEKCX0KCgoJUE9QVVAgIiZCaXp0b25z4WciICB7CgkJTUVOVUlURU0gIiZIb3p64WbpculzLi4uIiAsCQk2MDUKCQlNRU5VSVRFTSAiJk5hcGzzeuFzLi4uIiAsCQkJNjA2CgkJTUVOVUlURU0gIiZUdWxhamRvbm9zLi4uIiAsCQk2MDcKCX0KCglQT1BVUCAiJkFibGFrb2siICB7CgkJTUVOVUlURU0gItpqIGEmYmxhayIgLAkJCUlEX1dJTkRPV19ORVcKCQlNRU5VSVRFTSAiTOlwY3P1emV0ZXMgZWxyZW5kZXrpc1x0Q3RybCtGNSIgLAkJSURfV0lORE9XX0NBU0NBREUKCQlNRU5VSVRFTSAiTW96YWlrc3plcvsgZWxyZW5kZXrpcyAmdu16c3ppbnRlc2VuIiAsCQlJRF9XSU5ET1dfVElMRV9IT1JaCgkJTUVOVUlURU0gIk1vemFpa3N6ZXL7IGVscmVuZGV66XMgZvwmZ2f1bGVnZXNlblx0Q3RybCtGNCIgLAkJSURfV0lORE9XX1RJTEVfVkVSVAojaWZuZGVmIF9OT19FWFRFTlNJT05TCgkJTUVOVUlURU0gIkF1dG9tYXRpa3VzIGVscmVuZGV66XMiICwJCUlEX1dJTkRPV19BVVRPU09SVAojZW5kaWYKCQlNRU5VSVRFTSAiJlN6aW1i82x1bSBlbHJlbmRleulzIiAsCQlJRF9XSU5ET1dfQVJSQU5HRQoJCU1FTlVJVEVNICImRnJpc3PtdOlzXHRGNSIgLAkJSURfUkVGUkVTSAoJfQoKCVBPUFVQICImPyIgIHsKCQlNRU5VSVRFTSAiJlP6Z/MgdOltYWv2cvZrXHRGMSIgLAkJCUlEX0hFTFAKCQlNRU5VSVRFTSAiU/pn8yAma2VyZXPpcy4uLlx0RjEiICwJCQlJRF9IRUxQCgkJTUVOVUlURU0gIiZIYXN6buFsYXRcdEYxIiAsCQkJSURfSEVMUF9VU0lORwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCVBPUFVQICJJbmZvcm3hY2nzLi4uIiAgewoJCSAgTUVOVUlURU0gIiZXaW5lLXLzbC4uLiIgLAkJCUlEX0FCT1VUX1dJTkUKLyoKICoJCSAgTUVOVUlURU0gIiZMaWNlbnNlLi4uIgkJSURfTElDRU5TRQogKgkJICBNRU5VSVRFTSAiJk5PIFdBUlJBTlRZIgkJSURfTk9fV0FSUkFOVFkKICovCgkJfQoJfQp9CgoKSUREX0VYRUNVVEUgRElBTE9HIEZJWEVEIElNUFVSRSAxNSwgMTMsIDIxMCwgNjMKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiRnV0dGF04XMiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJQ09OVFJPTCAJCSIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKCUNPTlRST0wgCQkiJlBhcmFuY3M6IiAsIC0xLCAiU3RhdGljIiwgU1NfTEVGVE5PV09SRFdSQVB8V1NfR1JPVVAsIDMsIDE4LCA2MCwgMTAKCUVESVRURVhUCQkyMDEsIDMsIDI5LCAxMzQsIDEyLCBFU19BVVRPSFNDUk9MTAoJQ09OVFJPTCAJCSImU3ppbWLzbHVta+ludCIgLCAyMTQsICJCdXR0b24iLCBCU19BVVRPQ0hFQ0tCT1h8V1NfVEFCU1RPUCwzLCA0NSwgNzEsIDEyCglERUZQVVNIQlVUVE9OCSJPSyIgLCAxLCAxNTgsIDYsIDQ3LCAxNAoJUFVTSEJVVFRPTgkJIk3pZ3NlIiAsIDIsIDE1OCwgMjMsIDQ3LCAxNAoJUFVTSEJVVFRPTgkJIiZT+mfzIiAsIDI1NCwgMTU4LCA0MywgNDcsIDE0Cn0K