LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDIgUm9iZXJ0IERpY2tlbnNvbgogKiBDb3B5cmlnaHQgMjAwMy0yMDA0IEl2YW4gTGVvIE11cnJheS1TbWl0aAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0lUQUxJQU4sIFNVQkxBTkdfREVGQVVMVAoKLyoKICogTWVudQogKi8KCklEQ19SRUdFRElUIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFBPUFVQICImRmlsZSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIkUmc2NpIiwgICAgICAgICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX0VYSVQKICAgIEVORAogICAgUE9QVVAgIiZBaXV0byIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZJbmZvcm1hemlvbmkgc3VsbCdlZGl0b3IgZGVsIFJlZ2lzdHJvIiwgICAgICAgICAgICAgICAgICBJRF9IRUxQX0FCT1VUCiAgICBFTkQKRU5ECgpJRFJfUkVHRURJVF9NRU5VIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFBPUFVQICImUmVnaXN0cm8iCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImSW1wb3J0YS4uLiIsICAgIElEX1JFR0lTVFJZX0lNUE9SVFJFR0lTVFJZRklMRQoKICAgICAgICBNRU5VSVRFTSAiJkVzcG9ydGEuLi4iLCAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZDb25uZXR0aSBhIFJlZ2lzdHJvIGluIHJldGUuLi4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZCiAgICAgICAgLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiJkRpc2Nvbm50dGkgZGEgUmVnaXN0cm8gZGkgcmV0ZS4uLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX0RJU0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImU3RhbXBhXHRDdHJsK1AiLCAgICAgICAgICAgICAgSURfUkVHSVNUUllfUFJJTlQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJFJnNjaSIsICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImTW9kaWZpY2EiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImTW9kaWZpY2EiLCAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTU9ESUZZCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgUE9QVVAgIiZOdW92byIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiQ2hpYXZlIiwgICAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19LRVkKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICImVmFsb3JlIHN0cmluZ2EiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICImVmFsb3JlIGJpbmFyaW8iLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICImVmFsb3JlIERXT1JEIiwgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRQogICAgICAgIEVORAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImRWxpbWluYVx0RGVsIiwgICAgICAgICAgICAgICAgSURfRURJVF9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiJlJpbm9taW5hIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX1JFTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQ29waWEgbm9tZSBjaGlhdmUiLCAgICAgICAgICAgICAgSURfRURJVF9DT1BZS0VZTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImVHJvdmFcdEN0cmwrRiIsICAgICAgICAgICAgICAgSURfRURJVF9GSU5ELCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiJlRyb3ZhIFN1Y2Nlc3Npdm9cdEYzIiwgICAgICAgICAgICAgIElEX0VESVRfRklORE5FWFQsIEdSQVlFRAogICAgRU5ECiAgICBQT1BVUCAiJlZpc3VhbGl6emEiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICJCYXJyYSBkaSAmU3RhdG8iLCAgICAgICAgICAgICAgICAgSURfVklFV19TVEFUVVNCQVIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiRGkmdmlkaSIsICAgICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1BMSVQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkFnZ2lvcm5hXHRGNSIsICAgICAgICAgICAgICAgIElEX1ZJRVdfUkVGUkVTSAogICAgRU5ECiAgICBQT1BVUCAiJlByZWZlcml0aSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZBZ2dpdW5naSBhaSBQcmVmZXJpdGkiLCAgICAgICAgICBJRF9GQVZPVVJJVEVTX0FERFRPRkFWT1VSSVRFUwogICAgICAgICwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gIiZSaW11b3ZpIGRhaSBQcmVmZXJpdGkiLCAgICAgICAgICAgSURfRkFWT1VSSVRFU19SRU1PVkVGQVZPVVJJVEUKICAgICAgICAsIEdSQVlFRAogICAgRU5ECiAgICBQT1BVUCAiJkFpdXRvIgogICAgQkVHSU4KLyoKICogICAgICAgIE1FTlVJVEVNICImU29tbWFyaW8gZGVsbGEgR3VpZGEiLCAgICAgICAgICAgICAgICBJRF9IRUxQX0hFTFBUT1BJQ1MKICogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogKi8KICAgICAgICBNRU5VSVRFTSAiJkluZm9ybWF6aW9uaSBzdWxsJ2VkaXRvciBkZWwgUmVnaXN0cm8iLCAgICAgIElEX0hFTFBfQUJPVVQKICAgIEVORApFTkQKCgovKgogKiBEaWFsb2cKICovCgpJRERfQUJPVVRCT1ggRElBTE9HIERJU0NBUkRBQkxFICAyMiwgMTcsIDIzMCwgNzUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkluZm9ybWF6aW9uaSBzdWxsJ2VkaXRvciBkZWwgUmVnaXN0cm8iCkZPTlQgOCwgIlN5c3RlbSIKQkVHSU4KICAgIElDT04gICAgICAgICAgICBJRElfUkVHRURJVCxJRElfUkVHRURJVCwxNCw5LDE2LDE2CiAgICBMVEVYVCAgICAgICAgICAgIlJlYWN0T1MgRWRpdG9yIGRlbCBSZWdpc3RybyBWZXJzaW9uZSAxLjAiLElEQ19TVEFUSUMsNDksMTAsMTE5LDgsCiAgICAgICAgICAgICAgICAgICAgU1NfTk9QUkVGSVgKICAgIExURVhUICAgICAgICAgICAiQ29weXJpZ2h0IChDKSAyMDAyIFJlYWN0T1MgVGVhbSIsSURDX1NUQVRJQyw0OSwyMCwxMTksOAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxOTUsNiwzMCwxMSxXU19HUk9VUApFTkQKCklERF9FRElUX1NUUklORyBESUFMT0cgRElTQ0FSREFCTEUgIDIyLCAxNywgMjEwLCA3NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiRWRpdGEgU3RyaW5nYSIKRk9OVCA4LCAiU3lzdGVtIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICJOb21lIGRlbCB2YWxvcmU6IixJRENfU1RBVElDLDUsNSwxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9OQU1FLDUsMTUsMjAwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgV1NfRElTQUJMRUQKICAgIExURVhUICAgICAgICAgICAiRGF0YSBkZWwgdmFsb3JlOiIsSURDX1NUQVRJQyw1LDMwLDExOSw4CiAgICBFRElUVEVYVCAgICAgICAgSURDX1ZBTFVFX0RBVEEsNSw0MCwyMDAsMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTQwLDYwLDMwLDExLFdTX0dST1VQCiAgICBERUZQVVNIQlVUVE9OICAgIkFubnVsbGEiLElEQ0FOQ0VMLDE3NSw2MCwzMCwxMSxXU19HUk9VUApFTkQKCklERF9FRElUX0RXT1JEIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMTAsIDEwMApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiRWRpdGEgU3RyaW5nYSIKRk9OVCA4LCAiU3lzdGVtIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICJOb21lIGRlbCB2YWxvcmU6IixJRENfU1RBVElDLDUsNSwxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9OQU1FLDUsMTUsMjAwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgV1NfRElTQUJMRUQKICAgIExURVhUICAgICAgICAgICAiRGF0ZSBkZWwgdmFsb3JlOiIsSURDX1NUQVRJQyw1LDMwLDkwLDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfREFUQSw1LDQwLDkwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCiAgICBHUk9VUEJPWCAgICAgICAgIkJhc2UiLCBJRENfRFdPUkRfQkFTRSwgMTIwLCAzMCwgODUsIDM3LCBCU19HUk9VUEJPWAogICAgQVVUT1JBRElPQlVUVE9OICJFc2FkZWNpbWFsZSIsIElEQ19EV09SRF9IRVgsIDEzMCwgNDAsIDYwLCAxMCwgV1NfVEFCU1RPUAogICAgQVVUT1JBRElPQlVUVE9OICJEZWNpbWFsZSIsIElEQ19EV09SRF9ERUMsIDEzMCwgNTIsIDYwLCAxMCwgV1NfVEFCU1RPUAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxNDAsODAsMzAsMTEsV1NfR1JPVVAKICAgIERFRlBVU0hCVVRUT04gICAiQW5udWxsYSIsSURDQU5DRUwsMTc1LDgwLDMwLDExLFdTX0dST1VQCkVORAoKLyoKICogU3RyaW5nIFRhYmxlCiAqLwoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19MSVNUX0NPTFVNTl9OQU1FICAgICJOb21lIgogICAgSURTX0xJU1RfQ09MVU1OX1RZUEUgICAgIlRpcG8iCiAgICBJRFNfTElTVF9DT0xVTU5fREFUQSAgICAiRGF0aSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0FQUF9USVRMRSAgICAgICAgICAgIkVkaXRvciBkZWwgUmVnaXN0cm8iCiAgICBJRENfUkVHRURJVCAgICAgICAgICAgICAiUkVHRURJVCIKICAgIElEQ19SRUdFRElUX0ZSQU1FICAgICAgICJSRUdFRElUX0ZSQU1FIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9NRU5VICAgICAgICAiQ29udGllbmUgaSBjb21hbmRpIHBlciBsYXZvcmFyZSBzdSB0dXR0byBpbCBSZWdpc3RybyIKICAgIElEX0VESVRfTUVOVSAgICAgICAgICAgICJDb250aWVuZSBpIGNvbWFuZGkgcGVyIGVkaXRhcmUgdmFsb3JpIG8gY2hpYXZpIgogICAgSURfVklFV19NRU5VICAgICAgICAgICAgIkNvbnRpZW5lIGkgY29tYW5kaSBwZXIgcGVyc29uYWxpenphcmUgbGEgZmluZXN0cmEgZGVsIFJlZ2lzdHJvIgogICAgSURfRkFWT1VSSVRFU19NRU5VICAgICAgIkNvbnRpZW5lIGkgY29tYW5kaSBwZXIgYWNjZWRlcmUgYWxsZSBjaGlhdmkgdXNhdGUgZnJlcXVlbnRlbWVudGUiCiAgICBJRF9IRUxQX01FTlUgICAgICAgICAgICAiQ29udGllbmUgaSBjb21hbmRpIHBlciB2aXN1YWxpenphcmUgbGEgR3VpZGEgZSBpbmZvcm1hemlvbmkgc3VsbCdlZGl0b3IgZGVsIFJlZ2lzdHJvIgogICAgSURfRURJVF9ORVdfTUVOVSAgICAgICAgIkNvbnRpZW5lIGkgY29tYW5kaSBwZXIgY3JlYXJlIG51b3ZlIGNoaWF2aSBvIHZhbG9yaSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfRURJVF9NT0RJRlkgICAgICAgICAgIk1vZGlmaWNhIGkgZGF0aSBkZWwgdmFsb3JlIgogICAgSURfRURJVF9ORVdfS0VZICAgICAgICAgIkFnZ2l1bmdlIHVuYSBudW92YSBjaGlhdmUiCiAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRSAiQWdnaXVuZ2UgdW4gbnVvdm8gdmFsb3JlIHN0cmluZ2EiCiAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRSAiQWdnaXVuZ2UgdW4gbnVvdm8gdmFsb3JlIGJpbmFyaW8iCiAgICBJRF9FRElUX05FV19EV09SRFZBTFVFICAiQWdnaXVuZ2UgdW4gbnVvdm8gdmFsb3JlIGEgZG9wcGlhIHBhcm9sYSIKICAgIElEX1JFR0lTVFJZX0lNUE9SVFJFR0lTVFJZRklMRSAiSW1wb3J0YSB1biBmaWxlIGRpIHRlc3RvIG5lbCBSZWdpc3RybyIKICAgIElEX1JFR0lTVFJZX0VYUE9SVFJFR0lTVFJZRklMRQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVzcG9ydGEgdHV0dG8gbyBwYXJ0ZSBkZWwgUmVnaXN0cm8gaW4gdW4gZmlsZSBkaSB0ZXN0byIKICAgIElEX1JFR0lTVFJZX0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaSBjb25uZXR0ZSBhbCBSZWdpc3RybyBkaSB1biBjb21wdXRlciByZW1vdG8iCiAgICBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2kgZGlzY29ubmV0dGUgZGFsIFJlZ2lzdHJvIGRpIHVuIGNvbXB1dGVyIHJlbW90byIKICAgIElEX1JFR0lTVFJZX1BSSU5UICAgICAgICJTdGFtcGEgdHV0dG8gbyBwYXJ0ZSBkZWwgUmVnaXN0cm8iCi8qICAgIElEX0hFTFBfSEVMUFRPUElDUyAgICAgICJBcHJlIGwnYWl1dG8gZGVsbCdFZGl0b3IgZGVsIFJlZ2lzdHJvIiAqLwogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIlZpc3VhbGl6emEgaW5mb3JtYXppb25pIHN1bCBwcm9ncmFtbWEsIG51bWVybyBkaSB2ZXJzaW9uZSBlIGNvcHlyaWdodCIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURfUkVHSVNUUllfRVhJVCAgICAgICAgIkVzY2UgZGFsbCdlZGl0b3IgZGVsIFJlZ2lzdHJvIgogICAgSURfRkFWT1VSSVRFU19BRERUT0ZBVk9VUklURVMgIkFnZ2l1bmdlIHVuYSBjaGlhdmUgYWxsYSBsaXN0YSBkZWkgUHJlZmVyaXRpIgogICAgSURfRkFWT1VSSVRFU19SRU1PVkVGQVZPVVJJVEUgIlJpbXVvdmUgdW5hIG8gcGn5IGNoaWF2aSBkYWxsYSBsaXN0YSBkZWkgcHJlZmVyaXRpIgogICAgSURfVklFV19TVEFUVVNCQVIgICAgICAgIk1vc3RyYSBvIG5hc2NvbmRlIGxhIGJhcnJhIGRpIHN0YXRvIgogICAgSURfVklFV19TUExJVCAgICAgICAgICAgIkNhbWJpYSBsYSBwb3NpemlvbmUgZGVsIHNlcGFyYXRvcmUgdHJhIGR1ZSBwYW5uZWxsaSIKICAgIElEX1ZJRVdfUkVGUkVTSCAgICAgICAgICJBZ2dpb3JuYSBsYSBmaW5lc3RyYSIKICAgIElEX0VESVRfREVMRVRFICAgICAgICAgICJFbGltaW5hIGxhIHNlbGV6aW9uZSIKICAgIElEX0VESVRfUkVOQU1FICAgICAgICAgICJSaW5vbWluYSBsYSBzZWxlemlvbmUiCiAgICBJRF9FRElUX0NPUFlLRVlOQU1FICAgICAiQ29waWEgaWwgbm9tZSBkZWxsYSBjaGlhdmUgc2VsZXppb25hdGEgbmVnbGkgYXBwdW50aSIKICAgIElEX0VESVRfRklORCAgICAgICAgICAgICJUcm92YSB1bmEgc3RyaW5nYSBkaSB0ZXN0byBpbiB1bmEgY2hpYXZlLCB1biB2YWxvcmUgbyBpbiBkZWkgZGF0aSIKICAgIElEX0VESVRfRklORE5FWFQgICAgICAgICJUcm92YSBsYSB2b2x0YSBzdWNjZXNzaXZhIGlsIHRlc3RvIHNwZWNpZmljYXRvIG5lbGxhIHJpY2VyY2EgcHJlY2VkZW50ZSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0VSUk9SCQkgICAgIkVycm9yZSIKICAgIElEU19CQURfVkFMVUUgICAgICAgICAgICJJbXBvc3NpYmlsZSBpbnRlcnJvZ2FyZSBpbCB2YWxvcmUgJyVzJyIKICAgIElEU19VTlNVUFBPUlRFRF9UWVBFICAgICJJbXBvc3NpYmlsZSBlZGl0YXJlIHZhbG9yaSBkaSBxdWVzdG8gdGlwbyAoJWxkKSIKICAgIElEU19UT09fQklHX1ZBTFVFICAgICAgICJWYWxvcmUgdHJvcHBvIGdyYW5kZSAoJWxkKSIKICAgIElEU19ERUxFVEVfQk9YX1RJVExFICAgICJDb25mZXJtYXJlIENhbmNlbGxhemlvbmUgZGVsIFZhbG9yZSIKICAgIElEU19ERUxFVEVfQk9YX1RFWFQgICAgICJTZWkgc2ljdXJvIGRpIHZvbGVyIGNhbmNlbGxhcmUgaWwgdmFsb3JlICclcyc/IgogICAgSURTX05FV0tFWSAgICAgICAgICAgICAgIk51b3ZhIENoaWF2ZSAjJWQiCiAgICBJRFNfTkVXVkFMVUUgICAgICAgICAgICAiTnVvdm8gVmFsb3JlICMlZCIKCkVORAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qCiAqIERpYWxvZwogKi8KCklERF9ESUFMT0cxIERJQUxPRyBESVNDQVJEQUJMRSAgNTAsIDUwLCAyNjgsIDk4ClNUWUxFIERTXzNETE9PSyB8IERTX0NPTlRST0wgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19DTElQU0lCTElOR1MgfAogICAgV1NfQk9SREVSCkZPTlQgOCwgIk1TIFNhbnMgU2VyaWYiCkJFR0lOCkVORAoKSUREX0RJQUxPRzIgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxODcsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkRpYWxvZ28iCkZPTlQgOCwgIk1TIFNhbnMgU2VyaWYiCkJFR0lOCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDEzMCw3LDUwLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkFubnVsbGEiLElEQ0FOQ0VMLDEzMCwyNCw1MCwxNApFTkQKCgovKgogKiBURVhUSU5DTFVERQogKi8KCjEgVEVYVElOQ0xVREUgRElTQ0FSREFCTEUKQkVHSU4KICAgICJyZXNvdXJjZS5oXDAiCkVORAoKCgovKgogKiBTdHJpbmcgVGFibGUKICovCgovKgogKlNUUklOR1RBQkxFIERJU0NBUkRBQkxFCiAqQkVHSU4KICogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIkFwcmUgbCdhaXV0byBkZWxsJ2VkaXRvciBkZWwgUmVnaXN0cm8uIgogKiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAiVmlzdWFsaXp6YSBpbmZvcm1hemlvbmkgc3VsIHByb2dyYW1tYSwgaWwgbnVtZXJvIGRpIHZlcnNpb25lIGUgaWwgY29weXJpZ2h0LiIKICpFTkQKICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCg==