LyoKICogV2luZUZpbGUKICogSXRhbGlhbiBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAwIE1hcnRpbiBGdWNocwogKiBDb3B5cmlnaHQgMjAwMiBTdGV2ZW4gRWR3YXJkcwogKiBDb3B5cmlnaHQgMjAwMiBBbGV4YW5kcmUgSnVsbGlhcmQKICogQ29weXJpZ2h0IDIwMDQgSXZhbiBMZW8gTXVycmF5LVNtaXRoCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfSVRBTElBTiwgU1VCTEFOR19ORVVUUkFMCgovKiBNZW51ICovCgpJRE1fV0lORUZJTEUgTUVOVSBGSVhFRCBJTVBVUkUKewoJUE9QVVAgIiZGaWxlIiAgewoJCU1FTlVJVEVNICImQXByaVx0SW52aW8iICwJCQkxMDEKCQlNRU5VSVRFTSAiJlNwb3N0YS4uLlx0RjciICwgCQkJMTA2CgkJTUVOVUlURU0gIiZDb3BpYS4uLlx0RjgiICwJCQkxMDcKCQlNRU5VSVRFTSAiJk5lZ2xpIEFwcHVudGkuLi5cdEY5IiAsCQkxMTgKCQlNRU5VSVRFTSAiJkNhbmNlbGxhXHREZWwiICwJCQkxMDgKCQlNRU5VSVRFTSAiUmkmbm9taW5hLi4uIiAsCQkJMTA5CgkJTUVOVUlURU0gIlByb3ByaSZldOAuLi5cdEFsdCtJbnZpbyIgLCBJRF9FRElUX1BST1BFUlRJRVMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiQyZvbXByaW1pLi4uIiAsCQkxMTkKCQlNRU5VSVRFTSAiRGVjJm9tcHJpbWkuLi4iICwJCTEyMAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImRXNlZ3VpLi4uIiAsCQkJSURfRVhFQ1VURQoJCU1FTlVJVEVNICImU3RhbXBhLi4uIiAsIAkJCTEwMgoJCU1FTlVJVEVNICJBc3NvY2lhLi4uIiAsCQkxMDMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiQ3ImZWEgRGlyZWN0b3J5Li4uIiAsCQkJMTExCgkJTUVOVUlURU0gIkNlcmMmYS4uLiIgLAkJCTEwNAoJCU1FTlVJVEVNICImU2VsZXppb25hIGkgZmlsZS4uLiIgLAkJCTExNgoJCU1FTlVJVEVNIFNFUEFSQVRPUgojaWZuZGVmIF9OT19FWFRFTlNJT05TCgkJTUVOVUlURU0gIkUmc2NpXHRBbHQrWCIgLCAJCQlJRF9GSUxFX0VYSVQKI2Vsc2UKCQlNRU5VSVRFTSAiRSZzY2kiLCAJCQkJSURfRklMRV9FWElUCiNlbmRpZgoJfQoKCVBPUFVQICImRGlzY28iICB7CgkJTUVOVUlURU0gIiZDb3BpYSBEaXNjby4uLiIgLAkJCTIwMQoJCU1FTlVJVEVNICImRXRpY2hldHRhIERpc2NvLi4uIiAsCQkJMjAyCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZGb3JtYXR0YSBEaXNjby4uLiIgLAkJCTIwMwojaWZkZWYgX1dJTjk1CgkJTUVOVUlURU0gIiZDcmVhIERpc2NvIGRpIFNpc3RlbWEuLi4iLCAtMQkvKkBAICovCiNlbmRpZgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJDb25uZXR0aSAmIERyaXZlIGRpIFJldGUiICwJCQkyNTIKCQlNRU5VSVRFTSAiJkRpc2Nvbm5ldHRpIERyaXZlIGRpIFJldGUiICwJCTI1MwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJDb25kaXZpZGkgY29tZS4uLiIgLAkJCTI1NAoJCU1FTlVJVEVNICImUmltdW92aSBjb25kaXZpc2lvbmUuLi4iICwJCQkyNTUKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJlNlbGV6aW9uYSBEcml2ZS4uLiIgLAkJCTI1MQoJfQoKCVBPUFVQICImRGlyZWN0b3J5IiAgewoJCU1FTlVJVEVNICImTGl2ZWxsbyBTdWNlc3Npdm9cdCsiICwJCQkzMDEKCQlNRU5VSVRFTSAiRXNwYW5kaSAmQWxiZXJvXHQqIiAsCQkzMDIKCQlNRU5VSVRFTSAiRXNwYW5kaSAmdHV0dG9cdFN0cmcrKiIgLAkJMzAzCgkJTUVOVUlURU0gIlJpZHVjaSAmQWxiZXJvXHQtIiAsCQkJMzA0CgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZTZWxlemlvbmEgdW5pdOAiICwJCQkJNTA1Cgl9CgoJUE9QVVAgIiZWaXN1YWxpenphIiAgewoJCU1FTlVJVEVNICJBJmxiZXJvIGUgRGlyZWN0b3J5IiAsCQkJNDEzCgkJTUVOVUlURU0gIlNvJmxvIEFsYmVybyIgLAkJCTQxMQoJCU1FTlVJVEVNICImU29sbyBEaXJlY3RvcnkiICwJCQk0MTIKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiRGkmdmlkaSIgLAkJCTQxNAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImTm9tZSIgLAkJCUlEX1ZJRVdfTkFNRQoJCU1FTlVJVEVNICImTW9zdHJhIHR1dHRpIGkgZGV0dGFnbGkgc3VpIGZpbGUiICwJCQkJSURfVklFV19BTExfQVRUUklCVVRFUywgQ0hFQ0tFRAoJCU1FTlVJVEVNICImTW9zdHJhIGRldHRhZ2xpIHBhcnppYWxpLi4uIiAsCQkJSURfVklFV19TRUxFQ1RFRF9BVFRSSUJVVEVTCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIiZPcmRpbmEgcGVyIE5vbWUiICwJCTQwNAoJCU1FTlVJVEVNICImT3JkaW5hIHBlciBUaXBvIiAsCQk0MDUKCQlNRU5VSVRFTSAiJk9yZGluYSBwZXIgRGltZW5zaW9uZSIgLCAJCTQwNgoJCU1FTlVJVEVNICImT3JkaW5hIHBlciBEYXRhIiAsIAkJNDA3CgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIk9yZGluYSBwZXIgJi4uLiIgLAkJCTQwOQoJfQoKCVBPUFVQICImT3B6aW9uaSIgIHsKCQlNRU5VSVRFTSAiJkNvbmZlcm1hemlvbmUuLi4iICwJCS0xCgkJTUVOVUlURU0gIiZGb250Li4uIiAsCQkJLTEKCQlNRU5VSVRFTSAiJlBlcnNvbmFsaXp6YSBiYXJyYSBkZWdsaSBzdHJ1bWVudGkuLi4iICwgLTEKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkJhcnJhIGRlZ2xpIHN0cnVtZW50aSIgLAkJSURfVklFV19UT09MX0JBUiwgQ0hFQ0tFRAoJCU1FTlVJVEVNICImQmFycmEgZGVpIERyaXZlIiAsCQlJRF9WSUVXX0RSSVZFX0JBUiwgQ0hFQ0tFRAoJCU1FTlVJVEVNICImQmFycmEgZGkgc3RhdG8iICwJSURfVklFV19TVEFUVVNCQVIsIENIRUNLRUQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwoJCU1FTlVJVEVNICJBJiB0dXR0byBzY2hlcm1vXHRDdHJsK1NoaWZ0K1MiICwgCUlEX1ZJRVdfRlVMTFNDUkVFTgojZW5kaWYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJkVzZWd1aSBtaW5pbWl6emF0byIgLAkJLTEKCQlNRU5VSVRFTSAiJlNhbHZhIGltcG9zdGF6aW9uaSBhbGwndXNjaXRhIiAsCQkJNTExCgl9CgoKCVBPUFVQICImU2ljdXJlenphIiAgewoJCU1FTlVJVEVNICImQWNjZXNzaS4uLiIgLAkJNjA1CgkJTUVOVUlURU0gIiZMb2dnaW5nLi4uIiAsCQkJNjA2CgkJTUVOVUlURU0gIiZQcm9wcmlldGFyaW8uLi4iICwJCTYwNwoJfQoKCVBPUFVQICImRmluZXN0cmEiICB7CgkJTUVOVUlURU0gIk51b3ZhICZGaW5lc3RyYSIgLAkJCUlEX1dJTkRPV19ORVcKCQlNRU5VSVRFTSAiRmluZXN0cmUgYSBjYXNjYXRhXHRDdHJsK0Y1IiAsCQlJRF9XSU5ET1dfQ0FTQ0FERQoJCU1FTlVJVEVNICJPcmRpbmEgJk9yaXpvbnRhbG1lbnRlIiAsCQlJRF9XSU5ET1dfVElMRV9IT1JaCgkJTUVOVUlURU0gIk9yZGluYSAmVmVydGljbG1lbnRlXHRDdHJsK0Y0IiAsCQlJRF9XSU5ET1dfVElMRV9WRVJUCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKCQlNRU5VSVRFTSAiRGlzcG9uaSBhdXRvbWF0aWNhbWVudGUiICwJCUlEX1dJTkRPV19BVVRPU09SVAojZW5kaWYKCQlNRU5VSVRFTSAiRGlzcG9uaSAmU2ltYm9saSIgLAkJSURfV0lORE9XX0FSUkFOR0UKCQlNRU5VSVRFTSAiJkFnZ2lvcm5hXHRGNSIgLAkJSURfUkVGUkVTSAoJfQoKCVBPUFVQICImR3VpZGEiICB7CgkJTUVOVUlURU0gIiZTb21tYXJpbyBkZWxsYSBHdWlkYVx0RjEiICwJCQlJRF9IRUxQCgkJTUVOVUlURU0gIiZDZXJjYSBuZWxsYSBHdWlkYS4uLlx0RjEiICwJCQlJRF9IRUxQCgkJTUVOVUlURU0gIiZVc28gZGVsbCBHdWlkYVx0RjEiICwJCQlJRF9IRUxQX1VTSU5HCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJUE9QVVAgIkluZm8uLi4iICB7CgkJICBNRU5VSVRFTSAiSW5mb3JtYXppb25pIHN1ICZXaW5lLi4uIiAsCQkJSURfQUJPVVRfV0lORQovKgogKgkJICBNRU5VSVRFTSAiJkxpY2VuemEuLi4iCQlJRF9MSUNFTlNFCiAqCQkgIE1FTlVJVEVNICImR2FyYW56aWEiCQlJRF9OT19XQVJSQU5UWQogKi8KCQl9Cgl9Cn0KCgpJRERfRVhFQ1VURSBESUFMT0cgRklYRUQgSU1QVVJFIDE1LCAxMywgMjEwLCA2MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJFc2VndWkiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJQ09OVFJPTCAJCSIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKCUNPTlRST0wgCQkiJkNvbWFuZG86IiAsIC0xLCAiU3RhdGljIiwgU1NfTEVGVE5PV09SRFdSQVB8V1NfR1JPVVAsIDMsIDE4LCA2MCwgMTAKCUVESVRURVhUCQkyMDEsIDMsIDI5LCAxMzQsIDEyLCBFU19BVVRPSFNDUk9MTAoJQ09OVFJPTCAJCSJDb21lICZTaW1ib2xvIiAsIDIxNCwgIkJ1dHRvbiIsIEJTX0FVVE9DSEVDS0JPWHxXU19UQUJTVE9QLDMsIDQ1LCA3MSwgMTIKCURFRlBVU0hCVVRUT04JIk9LIiAsIDEsIDE1OCwgNiwgNDcsIDE0CglQVVNIQlVUVE9OCQkiQW5udWxsYSIgLCAyLCAxNTgsIDIzLCA0NywgMTQKCVBVU0hCVVRUT04JCSImQWl1dG8iICwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQo=