LS0gJElkOiBNQVAtTENTLURhdGFUeXBlcy5hc24gMjgxNDkgMjAwOS0wNC0yNSAxNzo0NTozNFogZXR4cmFiICQKLS0gTUFQLUxDUy1EYXRhVHlwZXMuYXNuCi0tCi0tIFRha2VuIGZyb20gM0dQUCBUUyAyOS4wMDIgIFY4LjkuMCAoMjAwOS0wNCkKLS0KLS0gMTcuNy4xMyBMb2NhdGlvbiBzZXJ2aWNlIGRhdGEgdHlwZXMKLS0KCk1BUC1MQ1MtRGF0YVR5cGVzIHsKICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1MQ1MtRGF0YVR5cGVzICgyNSkgdmVyc2lvbjExICgxMSl9CgpERUZJTklUSU9OUwpJTVBMSUNJVCBUQUdTCjo6PQpCRUdJTgoKRVhQT1JUUwoJUm91dGluZ0luZm9Gb3JMQ1MtQXJnLAoJUm91dGluZ0luZm9Gb3JMQ1MtUmVzLAoJUHJvdmlkZVN1YnNjcmliZXJMb2NhdGlvbi1BcmcsCglQcm92aWRlU3Vic2NyaWJlckxvY2F0aW9uLVJlcywKCVN1YnNjcmliZXJMb2NhdGlvblJlcG9ydC1BcmcsCglTdWJzY3JpYmVyTG9jYXRpb25SZXBvcnQtUmVzLApMb2NhdGlvblR5cGUsIApEZWZlcnJlZExvY2F0aW9uRXZlbnRUeXBlLApMQ1NDbGllbnROYW1lLApMQ1MtUW9TLApIb3Jpem9udGFsLUFjY3VyYWN5LApSZXNwb25zZVRpbWUsCkV4dC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbiwgClZlbG9jaXR5RXN0aW1hdGUsClN1cHBvcnRlZEdBRFNoYXBlcywKQWRkLUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uLApMQ1NSZXF1ZXN0b3JJRCwgCkxDUy1SZWZlcmVuY2VOdW1iZXIsCkxDU0NvZGV3b3JkLApBcmVhRXZlbnRJbmZvLApSZXBvcnRpbmdQTE1OTGlzdCwKUGVyaW9kaWNMRFJJbmZvLApTZXF1ZW5jZU51bWJlcgo7CgpJTVBPUlRTCglBZGRyZXNzU3RyaW5nLAoJSVNETi1BZGRyZXNzU3RyaW5nLAoJSU1FSSwKCUlNU0ksCglMTVNJLAoJU3Vic2NyaWJlcklkZW50aXR5LAoJQWdlT2ZMb2NhdGlvbkluZm9ybWF0aW9uLAoJTENTQ2xpZW50RXh0ZXJuYWxJRCwKCUxDU0NsaWVudEludGVybmFsSUQsCkxDU1NlcnZpY2VUeXBlSUQsCkNlbGxHbG9iYWxJZE9yU2VydmljZUFyZWFJZE9yTEFJLApQTE1OLUlkCkZST00gTUFQLUNvbW1vbkRhdGFUeXBlcyB7CiAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCiAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtQ29tbW9uRGF0YVR5cGVzICgxOCkgdmVyc2lvbjExICgxMSl9CgoJRXh0ZW5zaW9uQ29udGFpbmVyLAoJU0xSLUFyZ0V4dGVuc2lvbkNvbnRhaW5lcgpGUk9NIE1BUC1FeHRlbnNpb25EYXRhVHlwZXMgewogICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQogICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLUV4dGVuc2lvbkRhdGFUeXBlcyAoMjEpIHZlcnNpb24xMSAoMTEpfQoKCVVTU0QtRGF0YUNvZGluZ1NjaGVtZSwKVVNTRC1TdHJpbmcKRlJPTSBNQVAtU1MtRGF0YVR5cGVzIHsKICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpCiAgIG1hcC1TUy1EYXRhVHlwZXMgKDE0KSB2ZXJzaW9uMTEgKDExKX0KCglBUE4sCglHU04tQWRkcmVzcywKCVN1cHBvcnRlZExDUy1DYXBhYmlsaXR5U2V0cwpGUk9NIE1BUC1NUy1EYXRhVHlwZXMgewogICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQogICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLU1TLURhdGFUeXBlcyAoMTEpIHZlcnNpb24xMSAoMTEpfQoKCUFkZGl0aW9uYWwtTnVtYmVyCkZST00gTUFQLVNNLURhdGFUeXBlcyB7CiAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCiAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtU00tRGF0YVR5cGVzICgxNikgdmVyc2lvbjExICgxMSl9CjsKCgpSb3V0aW5nSW5mb0ZvckxDUy1BcmcgOjo9IFNFUVVFTkNFIHsKCW1sY051bWJlcgkJWzBdIElTRE4tQWRkcmVzc1N0cmluZywKCXRhcmdldE1TCQlbMV0gU3Vic2NyaWJlcklkZW50aXR5LAoJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi59CgpSb3V0aW5nSW5mb0ZvckxDUy1SZXMgOjo9IFNFUVVFTkNFIHsKCXRhcmdldE1TCQlbMF0gU3Vic2NyaWJlcklkZW50aXR5LAoJbGNzTG9jYXRpb25JbmZvCVsxXSBMQ1NMb2NhdGlvbkluZm8sCglleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiwKCXYtZ21sYy1BZGRyZXNzCVszXQlHU04tQWRkcmVzcwlPUFRJT05BTCwKCWgtZ21sYy1BZGRyZXNzCVs0XQlHU04tQWRkcmVzcwlPUFRJT05BTCwKCXBwci1BZGRyZXNzCVs1XQlHU04tQWRkcmVzcwlPUFRJT05BTCwKCWFkZGl0aW9uYWwtdi1nbWxjLUFkZHJlc3MJWzZdCUdTTi1BZGRyZXNzCU9QVElPTkFMIH0KCkxDU0xvY2F0aW9uSW5mbyA6Oj0gU0VRVUVOQ0UgewoJbmV0d29ya05vZGUtTnVtYmVyCUlTRE4tQWRkcmVzc1N0cmluZywKCS0tIE5ldHdvcmtOb2RlLW51bWJlciBjYW4gYmUgZWl0aGVyIG1zYy1udW1iZXIgb3Igc2dzbi1udW1iZXIKCWxtc2kJCQlbMF0gTE1TSQkJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzFdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiAsCglncHJzTm9kZUluZGljYXRvciAJWzJdIE5VTEwJCU9QVElPTkFMLAoJLS0gZ3Byc05vZGVJbmRpY2F0b3IgaXMgc2V0IG9ubHkgaWYgdGhlIFNHU04gbnVtYmVyIGlzIHNlbnQgYXMgdGhlIE5ldHdvcmsgTm9kZSBOdW1iZXIKCWFkZGl0aW9uYWwtTnVtYmVyCVszXSBBZGRpdGlvbmFsLU51bWJlcglPUFRJT05BTCwKCXN1cHBvcnRlZExDUy1DYXBhYmlsaXR5U2V0cwlbNF0JU3VwcG9ydGVkTENTLUNhcGFiaWxpdHlTZXRzCU9QVElPTkFMLAoJYWRkaXRpb25hbC1MQ1MtQ2FwYWJpbGl0eVNldHMJWzVdCVN1cHBvcnRlZExDUy1DYXBhYmlsaXR5U2V0cwlPUFRJT05BTAoJfQoKUHJvdmlkZVN1YnNjcmliZXJMb2NhdGlvbi1BcmcgOjo9IFNFUVVFTkNFIHsKCWxvY2F0aW9uVHlwZQlMb2NhdGlvblR5cGUsCgltbGMtTnVtYmVyCUlTRE4tQWRkcmVzc1N0cmluZywKCWxjcy1DbGllbnRJRAlbMF0gTENTLUNsaWVudElECU9QVElPTkFMLAoJcHJpdmFjeU92ZXJyaWRlCVsxXSBOVUxMCQlPUFRJT05BTCwKCWltc2kJCQlbMl0gSU1TSQkJT1BUSU9OQUwsCgltc2lzZG4JCVszXSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCglsbXNpCQkJWzRdIExNU0kJCU9QVElPTkFMLAoJaW1laQkJCVs1XSBJTUVJCQlPUFRJT05BTCwKCWxjcy1Qcmlvcml0eQlbNl0gTENTLVByaW9yaXR5CU9QVElPTkFMLAoJbGNzLVFvUwkJWzddIExDUy1Rb1MJT1BUSU9OQUwsCglleHRlbnNpb25Db250YWluZXIJWzhdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiAsCglzdXBwb3J0ZWRHQURTaGFwZXMJWzldCVN1cHBvcnRlZEdBRFNoYXBlcwlPUFRJT05BTCwKCWxjcy1SZWZlcmVuY2VOdW1iZXIJWzEwXQlMQ1MtUmVmZXJlbmNlTnVtYmVyCU9QVElPTkFMLAoJbGNzU2VydmljZVR5cGVJRAlbMTFdCUxDU1NlcnZpY2VUeXBlSUQJT1BUSU9OQUwsCglsY3NDb2Rld29yZAlbMTJdCUxDU0NvZGV3b3JkCU9QVElPTkFMLAoJbGNzLVByaXZhY3lDaGVjawlbMTNdCUxDUy1Qcml2YWN5Q2hlY2sJT1BUSU9OQUwsCglhcmVhRXZlbnRJbmZvCVsxNF0JQXJlYUV2ZW50SW5mbwlPUFRJT05BTCwKCWgtZ21sYy1BZGRyZXNzCVsxNV0JR1NOLUFkZHJlc3MJT1BUSU9OQUwsCgltby1sclNob3J0Q2lyY3VpdEluZGljYXRvcglbMTZdIE5VTEwJCU9QVElPTkFMLAoJcGVyaW9kaWNMRFJJbmZvCVsxN10gUGVyaW9kaWNMRFJJbmZvCU9QVElPTkFMLAoJcmVwb3J0aW5nUExNTkxpc3QJWzE4XSBSZXBvcnRpbmdQTE1OTGlzdAlPUFRJT05BTCB9CgoJLS0gb25lIG9mIGltc2kgb3IgbXNpc2RuIGlzIG1hbmRhdG9yeQoJLS0gSWYgYSBsb2NhdGlvbiBlc3RpbWF0ZSB0eXBlIGluZGljYXRlcyBhY3RpdmF0ZSBkZWZlcnJlZCBsb2NhdGlvbiBvciBjYW5jZWwgZGVmZXJyZWQgCgktLSBsb2NhdGlvbiwgYSBsY3MtUmVmZXJlbmNlIG51bWJlciBzaGFsbCBiZSBpbmNsdWRlZC4KCkxvY2F0aW9uVHlwZSA6Oj0gU0VRVUVOQ0UgewoJbG9jYXRpb25Fc3RpbWF0ZVR5cGUJWzBdIExvY2F0aW9uRXN0aW1hdGVUeXBlLAoJLi4uLAoJZGVmZXJyZWRMb2NhdGlvbkV2ZW50VHlwZQlbMV0gRGVmZXJyZWRMb2NhdGlvbkV2ZW50VHlwZQlPUFRJT05BTCB9CgpMb2NhdGlvbkVzdGltYXRlVHlwZSA6Oj0gRU5VTUVSQVRFRCB7CgljdXJyZW50TG9jYXRpb24JKDApLAoJY3VycmVudE9yTGFzdEtub3duTG9jYXRpb24JKDEpLAoJaW5pdGlhbExvY2F0aW9uCSgyKSwKCS4uLiwKCWFjdGl2YXRlRGVmZXJyZWRMb2NhdGlvbgkoMyksCgljYW5jZWxEZWZlcnJlZExvY2F0aW9uCSg0KSAsCglub3RpZmljYXRpb25WZXJpZmljYXRpb25Pbmx5CSg1KSB9Ci0tCWV4Y2VwdGlvbiBoYW5kbGluZzoKLS0JYSBQcm92aWRlU3Vic2NyaWJlckxvY2F0aW9uLUFyZyBjb250YWluaW5nIGFuIHVucmVjb2duaXplZCBMb2NhdGlvbkVzdGltYXRlVHlwZQotLQlzaGFsbCBiZSByZWplY3RlZCBieSB0aGUgcmVjZWl2ZXIgd2l0aCBhIHJldHVybiBlcnJvciBjYXVzZSBvZiB1bmV4cGVjdGVkIGRhdGEgdmFsdWUKCkRlZmVycmVkTG9jYXRpb25FdmVudFR5cGUgOjo9IEJJVCBTVFJJTkcgewoJbXNBdmFpbGFibGUJKDApICwKCWVudGVyaW5nSW50b0FyZWEJKDEpLAoJbGVhdmluZ0Zyb21BcmVhCSgyKSwKCWJlaW5nSW5zaWRlQXJlYQkoMykgLAoJcGVyaW9kaWNMRFIJKDQpICB9IChTSVpFICgxLi4xNikpIAotLSBiZWluZ0luc2lkZUFyZWEgaXMgYWx3YXlzIHRyZWF0ZWQgYXMgb25lVGltZUV2ZW50IHJlZ2FyZGxlc3Mgb2YgdGhlIHBvc3NpYmxlIHZhbHVlCi0tIG9mIG9jY3VycmVuY2VJbmZvIGluc2lkZSBhcmVhRXZlbnRJbmZvLgotLSBleGNlcHRpb24gaGFuZGxpbmc6Ci0tIGEgUHJvdmlkZVN1YnNjcmliZXJMb2NhdGlvbi1BcmcgY29udGFpbmluZyBvdGhlciB2YWx1ZXMgdGhhbiBsaXN0ZWQgYWJvdmUgaW4gCi0tIERlZmVycmVkTG9jYXRpb25FdmVudFR5cGUgc2hhbGwgYmUgcmVqZWN0ZWQgYnkgdGhlIHJlY2VpdmVyIHdpdGggYSByZXR1cm4gZXJyb3IgY2F1c2Ugb2YgCi0tIHVuZXhwZWN0ZWQgZGF0YSB2YWx1ZS4KCkxDUy1DbGllbnRJRCA6Oj0gU0VRVUVOQ0UgewoJbGNzQ2xpZW50VHlwZQlbMF0gTENTQ2xpZW50VHlwZSwKCWxjc0NsaWVudEV4dGVybmFsSUQJWzFdIExDU0NsaWVudEV4dGVybmFsSUQJT1BUSU9OQUwsCglsY3NDbGllbnREaWFsZWRCeU1TCVsyXSBBZGRyZXNzU3RyaW5nCU9QVElPTkFMLAoJbGNzQ2xpZW50SW50ZXJuYWxJRAlbM10gTENTQ2xpZW50SW50ZXJuYWxJRAlPUFRJT05BTCwKCWxjc0NsaWVudE5hbWUJWzRdIExDU0NsaWVudE5hbWUJT1BUSU9OQUwsCgkuLi4sCglsY3NBUE4JCVs1XSBBUE4JCU9QVElPTkFMLAoJbGNzUmVxdWVzdG9ySUQJWzZdIExDU1JlcXVlc3RvcklECU9QVElPTkFMIH0KCkxDU0NsaWVudFR5cGUgOjo9IEVOVU1FUkFURUQgewoJZW1lcmdlbmN5U2VydmljZXMJKDApLAoJdmFsdWVBZGRlZFNlcnZpY2VzCSgxKSwKCXBsbW5PcGVyYXRvclNlcnZpY2VzCSgyKSwKCWxhd2Z1bEludGVyY2VwdFNlcnZpY2VzCSgzKSwKCS4uLiB9CgktLQlleGNlcHRpb24gaGFuZGxpbmc6CgktLQl1bnJlY29nbml6ZWQgdmFsdWVzIG1heSBiZSBpZ25vcmVkIGlmIHRoZSBMQ1MgY2xpZW50IHVzZXMgdGhlIHByaXZhY3kgb3ZlcnJpZGUKCS0tCW90aGVyd2lzZSwgYW4gdW5yZWNvZ25pemVkIHZhbHVlIHNoYWxsIGJlIHRyZWF0ZWQgYXMgdW5leHBlY3RlZCBkYXRhIGJ5IGEgcmVjZWl2ZXIKCS0tCWEgcmV0dXJuIGVycm9yIHNoYWxsIHRoZW4gYmUgcmV0dXJuZWQgaWYgcmVjZWl2ZWQgaW4gYSBNQVAgaW52b2tlIAoKTENTQ2xpZW50TmFtZSA6Oj0gU0VRVUVOQ0UgewoJZGF0YUNvZGluZ1NjaGVtZQlbMF0gVVNTRC1EYXRhQ29kaW5nU2NoZW1lLAoJbmFtZVN0cmluZwlbMl0gTmFtZVN0cmluZywKCS4uLiwKCWxjcy1Gb3JtYXRJbmRpY2F0b3IJWzNdIExDUy1Gb3JtYXRJbmRpY2F0b3IJT1BUSU9OQUwgfQoKLS0gVGhlIFVTU0QtRGF0YUNvZGluZ1NjaGVtZSBzaGFsbCBpbmRpY2F0ZSB1c2Ugb2YgdGhlIGRlZmF1bHQgYWxwaGFiZXQgdGhyb3VnaCB0aGUKLS0gZm9sbG93aW5nIGVuY29kaW5nCi0tCWJpdAk3IDYgNSA0IDMgMiAxIDAKLS0JCTAgMCAwIDAgMSAxIDEgMQoKTmFtZVN0cmluZyA6Oj0gVVNTRC1TdHJpbmcgKFNJWkUgKDEuLm1heE5hbWVTdHJpbmdMZW5ndGgpKQoKbWF4TmFtZVN0cmluZ0xlbmd0aCAgSU5URUdFUiA6Oj0gNjMKCkxDU1JlcXVlc3RvcklEIDo6PSBTRVFVRU5DRSB7CglkYXRhQ29kaW5nU2NoZW1lCVswXSBVU1NELURhdGFDb2RpbmdTY2hlbWUsCglyZXF1ZXN0b3JJRFN0cmluZwlbMV0gUmVxdWVzdG9ySURTdHJpbmcsCgkuLi4sCglsY3MtRm9ybWF0SW5kaWNhdG9yCVsyXSBMQ1MtRm9ybWF0SW5kaWNhdG9yCU9QVElPTkFMIH0KClJlcXVlc3RvcklEU3RyaW5nIDo6PSBVU1NELVN0cmluZyAoU0laRSAoMS4ubWF4UmVxdWVzdG9ySURTdHJpbmdMZW5ndGgpKQoKbWF4UmVxdWVzdG9ySURTdHJpbmdMZW5ndGggIElOVEVHRVIgOjo9IDYzCgpMQ1MtRm9ybWF0SW5kaWNhdG9yIDo6PSBFTlVNRVJBVEVEIHsKCWxvZ2ljYWxOYW1lCSgwKSwKCWUtbWFpbEFkZHJlc3MJKDEpLAoJbXNpc2RuCQkoMiksCgl1cmwJCQkoMyksCglzaXBVcmwJCSg0KSwKCS4uLiB9CgpMQ1MtUHJpb3JpdHkgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCgktLSAwID0gaGlnaGVzdCBwcmlvcml0eQoJLS0gMSA9IG5vcm1hbCBwcmlvcml0eQoJLS0gYWxsIG90aGVyIHZhbHVlcyB0cmVhdGVkIGFzIDEgCgpMQ1MtUW9TIDo6PSBTRVFVRU5DRSB7Cglob3Jpem9udGFsLWFjY3VyYWN5CVswXSBIb3Jpem9udGFsLUFjY3VyYWN5CU9QVElPTkFMLAoJdmVydGljYWxDb29yZGluYXRlUmVxdWVzdAlbMV0gTlVMTAkJT1BUSU9OQUwsCgl2ZXJ0aWNhbC1hY2N1cmFjeQlbMl0gVmVydGljYWwtQWNjdXJhY3kJT1BUSU9OQUwsCXJlc3BvbnNlVGltZQlbM10gUmVzcG9uc2VUaW1lCU9QVElPTkFMLAoJZXh0ZW5zaW9uQ29udGFpbmVyCVs0XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCgkuLi4sCgl2ZWxvY2l0eVJlcXVlc3QJWzVdIE5VTEwJCU9QVElPTkFMCn0KCkhvcml6b250YWwtQWNjdXJhY3kgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCgktLSBiaXQgOCA9IDAKCS0tIGJpdHMgNy0xID0gNyBiaXQgVW5jZXJ0YWludHkgQ29kZSBkZWZpbmVkIGluIDNHUFAgVFMgMjMuMDMyLiBUaGUgaG9yaXpvbnRhbCBsb2NhdGlvbiAKCS0tIGVycm9yIHNob3VsZCBiZSBsZXNzIHRoYW4gdGhlIGVycm9yIGluZGljYXRlZCBieSB0aGUgdW5jZXJ0YWludHkgY29kZSB3aXRoIDY3JQoJLS0gY29uZmlkZW5jZS4KClZlcnRpY2FsLUFjY3VyYWN5IDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQoJLS0gYml0IDggPSAwCgktLSBiaXRzIDctMSA9IDcgYml0IFZlcnRpY2FsIFVuY2VydGFpbnR5IENvZGUgZGVmaW5lZCBpbiAzR1BQIFRTIDIzLjAzMi4gCgktLSBUaGUgdmVydGljYWwgbG9jYXRpb24gZXJyb3Igc2hvdWxkIGJlIGxlc3MgdGhhbiB0aGUgZXJyb3IgaW5kaWNhdGVkIAoJLS0gYnkgdGhlIHVuY2VydGFpbnR5IGNvZGUgd2l0aCA2NyUgY29uZmlkZW5jZS4KClJlc3BvbnNlVGltZSA6Oj0gU0VRVUVOQ0UgewoJcmVzcG9uc2VUaW1lQ2F0ZWdvcnkJUmVzcG9uc2VUaW1lQ2F0ZWdvcnksCgkuLi59Ci0tCW5vdGU6IGFuIGV4cGFuZGFibGUgU0VRVUVOQ0Ugc2ltcGxpZmllcyBsYXRlciBhZGRpdGlvbiBvZiBhIG51bWVyaWMgcmVzcG9uc2UgdGltZS4KClJlc3BvbnNlVGltZUNhdGVnb3J5IDo6PSBFTlVNRVJBVEVEIHsKCWxvd2RlbGF5ICAoMCksCglkZWxheXRvbGVyYW50ICAoMSksCgkuLi4gfQotLQlleGNlcHRpb24gaGFuZGxpbmc6Ci0tCWFuIHVucmVjb2duaXplZCB2YWx1ZSBzaGFsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIHZhbHVlIDEgKGRlbGF5dG9sZXJhbnQpCgpTdXBwb3J0ZWRHQURTaGFwZXMgOjo9IEJJVCBTVFJJTkcgewoJZWxsaXBzb2lkUG9pbnQgICgwKSwKCWVsbGlwc29pZFBvaW50V2l0aFVuY2VydGFpbnR5Q2lyY2xlICgxKSwKCWVsbGlwc29pZFBvaW50V2l0aFVuY2VydGFpbnR5RWxsaXBzZSAoMiksCglwb2x5Z29uICgzKSwKCWVsbGlwc29pZFBvaW50V2l0aEFsdGl0dWRlICg0KSwKCWVsbGlwc29pZFBvaW50V2l0aEFsdGl0dWRlQW5kVW5jZXJ0YWludHlFbGlwc29pZCAoNSksCgllbGxpcHNvaWRBcmMgICg2KSB9IChTSVpFICg3Li4xNikpCi0tIEEgbm9kZSBzaGFsbCBtYXJrIGluIHRoZSBCSVQgU1RSSU5HIGFsbCBTaGFwZXMgZGVmaW5lZCBpbiAzR1BQIFRTIDIzLjAzMiBpdCBzdXBwb3J0cy4KLS0gZXhjZXB0aW9uIGhhbmRsaW5nOiBiaXRzIDcgdG8gMTUgc2hhbGwgYmUgaWdub3JlZCBpZiByZWNlaXZlZC4KCkxDUy1SZWZlcmVuY2VOdW1iZXI6Oj0gT0NURVQgU1RSSU5HIChTSVpFKDEpKQoKTENTQ29kZXdvcmQgOjo9IFNFUVVFTkNFIHsKCWRhdGFDb2RpbmdTY2hlbWUJWzBdIFVTU0QtRGF0YUNvZGluZ1NjaGVtZSwKCWxjc0NvZGV3b3JkU3RyaW5nCVsxXSBMQ1NDb2Rld29yZFN0cmluZywKCS4uLn0KCkxDU0NvZGV3b3JkU3RyaW5nIDo6PSBVU1NELVN0cmluZyAoU0laRSAoMS4ubWF4TENTQ29kZXdvcmRTdHJpbmdMZW5ndGgpKQoKbWF4TENTQ29kZXdvcmRTdHJpbmdMZW5ndGggIElOVEVHRVIgOjo9IDIwCgpMQ1MtUHJpdmFjeUNoZWNrIDo6PSBTRVFVRU5DRSB7CgljYWxsU2Vzc2lvblVucmVsYXRlZAlbMF0gUHJpdmFjeUNoZWNrUmVsYXRlZEFjdGlvbiwKCWNhbGxTZXNzaW9uUmVsYXRlZAlbMV0gUHJpdmFjeUNoZWNrUmVsYXRlZEFjdGlvbglPUFRJT05BTCwKCS4uLn0KClByaXZhY3lDaGVja1JlbGF0ZWRBY3Rpb24gOjo9IEVOVU1FUkFURUQgewoJYWxsb3dlZFdpdGhvdXROb3RpZmljYXRpb24gKDApLAoJYWxsb3dlZFdpdGhOb3RpZmljYXRpb24gKDEpLAoJYWxsb3dlZElmTm9SZXNwb25zZSAoMiksCglyZXN0cmljdGVkSWZOb1Jlc3BvbnNlICgzKSwKCW5vdEFsbG93ZWQgKDQpLAoJLi4ufQotLQlleGNlcHRpb24gaGFuZGxpbmc6Ci0tCWEgUHJvdmlkZVN1YnNjcmliZXJMb2NhdGlvbi1BcmcgY29udGFpbmluZyBhbiB1bnJlY29nbml6ZWQgUHJpdmFjeUNoZWNrUmVsYXRlZEFjdGlvbgotLQlzaGFsbCBiZSByZWplY3RlZCBieSB0aGUgcmVjZWl2ZXIgd2l0aCBhIHJldHVybiBlcnJvciBjYXVzZSBvZiB1bmV4cGVjdGVkIGRhdGEgdmFsdWUKCkFyZWFFdmVudEluZm8gOjo9IFNFUVVFTkNFIHsKCWFyZWFEZWZpbml0aW9uCVswXQlBcmVhRGVmaW5pdGlvbiwKCW9jY3VycmVuY2VJbmZvCVsxXQlPY2N1cnJlbmNlSW5mbwlPUFRJT05BTCwKCWludGVydmFsVGltZQlbMl0JSW50ZXJ2YWxUaW1lCU9QVElPTkFMLAoJLi4ufQoKQXJlYURlZmluaXRpb24gOjo9IFNFUVVFTkNFIHsKCWFyZWFMaXN0CQlbMF0JQXJlYUxpc3QsCgkuLi59CgpBcmVhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZBcmVhcykgT0YgQXJlYQoKbWF4TnVtT2ZBcmVhcyAgSU5URUdFUiA6Oj0gMTAKCkFyZWEgOjo9IFNFUVVFTkNFIHsKCWFyZWFUeXBlCQlbMF0JQXJlYVR5cGUsCglhcmVhSWRlbnRpZmljYXRpb24JWzFdCUFyZWFJZGVudGlmaWNhdGlvbiwKCS4uLn0KCkFyZWFUeXBlIDo6PSBFTlVNRVJBVEVEIHsKCWNvdW50cnlDb2RlCSgwKSwKCXBsbW5JZAkJKDEpLAoJbG9jYXRpb25BcmVhSWQJKDIpLAoJcm91dGluZ0FyZWFJZAkoMyksCgljZWxsR2xvYmFsSWQJKDQpLAoJLi4uLAoJdXRyYW5DZWxsSWQJKDUpIH0KCkFyZWFJZGVudGlmaWNhdGlvbiA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgyLi43KSkKCS0tIFRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgoJLS0gb2N0ZXQgMSBiaXRzIDQzMjEJTW9iaWxlIENvdW50cnkgQ29kZSAxc3QgZGlnaXQKCS0tICAgICAgICAgYml0cyA4NzY1CU1vYmlsZSBDb3VudHJ5IENvZGUgMm5kIGRpZ2l0CgktLSBvY3RldCAyIGJpdHMgNDMyMQlNb2JpbGUgQ291bnRyeSBDb2RlIDNyZCBkaWdpdAoJLS0gICAgICAgICBiaXRzIDg3NjUJTW9iaWxlIE5ldHdvcmsgQ29kZSAzcmQgZGlnaXQgaWYgMyBkaWdpdCBNTkMgaW5jbHVkZWQKCS0tCQkJb3IgZmlsbGVyICgxMTExKQoJLS0gb2N0ZXQgMyBiaXRzIDQzMjEJTW9iaWxlIE5ldHdvcmsgQ29kZSAxc3QgZGlnaXQKCS0tICAgICAgICAgYml0cyA4NzY1CU1vYmlsZSBOZXR3b3JrIENvZGUgMm5kIGRpZ2l0CgktLSBvY3RldHMgNCBhbmQgNQlMb2NhdGlvbiBBcmVhIENvZGUgKExBQykgZm9yIExvY2FsIEFyZWEgSWQsCgktLQkJCVJvdXRpbmcgQXJlYSBJZCBhbmQgQ2VsbCBHbG9iYWwgSWQKCS0tIG9jdGV0IDYJUm91dGluZyBBcmVhIENvZGUgKFJBQykgZm9yIFJvdXRpbmcgQXJlYSBJZAoJLS0gb2N0ZXRzIDYgYW5kIDcJQ2VsbCBJZGVudGl0eSAoQ0kpIGZvciBDZWxsIEdsb2JhbCBJZAoJLS0gb2N0ZXRzIDQgdW50aWwgNwlVdHJhbiBDZWxsIElkZW50aXR5IChVQy1JZCkgZm9yIFV0cmFuIENlbGwgSWQKCk9jY3VycmVuY2VJbmZvIDo6PSBFTlVNRVJBVEVEIHsKCW9uZVRpbWVFdmVudAkoMCksCgltdWx0aXBsZVRpbWVFdmVudAkoMSksCgkuLi59CgpJbnRlcnZhbFRpbWUgOjo9IElOVEVHRVIgKDEuLjMyNzY3KQoJLS0gbWluaW11bSBpbnRlcnZhbCB0aW1lIGJldHdlZW4gYXJlYSByZXBvcnRzIGluIHNlY29uZHMKClBlcmlvZGljTERSSW5mbyA6Oj0gU0VRVUVOQ0UgewoJcmVwb3J0aW5nQW1vdW50CQlSZXBvcnRpbmdBbW91bnQsCglyZXBvcnRpbmdJbnRlcnZhbAlSZXBvcnRpbmdJbnRlcnZhbCwKCS4uLn0KLS0gcmVwb3J0aW5nSW50ZXJ2YWwgeCByZXBvcnRpbmdBbW91bnQgc2hhbGwgbm90IGV4Y2VlZCA4NjM5OTk5ICg5OSBkYXlzLCAyMyBob3VycywKLS0gNTkgbWludXRlcyBhbmQgNTkgc2Vjb25kcykgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBPTUEgTUxQIGFuZCBSTFAKClJlcG9ydGluZ0Ftb3VudCA6Oj0gSU5URUdFUiAoMS4ubWF4UmVwb3J0aW5nQW1vdW50KQoKbWF4UmVwb3J0aW5nQW1vdW50IElOVEVHRVIgOjo9IDg2Mzk5OTkKClJlcG9ydGluZ0ludGVydmFsIDo6PSBJTlRFR0VSICgxLi5tYXhSZXBvcnRpbmdJbnRlcnZhbCkKLS0gUmVwb3J0aW5nSW50ZXJ2YWwgaXMgaW4gc2Vjb25kcwoKbWF4UmVwb3J0aW5nSW50ZXJ2YWwgSU5URUdFUiA6Oj0gODYzOTk5OQoKUmVwb3J0aW5nUExNTkxpc3Q6Oj0gU0VRVUVOQ0UgewoJcGxtbi1MaXN0UHJpb3JpdGl6ZWQJCQlbMF0gTlVMTAkJCQkJT1BUSU9OQUwsCglwbG1uLUxpc3QgCQkJCQkJWzFdIFBMTU5MaXN0LAoJLi4ufQoKUExNTkxpc3Q6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZSZXBvcnRpbmdQTE1OKSBPRgoJCQkJUmVwb3J0aW5nUExNTgoKbWF4TnVtT2ZSZXBvcnRpbmdQTE1OIElOVEVHRVIgOjo9IDIwCgpSZXBvcnRpbmdQTE1OOjo9IFNFUVVFTkNFIHsKCXBsbW4tSWQgCQkJCQkJWzBdIFBMTU4tSWQsCglyYW4tVGVjaG5vbG9neSAJCQkJCVsxXSBSQU4tVGVjaG5vbG9neQkJCU9QVElPTkFMLAoJcmFuLVBlcmlvZGljTG9jYXRpb25TdXBwb3J0CQlbMl0gTlVMTAkJCQkJT1BUSU9OQUwsCgkuLi59CgpSQU4tVGVjaG5vbG9neSA6Oj0gRU5VTUVSQVRFRCB7Cglnc20JCQkoMCksCgl1bXRzCQkoMSksCgkuLi59CgpQcm92aWRlU3Vic2NyaWJlckxvY2F0aW9uLVJlcyA6Oj0gU0VRVUVOQ0UgewoJbG9jYXRpb25Fc3RpbWF0ZQlFeHQtR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24sCglhZ2VPZkxvY2F0aW9uRXN0aW1hdGUJWzBdIEFnZU9mTG9jYXRpb25JbmZvcm1hdGlvbglPUFRJT05BTCwKCWV4dGVuc2lvbkNvbnRhaW5lcglbMV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAoJLi4uICwKCWFkZC1Mb2NhdGlvbkVzdGltYXRlCVsyXSBBZGQtR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24gCU9QVElPTkFMLAoJZGVmZXJyZWRtdC1sclJlc3BvbnNlSW5kaWNhdG9yCVszXSBOVUxMCQlPUFRJT05BTCwKCWdlcmFuUG9zaXRpb25pbmdEYXRhCVs0XSBQb3NpdGlvbmluZ0RhdGFJbmZvcm1hdGlvbglPUFRJT05BTCwKCXV0cmFuUG9zaXRpb25pbmdEYXRhCVs1XSBVdHJhblBvc2l0aW9uaW5nRGF0YUluZm8JT1BUSU9OQUwsCgljZWxsSWRPclNhaQlbNl0gQ2VsbEdsb2JhbElkT3JTZXJ2aWNlQXJlYUlkT3JMQUkJT1BUSU9OQUwsCglzYWktUHJlc2VudAlbN10gTlVMTAkJT1BUSU9OQUwsCglhY2N1cmFjeUZ1bGZpbG1lbnRJbmRpY2F0b3IJWzhdIEFjY3VyYWN5RnVsZmlsbWVudEluZGljYXRvcgkJT1BUSU9OQUwsCgl2ZWxvY2l0eUVzdGltYXRlCVs5XSBWZWxvY2l0eUVzdGltYXRlCU9QVElPTkFMLAoJbW8tbHJTaG9ydENpcmN1aXRJbmRpY2F0b3IJWzEwXSBOVUxMCQlPUFRJT05BTCB9CgotLQlpZiBkZWZlcnJlZG10LWxyUmVzcG9uc2VJbmRpY2F0b3IgaXMgc2V0LCBsb2NhdGlvbkVzdGltYXRlIGlzIGlnbm9yZWQuCgotLSB0aGUgYWRkLUxvY2F0aW9uRXN0aW1hdGUgcGFyYW1ldGVyIHNoYWxsIG5vdCBiZSBzZW50IHRvIGEgbm9kZSB0aGF0IGRpZCBub3QgaW5kaWNhdGUgdGhlCi0tIGdlb2dyYXBoaWMgc2hhcGVzIHN1cHBvcnRlZCBpbiB0aGUgUHJvdmlkZVN1YnNjcmliZXJMb2NhdGlvbi1BcmcKLS0gVGhlIGxvY2F0aW9uRXN0aW1hdGUgYW5kIHRoZSBhZGQtbG9jYXRpb25Fc3RpbWF0ZSBwYXJhbWV0ZXJzIHNoYWxsIG5vdCBiZSBzZW50IGlmCi0tIHRoZSBzdXBwb3J0ZWRHQURTaGFwZXMgcGFyYW1ldGVyIGhhcyBiZWVuIHJlY2VpdmVkIGluIFByb3ZpZGVTdWJzY3JpYmVyTG9jYXRpb24tQXJnCi0tIGFuZCB0aGUgc2hhcGUgZW5jb2RlZCBpbiBsb2NhdGlvbkVzdGltYXRlIG9yIGFkZC1Mb2NhdGlvbkVzdGltYXRlIGlzIG5vdCBtYXJrZWQKLS0gYXMgc3VwcG9ydGVkIGluIHN1cHBvcnRlZEdBRFNoYXBlcy4gSW4gc3VjaCBhIGNhc2UgUHJvdmlkZVN1YnNjcmliZXJMb2NhdGlvbgotLSBzaGFsbCBiZSByZWplY3RlZCB3aXRoIGVycm9yIEZhY2lsaXR5Tm90U3VwcG9ydGVkIHdpdGggYWRkaXRpb25hbCBpbmRpY2F0aW9uCi0tIHNoYXBlT2ZMb2NhdGlvbkVzdGltYXRlTm90U3VwcG9ydGVkLgotLSBzYWktUHJlc2VudCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2VsbElkT3JTYWkgcGFyYW1ldGVyIGNvbnRhaW5zIGEgU2VydmljZSBBcmVhIElkZW50aXR5LgoKQWNjdXJhY3lGdWxmaWxtZW50SW5kaWNhdG9yIDo6PSBFTlVNRVJBVEVEIHsKCXJlcXVlc3RlZEFjY3VyYWN5RnVsZmlsbGVkICAoMCksCglyZXF1ZXN0ZWRBY2N1cmFjeU5vdEZ1bGZpbGxlZCAgKDEpLAoJLi4uCX0KCkV4dC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbiA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxLi5tYXhFeHQtR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24pKQoJLS0gUmVmZXJzIHRvIGdlb2dyYXBoaWNhbCBJbmZvcm1hdGlvbiBkZWZpbmVkIGluIDNHUFAgVFMgMjMuMDMyLgoJLS0gVGhpcyBpcyBjb21wb3NlZCBvZiAxIG9yIG1vcmUgb2N0ZXRzIHdpdGggYW4gaW50ZXJuYWwgc3RydWN0dXJlIGFjY29yZGluZyB0bwoJLS0gM0dQUCBUUyAyMy4wMzIKCS0tIE9jdGV0IDE6IFR5cGUgb2Ygc2hhcGUsIG9ubHkgdGhlIGZvbGxvd2luZyBzaGFwZXMgaW4gM0dQUCBUUyAyMy4wMzIgYXJlIGFsbG93ZWQ6CgktLQkJKGEpIEVsbGlwc29pZCBwb2ludCB3aXRoIHVuY2VydGFpbnR5IGNpcmNsZQoJLS0JCShiKSBFbGxpcHNvaWQgcG9pbnQgd2l0aCB1bmNlcnRhaW50eSBlbGxpcHNlCgktLQkJKGMpIEVsbGlwc29pZCBwb2ludCB3aXRoIGFsdGl0dWRlIGFuZCB1bmNlcnRhaW50eSBlbGxpcHNvaWQKCS0tCQkoZCkgRWxsaXBzb2lkIEFyYwoJLS0JCShlKSBFbGxpcHNvaWQgUG9pbnQKCS0tIEFueSBvdGhlciB2YWx1ZSBpbiBvY3RldCAxIHNoYWxsIGJlIHRyZWF0ZWQgYXMgaW52YWxpZAoJLS0gT2N0ZXRzIDIgdG8gOCBmb3IgY2FzZSAoYSkgliBFbGxpcHNvaWQgcG9pbnQgd2l0aCB1bmNlcnRhaW50eSBjaXJjbGUKCS0tCQlEZWdyZWVzIG9mIExhdGl0dWRlCQkJCTMgb2N0ZXRzCgktLQkJRGVncmVlcyBvZiBMb25naXR1ZGUJCQkJMyBvY3RldHMKCS0tCQlVbmNlcnRhaW50eSBjb2RlCQkJCTEgb2N0ZXQKCS0tIE9jdGV0cyAyIHRvIDExIGZvciBjYXNlIChiKSCWIEVsbGlwc29pZCBwb2ludCB3aXRoIHVuY2VydGFpbnR5IGVsbGlwc2U6CgktLQkJRGVncmVlcyBvZiBMYXRpdHVkZQkJCQkzIG9jdGV0cwoJLS0JCURlZ3JlZXMgb2YgTG9uZ2l0dWRlCQkJCTMgb2N0ZXRzCgktLQkJVW5jZXJ0YWludHkgc2VtaS1tYWpvciBheGlzCQkJCTEgb2N0ZXQKCS0tCQlVbmNlcnRhaW50eSBzZW1pLW1pbm9yIGF4aXMJCQkJMSBvY3RldAoJLS0JCUFuZ2xlIG9mIG1ham9yIGF4aXMJCQkJMSBvY3RldAoJLS0JCUNvbmZpZGVuY2UJCQkJMSBvY3RldAoJLS0gT2N0ZXRzIDIgdG8gMTQgZm9yIGNhc2UgKGMpIJYgRWxsaXBzb2lkIHBvaW50IHdpdGggYWx0aXR1ZGUgYW5kIHVuY2VydGFpbnR5IGVsbGlwc29pZAoJLS0JCURlZ3JlZXMgb2YgTGF0aXR1ZGUJCQkJMyBvY3RldHMKCS0tCQlEZWdyZWVzIG9mIExvbmdpdHVkZQkJCQkzIG9jdGV0cwoJLS0JCUFsdGl0dWRlCQkJCTIgb2N0ZXRzCgktLQkJVW5jZXJ0YWludHkgc2VtaS1tYWpvciBheGlzCQkJCTEgb2N0ZXQKCS0tCQlVbmNlcnRhaW50eSBzZW1pLW1pbm9yIGF4aXMJCQkJMSBvY3RldAoJLS0JCUFuZ2xlIG9mIG1ham9yIGF4aXMJCQkJMSBvY3RldAoJLS0JCVVuY2VydGFpbnR5IGFsdGl0dWRlCQkJCTEgb2N0ZXQKCS0tCQlDb25maWRlbmNlCQkJCTEgb2N0ZXQKCS0tIE9jdGV0cyAyIHRvIDEzIGZvciBjYXNlIChkKSCWIEVsbGlwc29pZCBBcmMKCS0tCQlEZWdyZWVzIG9mIExhdGl0dWRlCQkJCTMgb2N0ZXRzCgktLQkJRGVncmVlcyBvZiBMb25naXR1ZGUJCQkJMyBvY3RldHMKCS0tCQlJbm5lciByYWRpdXMJCQkJMiBvY3RldHMKCS0tCQlVbmNlcnRhaW50eSByYWRpdXMJCQkJMSBvY3RldAoJLS0JCU9mZnNldCBhbmdsZQkJCQkxIG9jdGV0CgktLQkJSW5jbHVkZWQgYW5nbGUJCQkJMSBvY3RldAoJLS0JCUNvbmZpZGVuY2UJCQkJMSBvY3RldAoJLS0gT2N0ZXRzIDIgdG8gNyBmb3IgY2FzZSAoZSkgliBFbGxpcHNvaWQgUG9pbnQKCS0tCQlEZWdyZWVzIG9mIExhdGl0dWRlCQkJCTMgb2N0ZXRzCgktLQkJRGVncmVlcyBvZiBMb25naXR1ZGUJCQkJMyBvY3RldHMKCgktLQoJLS0gQW4gRXh0LUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uIHBhcmFtZXRlciBjb21wcmlzaW5nIG1vcmUgdGhhbiBvbmUgb2N0ZXQgYW5kCgktLSBjb250YWluaW5nIGFueSBvdGhlciBzaGFwZSBvciBhbiBpbmNvcnJlY3QgbnVtYmVyIG9mIG9jdGV0cyBvciBjb2RpbmcgYWNjb3JkaW5nCgktLSB0byAzR1BQIFRTIDIzLjAzMiBzaGFsbCBiZSB0cmVhdGVkIGFzIGludmFsaWQgZGF0YSBieSBhIHJlY2VpdmVyLgoJLS0KCS0tIEFuIEV4dC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbiBwYXJhbWV0ZXIgY29tcHJpc2luZyBvbmUgb2N0ZXQgc2hhbGwgYmUgZGlzY2FyZGVkCgktLSBieSB0aGUgcmVjZWl2ZXIgaWYgYW4gQWRkLUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uIHBhcmFtZXRlciBpcyByZWNlaXZlZCAKCS0tIGluIHRoZSBzYW1lIG1lc3NhZ2UuCgktLQoJLS0gQW4gRXh0LUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uIHBhcmFtZXRlciBjb21wcmlzaW5nIG9uZSBvY3RldCBzaGFsbCBiZSB0cmVhdGVkIGFzCgktLSBpbnZhbGlkIGRhdGEgYnkgdGhlIHJlY2VpdmVyIGlmIGFuIEFkZC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbiBwYXJhbWV0ZXIgaXMgbm90CgktLSByZWNlaXZlZCBpbiB0aGUgc2FtZSBtZXNzYWdlLgoKbWF4RXh0LUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uICBJTlRFR0VSIDo6PSAyMAoJLS0gdGhlIG1heGltdW0gbGVuZ3RoIGFsbG93cyBmb3IgZnVydGhlciBzaGFwZXMgaW4gM0dQUCBUUyAyMy4wMzIgdG8gYmUgaW5jbHVkZWQgaW4gbGF0ZXIgCgktLSB2ZXJzaW9ucyBvZiAzR1BQIFRTIDI5LjAwMgoKVmVsb2NpdHlFc3RpbWF0ZSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg0Li43KSkKCS0tIFJlZmVycyB0byBWZWxvY2l0eSBkZXNjcmlwdGlvbiBkZWZpbmVkIGluIDNHUFAgVFMgMjMuMDMyLgoJLS0gVGhpcyBpcyBjb21wb3NlZCBvZiA0IG9yIG1vcmUgb2N0ZXRzIHdpdGggYW4gaW50ZXJuYWwgc3RydWN0dXJlIGFjY29yZGluZyB0bwoJLS0gM0dQUCBUUyAyMy4wMzIKCS0tIE9jdGV0IDE6IFR5cGUgb2YgdmVsb2NpdHksIG9ubHkgdGhlIGZvbGxvd2luZyB0eXBlcyBpbiAzR1BQIFRTIDIzLjAzMiBhcmUgYWxsb3dlZDoKCS0tCQkoYSkgSG9yaXpvbnRhbCBWZWxvY2l0eQoJLS0JCShiKSBIb3Jpem9udGFsIHdpdGggVmVydGljYWwgVmVsb2NpdHkKCS0tCQkoYykgSG9yaXpvbnRhbCBWZWxvY2l0eSB3aXRoIFVuY2VydGFpbnR5CgktLQkJKGQpIEhvcml6b250YWwgd2l0aCBWZXJ0aWNhbCBWZWxvY2l0eSBhbmQgVW5jZXJ0YWludHkKCS0tIEZvciB0eXBlcyBIb3Jpem9udGFsIHdpdGggVmVydGljYWwgVmVsb2NpdHkgYW5kIEhvcml6b250YWwgd2l0aCBWZXJ0aWNhbCBWZWxvY2l0eQoJLS0gYW5kIFVuY2VydGFpbnR5LCB0aGUgZGlyZWN0aW9uIG9mIHRoZSBWZXJ0aWNhbCBTcGVlZCBpcyBhbHNvIGluY2x1ZGVkIGluIE9jdGV0IDEKCS0tIEFueSBvdGhlciB2YWx1ZSBpbiBvY3RldCAxIHNoYWxsIGJlIHRyZWF0ZWQgYXMgaW52YWxpZAoJLS0gT2N0ZXRzIDIgdG8gNCBmb3IgY2FzZSAoYSkgSG9yaXpvbnRhbCB2ZWxvY2l0eToKCS0tCQlCZWFyaW5nCQkJCTEgb2N0ZXQKCS0tCQlIb3Jpem9udGFsIFNwZWVkCQkJCTIgb2N0ZXRzCgktLSBPY3RldHMgMiB0byA1IGZvciBjYXNlIChiKSCWIEhvcml6b250YWwgd2l0aCBWZXJ0aWNhbCBWZWxvY2l0eToKCS0tCQlCZWFyaW5nCQkJCTEgb2N0ZXQKCS0tCQlIb3Jpem9udGFsIFNwZWVkCQkJCTIgb2N0ZXRzCgktLQkJVmVydGljYWwgU3BlZWQJCQkJMSBvY3RldAoJLS0gT2N0ZXRzIDIgdG8gNSBmb3IgY2FzZSAoYykgliBIb3Jpem9udGFsIHZlbG9jaXR5IHdpdGggVW5jZXJ0YWludHk6CgktLQkJQmVhcmluZwkJCQkxIG9jdGV0CgktLQkJSG9yaXpvbnRhbCBTcGVlZAkJCQkyIG9jdGV0cwoJLS0JCVVuY2VydGFpbnR5IFNwZWVkCQkJCTEgb2N0ZXQKCS0tIE9jdGV0cyAyIHRvIDcgZm9yIGNhc2UgKGQpIJYgSG9yaXpvbnRhbCB3aXRoIFZlcnRpY2FsIFZlbG9jaXR5IGFuZCBVbmNlcnRhaW50eToKCS0tCQlCZWFyaW5nCQkJCTEgb2N0ZXQKCS0tCQlIb3Jpem9udGFsIFNwZWVkCQkJCTIgb2N0ZXRzCgktLQkJVmVydGljYWwgU3BlZWQJCQkJMSBvY3RldAoJLS0JCUhvcml6b250YWwgVW5jZXJ0YWludHkgU3BlZWQJCQkxIG9jdGV0CgktLQkJVmVydGljYWwgVW5jZXJ0YWludHkgU3BlZWQJCQkJMSBvY3RldAoKUG9zaXRpb25pbmdEYXRhSW5mb3JtYXRpb24gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMi4ubWF4UG9zaXRpb25pbmdEYXRhSW5mb3JtYXRpb24pKQoJLS0gUmVmZXJzIHRvIHRoZSBQb3NpdGlvbmluZyBEYXRhIGRlZmluZWQgaW4gM0dQUCBUUyA0OS4wMzEuCgktLSBUaGlzIGlzIGNvbXBvc2VkIG9mIDIgb3IgbW9yZSBvY3RldHMgd2l0aCBhbiBpbnRlcm5hbCBzdHJ1Y3R1cmUgYWNjb3JkaW5nIHRvCgktLSAzR1BQIFRTIDQ5LjAzMS4gCgptYXhQb3NpdGlvbmluZ0RhdGFJbmZvcm1hdGlvbiBJTlRFR0VSIDo6PSAxMAoJLS0gCgpVdHJhblBvc2l0aW9uaW5nRGF0YUluZm8gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMy4ubWF4VXRyYW5Qb3NpdGlvbmluZ0RhdGFJbmZvKSkKCS0tIFJlZmVycyB0byB0aGUgUG9zaXRpb24gRGF0YSBkZWZpbmVkIGluIDNHUFAgVFMgMjUuNDEzLgoJLS0gVGhpcyBpcyBjb21wb3NlZCBvZiB0aGUgcG9zaXRpb25pbmdEYXRhRGlzY3JpbWluYXRvciBhbmQgdGhlIHBvc2l0aW9uaW5nRGF0YVNldAoJLS0gaW5jbHVkZWQgaW4gcG9zaXRpb25EYXRhIGFzIGRlZmluZWQgaW4gM0dQUCBUUyAyNS40MTMuCgptYXhVdHJhblBvc2l0aW9uaW5nRGF0YUluZm8gSU5URUdFUiA6Oj0gMTEKCS0tIAoKQWRkLUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLm1heEFkZC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbikpCgktLSBSZWZlcnMgdG8gZ2VvZ3JhcGhpY2FsIEluZm9ybWF0aW9uIGRlZmluZWQgaW4gM0dQUCBUUyAyMy4wMzIuCgktLSBUaGlzIGlzIGNvbXBvc2VkIG9mIDEgb3IgbW9yZSBvY3RldHMgd2l0aCBhbiBpbnRlcm5hbCBzdHJ1Y3R1cmUgYWNjb3JkaW5nIHRvIAoJLS0gM0dQUCBUUyAyMy4wMzIKCS0tIE9jdGV0IDE6IFR5cGUgb2Ygc2hhcGUsIGFsbCB0aGUgc2hhcGVzIGRlZmluZWQgaW4gM0dQUCBUUyAyMy4wMzIgYXJlIGFsbG93ZWQ6CgktLSBPY3RldHMgMiB0byBuICh3aGVyZSBuIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Ygb2N0ZXRzIG5lY2Vzc2FyeSB0byBlbmNvZGUgdGhlIHNoYXBlCgktLSBhY2NvcmRpbmcgdG8gM0dQUCBUUyAyMy4wMzIpIGFyZSB1c2VkIHRvIGVuY29kZSB0aGUgc2hhcGUgaXRzZWxmIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKCS0tIGVuY29kaW5nIGRlZmluZWQgaW4gM0dQUCBUUyAyMy4wMzIKCS0tCgktLSBBbiBBZGQtR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24gcGFyYW1ldGVyLCB3aGV0aGVyIHZhbGlkIG9yIGludmFsaWQsIHJlY2VpdmVkIAoJLS0gdG9nZXRoZXIgd2l0aCBhIHZhbGlkIEV4dC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbiBwYXJhbWV0ZXIgaW4gdGhlIHNhbWUgbWVzc2FnZSAKCS0tIHNoYWxsIGJlIGRpc2NhcmRlZC4KCS0tCgktLSBBbiBBZGQtR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24gcGFyYW1ldGVyIGNvbnRhaW5pbmcgYW55IHNoYXBlIG5vdCBkZWZpbmVkIGluIAoJLS0gM0dQUCBUUyAyMy4wMzIgb3IgYW4gaW5jb3JyZWN0IG51bWJlciBvZiBvY3RldHMgb3IgY29kaW5nIGFjY29yZGluZyB0byAKCS0tIDNHUFAgVFMgMjMuMDMyIHNoYWxsIGJlIHRyZWF0ZWQgYXMgaW52YWxpZCBkYXRhIGJ5IGEgcmVjZWl2ZXIgaWYgbm90IHJlY2VpdmVkIAoJLS0gdG9nZXRoZXIgd2l0aCBhIHZhbGlkIEV4dC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbiBwYXJhbWV0ZXIgaW4gdGhlIHNhbWUgbWVzc2FnZS4KCm1heEFkZC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbiAgSU5URUdFUiA6Oj0gOTEKCS0tIHRoZSBtYXhpbXVtIGxlbmd0aCBhbGxvd3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBzaGFwZXMgY3VycmVudGx5IGRlZmluZWQgaW4gM0dQUCBUUyAyMy4wMzIKClN1YnNjcmliZXJMb2NhdGlvblJlcG9ydC1BcmcgOjo9IFNFUVVFTkNFIHsKCWxjcy1FdmVudAkJTENTLUV2ZW50LAoJbGNzLUNsaWVudElECUxDUy1DbGllbnRJRCwgCglsY3NMb2NhdGlvbkluZm8JTENTTG9jYXRpb25JbmZvLAoJbXNpc2RuCQlbMF0gSVNETi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMLAoJaW1zaQkJCVsxXSBJTVNJCQlPUFRJT05BTCwKCWltZWkJCQlbMl0gSU1FSQkJT1BUSU9OQUwsCgluYS1FU1JECQlbM10gSVNETi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMLAoJbmEtRVNSSwkJWzRdIElTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKCWxvY2F0aW9uRXN0aW1hdGUJWzVdIEV4dC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbglPUFRJT05BTCwKCWFnZU9mTG9jYXRpb25Fc3RpbWF0ZQlbNl0gQWdlT2ZMb2NhdGlvbkluZm9ybWF0aW9uCU9QVElPTkFMLAoJc2xyLUFyZ0V4dGVuc2lvbkNvbnRhaW5lcglbN10gU0xSLUFyZ0V4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKCS4uLiAsCglhZGQtTG9jYXRpb25Fc3RpbWF0ZQlbOF0gQWRkLUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uCU9QVElPTkFMLAoJZGVmZXJyZWRtdC1sckRhdGEJWzldIERlZmVycmVkbXQtbHJEYXRhCU9QVElPTkFMLCAKCWxjcy1SZWZlcmVuY2VOdW1iZXIJWzEwXSBMQ1MtUmVmZXJlbmNlTnVtYmVyCU9QVElPTkFMLAoJZ2VyYW5Qb3NpdGlvbmluZ0RhdGEJWzExXSBQb3NpdGlvbmluZ0RhdGFJbmZvcm1hdGlvbglPUFRJT05BTCwKCXV0cmFuUG9zaXRpb25pbmdEYXRhCVsxMl0gVXRyYW5Qb3NpdGlvbmluZ0RhdGFJbmZvCU9QVElPTkFMLAoJY2VsbElkT3JTYWkJWzEzXQlDZWxsR2xvYmFsSWRPclNlcnZpY2VBcmVhSWRPckxBSQlPUFRJT05BTCwKCWgtZ21sYy1BZGRyZXNzCVsxNF0JR1NOLUFkZHJlc3MJT1BUSU9OQUwsCglsY3NTZXJ2aWNlVHlwZUlECVsxNV0JTENTU2VydmljZVR5cGVJRAlPUFRJT05BTCwKCXNhaS1QcmVzZW50CVsxN10gTlVMTAkJT1BUSU9OQUwsCglwc2V1ZG9ueW1JbmRpY2F0b3IJWzE4XSBOVUxMCQlPUFRJT05BTCwKCWFjY3VyYWN5RnVsZmlsbWVudEluZGljYXRvcglbMTldIEFjY3VyYWN5RnVsZmlsbWVudEluZGljYXRvcglPUFRJT05BTCwKCXZlbG9jaXR5RXN0aW1hdGUJWzIwXSBWZWxvY2l0eUVzdGltYXRlCU9QVElPTkFMLAoJc2VxdWVuY2VOdW1iZXIJWzIxXSBTZXF1ZW5jZU51bWJlcglPUFRJT05BTCwKCXBlcmlvZGljTERSSW5mbwlbMjJdIFBlcmlvZGljTERSSW5mbwlPUFRJT05BTCwKCW1vLWxyU2hvcnRDaXJjdWl0SW5kaWNhdG9yCVsyM10gTlVMTAkJT1BUSU9OQUwgfQoKCS0tIG9uZSBvZiBtc2lzZG4gb3IgaW1zaSBpcyBtYW5kYXRvcnkKCS0tIGEgbG9jYXRpb24gZXN0aW1hdGUgdGhhdCBpcyB2YWxpZCBmb3IgdGhlIGxvY2F0aW9uRXN0aW1hdGUgcGFyYW1ldGVyIHNob3VsZCAKCS0tIGJlIHRyYW5zZmVycmVkIGluIHRoaXMgcGFyYW1ldGVyIGluIHByZWZlcmVuY2UgdG8gdGhlIGFkZC1Mb2NhdGlvbkVzdGltYXRlLgoJLS0gdGhlIGRlZmVycmVkbXQtbHJEYXRhIHBhcmFtZXRlciBzaGFsbCBiZSBpbmNsdWRlZCBpZiBhbmQgb25seSBpZiB0aGUgbGNzLUV2ZW50CgktLSBpbmRpY2F0ZXMgYSBkZWZlcnJlZG10LWxyUmVzcG9uc2UuCgktLSBpZiB0aGUgbGNzLUV2ZW50IGluZGljYXRlcyBhIGRlZmVycmVkbXQtbHJSZXNwb25zZSB0aGVuIHRoZSBsb2NhdGlvbkVzdGltYXRlIAoJLS0gYW5kIHRoZSBhZGQtbG9jYXRpb25Fc3RpbWF0ZSBwYXJhbWV0ZXJzIHNoYWxsIG5vdCBiZSBzZW50IGlmIHRoZSAKCS0tIHN1cHBvcnRlZEdBRFNoYXBlcyBwYXJhbWV0ZXIgaGFkIGJlZW4gcmVjZWl2ZWQgaW4gUHJvdmlkZVN1YnNjcmliZXJMb2NhdGlvbi1BcmcKCS0tIGFuZCB0aGUgc2hhcGUgZW5jb2RlZCBpbiBsb2NhdGlvbkVzdGltYXRlIG9yIGFkZC1Mb2NhdGlvbkVzdGltYXRlIHdhcyBub3QgbWFya2VkCgktLSBhcyBzdXBwb3J0ZWQgaW4gc3VwcG9ydGVkR0FEU2hhcGVzLiBJbiBzdWNoIGEgY2FzZSB0ZXJtaW5hdGlvbkNhdXNlIAoJLS0gaW4gZGVmZXJyZWRtdC1sckRhdGEgc2hhbGwgYmUgcHJlc2VudCB3aXRoIHZhbHVlIAoJLS0gc2hhcGVPZkxvY2F0aW9uRXN0aW1hdGVOb3RTdXBwb3J0ZWQuIAoJLS0gSWYgYSBsY3MgZXZlbnQgaW5kaWNhdGVzIGRlZmVycmVkIG10LWxyIHJlc3BvbnNlLCB0aGUgbGNzLVJlZmVyZW5jZSBudW1iZXIgc2hhbGwgYmUgCgktLSBpbmNsdWRlZC4gCgktLSBzYWktUHJlc2VudCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2VsbElkT3JTYWkgcGFyYW1ldGVyIGNvbnRhaW5zIGEgU2VydmljZSBBcmVhIElkZW50aXR5LgoKRGVmZXJyZWRtdC1sckRhdGEgOjo9IFNFUVVFTkNFIHsKCWRlZmVycmVkTG9jYXRpb25FdmVudFR5cGUJRGVmZXJyZWRMb2NhdGlvbkV2ZW50VHlwZSwKCXRlcm1pbmF0aW9uQ2F1c2UJWzBdIFRlcm1pbmF0aW9uQ2F1c2UJT1BUSU9OQUwsCglsY3NMb2NhdGlvbkluZm8JWzFdIExDU0xvY2F0aW9uSW5mbwlPUFRJT05BTCwKCS4uLn0KCS0tIGxjc0xvY2F0aW9uSW5mbyBtYXkgYmUgaW5jbHVkZWQgb25seSBpZiBhIHRlcm1pbmF0aW9uQ2F1c2UgaXMgcHJlc2VudCAKCS0tIGluZGljYXRpbmcgbXQtbHJSZXN0YXJ0LgoKTENTLUV2ZW50IDo6PSBFTlVNRVJBVEVEIHsKCWVtZXJnZW5jeUNhbGxPcmlnaW5hdGlvbiAgKDApLAoJZW1lcmdlbmN5Q2FsbFJlbGVhc2UgICgxKSwgCgltby1sciAgKDIpLAoJLi4uLAoJZGVmZXJyZWRtdC1sclJlc3BvbnNlICAoMykgLAoJZGVmZXJyZWRtby1sclRUVFBJbml0aWF0aW9uICAoNCkgIH0KCS0tCWRlZmVycmVkbXQtbHJSZXNwb25zZSBpcyBhcHBsaWNhYmxlIHRvIHRoZSBkZWxpdmVyeSBvZiBhIGxvY2F0aW9uIGVzdGltYXRlIAoJLS0JZm9yIGFuIExEUiBpbml0aWF0ZWQgZWFybGllciBieSBlaXRoZXIgdGhlIG5ldHdvcmsgKHZpYSBhbiBNVC1MUiBhY3RpdmF0ZSBkZWZlcnJlZCAKCS0tCWxvY2F0aW9uKSBvciB0aGUgVUUgKHZpYSBhIGRlZmVycmVkIE1PLUxSIFRUVFAgaW5pdGlhdGlvbikKCS0tCWV4Y2VwdGlvbiBoYW5kbGluZzoKCS0tCWEgU3Vic2NyaWJlckxvY2F0aW9uUmVwb3J0LUFyZyBjb250YWluaW5nIGFuIHVucmVjb2duaXplZCBMQ1MtRXZlbnQKCS0tCXNoYWxsIGJlIHJlamVjdGVkIGJ5IGEgcmVjZWl2ZXIgd2l0aCBhIHJldHVybiBlcnJvciBjYXVzZSBvZiB1bmV4cGVjdGVkIGRhdGEgdmFsdWUKClRlcm1pbmF0aW9uQ2F1c2UgOjo9IEVOVU1FUkFURUQgewoJbm9ybWFsICAoMCksCgllcnJvcnVuZGVmaW5lZCAgKDEpLAoJaW50ZXJuYWxUaW1lb3V0ICAoMiksCgljb25nZXN0aW9uICAoMyksCgltdC1sclJlc3RhcnQgICg0KSwKCXByaXZhY3lWaW9sYXRpb24gICg1KSwKCS4uLiwKCXNoYXBlT2ZMb2NhdGlvbkVzdGltYXRlTm90U3VwcG9ydGVkICg2KSAsCglzdWJzY3JpYmVyVGVybWluYXRpb24gKDcpLAoJdUVUZXJtaW5hdGlvbiAoOCksCgluZXR3b3JrVGVybWluYXRpb24gKDkpICB9IAotLSBtdC1sclJlc3RhcnQgc2hhbGwgYmUgdXNlZCB0byB0cmlnZ2VyIHRoZSBHTUxDIHRvIHJlc3RhcnQgdGhlIGxvY2F0aW9uIHByb2NlZHVyZSwgCi0tIGVpdGhlciBiZWNhdXNlIHRoZSBzZW5kaW5nIG5vZGUga25vd3MgdGhhdCB0aGUgdGVybWluYWwgaGFzIG1vdmVkIHVuZGVyIGNvdmVyYWdlIAotLSBvZiBhbm90aGVyIE1TQyBvciBTR1NOIChlLmcuIFNlbmQgSWRlbnRpZmljYXRpb24gcmVjZWl2ZWQpLCBvciBiZWNhdXNlIHRoZSBzdWJzY3JpYmVyCi0tIGhhcyBiZWVuIGRlcmVnaXN0ZXJlZCBkdWUgdG8gYSBDYW5jZWwgTG9jYXRpb24gcmVjZWl2ZWQgZnJvbSBITFIuCi0tCi0tIGV4Y2VwdGlvbiBoYW5kbGluZwotLSBhbiB1bnJlY29nbml6ZWQgdmFsdWUgc2hhbGwgYmUgdHJlYXRlZCB0aGUgc2FtZSBhcyB2YWx1ZSAxIChlcnJvcnVuZGVmaW5lZCkgCgpTZXF1ZW5jZU51bWJlciA6Oj0gSU5URUdFUiAoMS4ubWF4UmVwb3J0aW5nQW1vdW50KQoKU3Vic2NyaWJlckxvY2F0aW9uUmVwb3J0LVJlcyA6Oj0gU0VRVUVOQ0UgewoJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwgCgkuLi4sIAoJbmEtRVNSSwkJWzBdIElTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKCW5hLUVTUkQJCVsxXSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCgloLWdtbGMtQWRkcmVzcwlbMl0JR1NOLUFkZHJlc3MJT1BUSU9OQUwsCgltby1sclNob3J0Q2lyY3VpdEluZGljYXRvcglbM10gTlVMTAkJT1BUSU9OQUwsCglyZXBvcnRpbmdQTE1OTGlzdAlbNF0gUmVwb3J0aW5nUExNTkxpc3QJT1BUSU9OQUwsCglsY3MtUmVmZXJlbmNlTnVtYmVyCVs1XQlMQ1MtUmVmZXJlbmNlTnVtYmVyCU9QVElPTkFMIH0KCi0tIG5hLUVTUksgYW5kIG5hLUVTUkQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQotLQotLSBleGNlcHRpb24gaGFuZGxpbmcKLS0gcmVjZWlwdCBvZiBib3RoIG5hLUVTUksgYW5kIG5hLUVTUkQgc2hhbGwgYmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBhIHJldHVybiBlcnJvcgoKCkVORAoK