Km1sYW5nLnR4dCogICAgIEZvciBWaW0gdmVyc2lvbiA3LjBkLiAgTGFzdCBjaGFuZ2U6IDIwMDQgRmViIDI0CgoKCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCgoKTXVsdGktbGFuZ3VhZ2UgZmVhdHVyZXMJCQkJKm11bHRpbGFuZyogKm11bHRpLWxhbmcqCgpUaGlzIGlzIGFib3V0IHVzaW5nIG1lc3NhZ2VzIGFuZCBtZW51cyBpbiB2YXJpb3VzIGxhbmd1YWdlcy4gIEZvciBlZGl0aW5nCm11bHRpLWJ5dGUgdGV4dCBzZWUgfG11bHRpYnl0ZXwuCgpUaGUgYmFzaWNzIGFyZSBleHBsYWluZWQgaW4gdGhlIHVzZXIgbWFudWFsOiB8dXNyXzQ1LnR4dHwuCgoxLiBNZXNzYWdlcwkJCXxtdWx0aWxhbmctbWVzc2FnZXN8CjIuIE1lbnVzCQkJfG11bHRpbGFuZy1tZW51c3wKMy4gU2NyaXB0cwkJCXxtdWx0aWxhbmctc2NyaXB0c3wKCkFsc28gc2VlIHxoZWxwLXRyYW5zbGF0ZWR8IGZvciBtdWx0aS1sYW5ndWFnZSBoZWxwLgoKe1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGZlYXR1cmVzfQp7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrbXVsdGlfbGFuZ3wgZmVhdHVyZX0KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBNZXNzYWdlcwkJCQkJCSptdWx0aWxhbmctbWVzc2FnZXMqCgpWaW0gcGlja3MgdXAgdGhlIGxvY2FsZSBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIEluIG1vc3QgY2FzZXMgdGhpcyBtZWFucyBWaW0Kd2lsbCB1c2UgdGhlIGxhbmd1YWdlIHRoYXQgeW91IHByZWZlciwgdW5sZXNzIGl0J3Mgbm90IGF2YWlsYWJsZS4KClRvIHNlZSBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGxvY2FsZSBuYW1lcyBvbiB5b3VyIHN5c3RlbSwgbG9vayBpbiBvbmUgb2YgdGhlc2UKZGlyZWN0b3JpZXMgKGZvciBVbml4KToKCS91c3IvbGliL2xvY2FsZSB+CgkvdXNyL3NoYXJlL2xvY2FsZSB+ClVuZm9ydHVuYXRlbHksIHVwcGVyL2xvd2VyY2FzZSBkaWZmZXJlbmNlcyBtYXR0ZXIuICBBbHNvIHdhdGNoIG91dCBmb3IgdGhlCnVzZSBvZiAiLSIgYW5kICJfIi4KCgkJCQkJICAgICo6bGFuKiAqOmxhbmcqICo6bGFuZ3VhZ2UqICpFMTk3Kgo6bGFuW2d1YWdlXQo6bGFuW2d1YWdlXSBtZXNbc2FnZXNdCjpsYW5bZ3VhZ2VdIGN0eVtwZV0KOmxhbltndWFnZV0gdGltW2VdCgkJCVByaW50IHRoZSBjdXJyZW50IGxhbmd1YWdlIChha2EgbG9jYWxlKS4KCQkJV2l0aCB0aGUgIm1lc3NhZ2VzIiBhcmd1bWVudCB0aGUgbGFuZ3VhZ2UgdXNlZCBmb3IKCQkJbWVzc2FnZXMgaXMgcHJpbnRlZC4gIFRlY2huaWNhbDogTENfTUVTU0FHRVMuCgkJCVdpdGggdGhlICJjdHlwZSIgYXJndW1lbnQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yCgkJCWNoYXJhY3RlciBlbmNvZGluZyBpcyBwcmludGVkLiAgVGVjaG5pY2FsOiBMQ19DVFlQRS4KCQkJV2l0aCB0aGUgInRpbWUiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvcgoJCQlzdHJmdGltZSgpIGlzIHByaW50ZWQuICBUZWNobmljYWw6IExDX1RJTUUuCgkJCVdpdGhvdXQgYXJndW1lbnQgYWxsIHBhcnRzIG9mIHRoZSBsb2NhbGUgYXJlIHByaW50ZWQKCQkJKHRoaXMgaXMgc3lzdGVtIGRlcGVuZGVudCkuCgkJCVRoZSBjdXJyZW50IGxhbmd1YWdlIGNhbiBhbHNvIGJlIG9idGFpbmVkIHdpdGggdGhlCgkJCXx2Omxhbmd8LCB8djpjdHlwZXwgYW5kIHx2OmxjX3RpbWV8IHZhcmlhYmxlcy4KCjpsYW5bZ3VhZ2VdIHtuYW1lfQo6bGFuW2d1YWdlXSBtZXNbc2FnZXNdIHtuYW1lfQo6bGFuW2d1YWdlXSBjdHlbcGVdIHtuYW1lfQo6bGFuW2d1YWdlXSB0aW1bZV0ge25hbWV9CgkJCVNldCB0aGUgY3VycmVudCBsYW5ndWFnZSAoYWthIGxvY2FsZSkgdG8ge25hbWV9LgoJCQlUaGUgbG9jYWxlIHtuYW1lfSBtdXN0IGJlIGEgdmFsaWQgbG9jYWxlIG9uIHlvdXIKCQkJc3lzdGVtLiAgU29tZSBzeXN0ZW1zIGFjY2VwdCBhbGlhc2VzIGxpa2UgImVuIiBvcgoJCQkiZW5fVVMiLCBidXQgc29tZSBvbmx5IGFjY2VwdCB0aGUgZnVsbCBzcGVjaWZpY2F0aW9uCgkJCWxpa2UgImVuX1VTLklTT184ODU5LTEiLgoJCQlXaXRoIHRoZSAibWVzc2FnZXMiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvcgoJCQltZXNzYWdlcyBpcyBzZXQuICBUaGlzIGNhbiBiZSBkaWZmZXJlbnQgd2hlbiB5b3Ugd2FudCwKCQkJZm9yIGV4YW1wbGUsIEVuZ2xpc2ggbWVzc2FnZXMgd2hpbGUgZWRpdGluZyBKYXBhbmVzZQoJCQl0ZXh0LiAgVGhpcyBzZXRzICRMQ19NRVNTQUdFUy4KCQkJV2l0aCB0aGUgImN0eXBlIiBhcmd1bWVudCB0aGUgbGFuZ3VhZ2UgdXNlZCBmb3IKCQkJY2hhcmFjdGVyIGVuY29kaW5nIGlzIHNldC4gIFRoaXMgYWZmZWN0cyB0aGUgbGlicmFyaWVzCgkJCXRoYXQgVmltIHdhcyBsaW5rZWQgd2l0aC4gIEl0J3MgdW51c3VhbCB0byBzZXQgdGhpcyB0bwoJCQlhIGRpZmZlcmVudCB2YWx1ZSBmcm9tICdlbmNvZGluZycuICBUaGlzIHNldHMKCQkJJExDX0NUWVBFLgoJCQlXaXRoIHRoZSAidGltZSIgYXJndW1lbnQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yIHRpbWUKCQkJYW5kIGRhdGUgbWVzc2FnZXMgaXMgc2V0LiAgVGhpcyBhZmZlY3RzIHN0cmZ0aW1lKCkuCgkJCVRoaXMgc2V0cyAkTENfVElNRS4KCQkJV2l0aG91dCBhbiBhcmd1bWVudCBib3RoIGFyZSBzZXQsIGFuZCBhZGRpdGlvbmFsbHkKCQkJJExBTkcgaXMgc2V0LgoJCQlUaGlzIHdpbGwgbWFrZSBhIGRpZmZlcmVuY2UgZm9yIGl0ZW1zIHRoYXQgZGVwZW5kIG9uCgkJCXRoZSBsYW5ndWFnZSAoc29tZSBtZXNzYWdlcywgdGltZSBhbmQgZGF0ZSBmb3JtYXQpLgoJCQlOb3QgZnVsbHkgc3VwcG9ydGVkIG9uIGFsbCBzeXN0ZW1zCgkJCUlmIHRoaXMgZmFpbHMgdGhlcmUgd2lsbCBiZSBhbiBlcnJvciBtZXNzYWdlLiAgSWYgaXQKCQkJc3VjY2VlZHMgdGhlcmUgaXMgbm8gbWVzc2FnZS4gIEV4YW1wbGU6ID4KCQkJCTpsYW5ndWFnZQoJCQkJQ3VycmVudCBsYW5ndWFnZTogQwoJCQkJOmxhbmd1YWdlIGRlX0RFLklTT184ODU5LTEKCQkJCTpsYW5ndWFnZSBtZXMKCQkJCUN1cnJlbnQgbWVzc2FnZXMgbGFuZ3VhZ2U6IGRlX0RFLklTT184ODU5LTEKCQkJCTpsYW5nIG1lcyBlbgo8CgpNUy1XSU5ET1dTIE1FU1NBR0UgVFJBTlNMQVRJT05TCQkJCSp3aW4zMi1nZXR0ZXh0KgoKSWYgeW91IHVzZWQgdGhlIHNlbGYtaW5zdGFsbGluZyAuZXhlIGZpbGUsIG1lc3NhZ2UgdHJhbnNsYXRpb25zIHNob3VsZCB3b3JrCmFscmVhZHkuICBPdGhlcndpc2UgZ2V0IHRoZSBsaWJpbnRsLmRsbCBmaWxlIGlmIHlvdSBkb24ndCBoYXZlIGl0IHlldDoKCglodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dldHRleHQKClRoaXMgYWxzbyBjb250YWlucyB0b29scyB4Z2V0dGV4dCwgbXNnZm9ybWF0IGFuZCBvdGhlcnMuCgpsaWJpbnRsLmRsbCBzaG91bGQgYmUgcGxhY2VkIGluIHNhbWUgZGlyZWN0b3J5IHdpdGggKGcpdmltLmV4ZSwgb3Igc29tZQpwbGFjZSB3aGVyZSBQQVRIIGVudmlyb25tZW50IHZhbHVlIGRlc2NyaWJlLiAgTWVzc2FnZSBmaWxlcyAodmltLm1vKQpoYXZlIHRvIGJlIHBsYWNlZCBpbiAiJFZJTVJVTlRJTUUvbGFuZy94eC9MQ19NRVNTQUdFUyIsIHdoZXJlICJ4eCIgaXMgdGhlCmFiYnJldmlhdGlvbiBvZiB0aGUgbGFuZ3VhZ2UgKG1vc3RseSB0d28gbGV0dGVycykuCgpJZiB5b3Ugd3JpdGUgeW91ciBvd24gdHJhbnNsYXRpb25zIHlvdSBuZWVkIHRvIGdlbmVyYXRlIHRoZSAucG8gZmlsZSBhbmQKY29udmVydCBpdCB0byBhIC5tbyBmaWxlLiAgWW91IG5lZWQgdG8gZ2V0IHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIGFuZCByZWFkCnRoZSBmaWxlICJzcmMvcG8vUkVBRE1FLnR4dCIuCgpUbyBvdmVycnVsZSB0aGUgYXV0b21hdGljIGNob2ljZSBvZiB0aGUgbGFuZ3VhZ2UsIHNldCB0aGUgJExBTkcgdmFyaWFibGUgdG8KdGhlIGxhbmd1YWdlIG9mIHlvdXIgY2hvaWNlLiAgdXNlICJlbiIgdG8gZGlzYWJsZSB0cmFuc2xhdGlvbnMuID4KCiAgOmxldCAkTEFORyA9ICdqYScKCih0ZXh0IGZvciBXaW5kb3dzIGJ5IE11cmFva2EgVGFybykKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBNZW51cwkJCQkJCSptdWx0aWxhbmctbWVudXMqCgpTZWUgfDQ1LjJ8IGZvciB0aGUgYmFzaWNzLgoKTm90ZSB0aGF0IGlmIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIG1lbnVzIGFmdGVyIHRoZSB0cmFuc2xhdGlvbiB3YXMKZG9uZSwgc29tZSBvZiB0aGUgbWVudXMgbWF5IGJlIHNob3duIGluIEVuZ2xpc2guICBQbGVhc2UgdHJ5IGNvbnRhY3RpbmcgdGhlCm1haW50YWluZXIgb2YgdGhlIHRyYW5zbGF0aW9uIGFuZCBhc2sgaGltIHRvIHVwZGF0ZSBpdC4gIFlvdSBjYW4gZmluZCB0aGUKbmFtZSBhbmQgZS1tYWlsIGFkZHJlc3Mgb2YgdGhlIHRyYW5zbGF0b3IgaW4KIiRWSU1SVU5USU1FL2xhbmcvbWVudV88bGFuZz4udmltIi4KClRvIHNldCB0aGUgZm9udCAob3IgZm9udHNldCkgdG8gdXNlIGZvciB0aGUgbWVudXMsIHVzZSB0aGUgfDpoaWdobGlnaHR8CmNvbW1hbmQuICBFeGFtcGxlOiA+CgoJOmhpZ2hsaWdodCBNZW51IGZvbnQ9azEyLHIxMgoKCkFMSUFTIExPQ0FMRSBOQU1FUwoKVW5mb3J0dW5hdGVseSwgdGhlIGxvY2FsZSBuYW1lcyBhcmUgZGlmZmVyZW50IG9uIHZhcmlvdXMgc3lzdGVtcywgZXZlbiB0aG91Z2gKdGhleSBhcmUgZm9yIHRoZSBzYW1lIGxhbmd1YWdlIGFuZCBlbmNvZGluZy4gIElmIHlvdSBkbyBub3QgZ2V0IHRoZSBtZW51CnRyYW5zbGF0aW9ucyB5b3UgZXhwZWN0ZWQsIGNoZWNrIHRoZSBvdXRwdXQgb2YgdGhpcyBjb21tYW5kOiA+CgoJZWNobyB2OmxhbmcKCk5vdyBjaGVjayB0aGUgIiRWSU1SVU5USU1FL2xhbmciIGRpcmVjdG9yeSBmb3IgbWVudSB0cmFuc2xhdGlvbiBmaWxlcyB0aGF0IHVzZQphIHNpbWlsYXIgbGFuZ3VhZ2UuICBBIGRpZmZlcmVuY2UgaW4gYSAiLSIgYmVpbmcgYSAiXyIgYWxyZWFkeSBjYXVzZXMgYSBmaWxlCm5vdCB0byBiZSBmb3VuZCEgIEFub3RoZXIgY29tbW9uIGRpZmZlcmVuY2UgdG8gd2F0Y2ggb3V0IGZvciBpcyAiaXNvODg1OS0xIgp2ZXJzdXMgImlzb184ODU5LTEiLiAgRm9ydHVuYXRlbHkgVmltIG1ha2VzIGFsbCBuYW1lcyBsb3dlcmNhc2UsIHRodXMgeW91CmRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgY2FzZSBkaWZmZXJlbmNlcy4gIFNwYWNlcyBhcmUgY2hhbmdlZCB0bwp1bmRlcnNjb3JlcywgdG8gYXZvaWQgaGF2aW5nIHRvIGVzY2FwZSB0aGVtLgoKSWYgeW91IGZpbmQgYSBtZW51IHRyYW5zbGF0aW9uIGZpbGUgZm9yIHlvdXIgbGFuZ3VhZ2Ugd2l0aCBhIGRpZmZlcmVudCBuYW1lLApjcmVhdGUgYSBmaWxlIGluIHlvdXIgb3duIHJ1bnRpbWUgZGlyZWN0b3J5IHRvIGxvYWQgdGhhdCBvbmUuICBUaGUgbmFtZSBvZgp0aGF0IGZpbGUgY291bGQgYmU6ID4KCgl+Ly52aW0vbGFuZy9tZW51Xzx2Omxhbmc+LnZpbQoKQ2hlY2sgdGhlICdydW50aW1lcGF0aCcgb3B0aW9uIGZvciBkaXJlY3RvcmllcyB3aGljaCBhcmUgc2VhcmNoZWQuICBJbiB0aGF0CmZpbGUgcHV0IGEgY29tbWFuZCB0byBsb2FkIHRoZSBtZW51IGZpbGUgd2l0aCB0aGUgb3RoZXIgbmFtZTogPgoKCXJ1bnRpbWUgbGFuZy9tZW51XzxvdGhlcl9sYW5nPi52aW0KCgpUUkFOU0xBVElORyBNRU5VUwoKSWYgeW91IHdhbnQgdG8gZG8geW91ciBvd24gdHJhbnNsYXRpb25zLCB5b3UgY2FuIHVzZSB0aGUgfDptZW51dHJhbnN8IGNvbW1hbmQsCmV4cGxhaW5lZCBiZWxvdy4gIEl0IGlzIHJlY29tbWVuZGVkIHRvIHB1dCB0aGUgdHJhbnNsYXRpb25zIGZvciBvbmUgbGFuZ3VhZ2UKaW4gYSBWaW0gc2NyaXB0LiAgRm9yIGEgbGFuZ3VhZ2UgdGhhdCBoYXMgbm8gdHJhbnNsYXRpb24geWV0LCBwbGVhc2UgY29uc2lkZXIKYmVjb21pbmcgdGhlIG1haW50YWluZXIgYW5kIG1ha2UgeW91ciB0cmFuc2xhdGlvbnMgYXZhaWxhYmxlIHRvIGFsbCBWaW0gdXNlcnMuClNlbmQgYW4gZS1tYWlsIHRvIHRoZSBWaW0gbWFpbnRhaW5lciA8bWFpbnRhaW5lckB2aW0ub3JnPi4KCgkJCQkJKjptZW51dCogKjptZW51dHJhbnMqICo6bWVudXRyYW5zbGF0ZSoKOm1lbnV0W3JhbnNsYXRlXSBjbGVhcgoJCQlDbGVhciBhbGwgbWVudSB0cmFuc2xhdGlvbnMuCgo6bWVudXRbcmFuc2xhdGVdIHtlbmdsaXNofSB7bXlsYW5nfQoJCQlUcmFuc2xhdGUgbWVudSBuYW1lIHtlbmdsaXNofSB0byB7bXlsYW5nfS4gIEFsbAoJCQlzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSAiJiIgYW5kICI8VGFiPiIgbmVlZCB0byBiZQoJCQlpbmNsdWRlZC4gIFNwYWNlcyBhbmQgZG90cyBuZWVkIHRvIGJlIGVzY2FwZWQgd2l0aCBhCgkJCWJhY2tzbGFzaCwganVzdCBsaWtlIGluIG90aGVyIHw6bWVudXwgY29tbWFuZHMuCgpTZWUgdGhlICRWSU1SVU5USU1FL2xhbmcgZGlyZWN0b3J5IGZvciBleGFtcGxlcy4KClRvIHRyeSBvdXQgeW91ciB0cmFuc2xhdGlvbnMgeW91IGZpcnN0IGhhdmUgdG8gcmVtb3ZlIGFsbCBtZW51cy4gIFRoaXMgaXMgaG93CnlvdSBjYW4gZG8gaXQgd2l0aG91dCByZXN0YXJ0aW5nIFZpbTogPgoJOnNvdXJjZSAkVklNUlVOVElNRS9kZWxtZW51LnZpbQoJOnNvdXJjZSA8eW91ci1uZXctbWVudS1maWxlPgoJOnNvdXJjZSAkVklNUlVOVElNRS9tZW51LnZpbQoKRWFjaCBwYXJ0IG9mIGEgbWVudSBwYXRoIGlzIHRyYW5zbGF0ZWQgc2VwYXJhdGVseS4gIFRoZSByZXN1bHQgaXMgdGhhdCB3aGVuCiJIZWxwIiBpcyB0cmFuc2xhdGVkIHRvICJIaWxmZSIgYW5kICJPdmVydmlldyIgdG8gItxiZXJibGljayIgdGhlbgoiSGVscC5PdmVydmlldyIgd2lsbCBiZSB0cmFuc2xhdGVkIHRvICJIaWxmZS7cYmVyYmxpY2siLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFNjcmlwdHMJCQkJCQkqbXVsdGlsYW5nLXNjcmlwdHMqCgpJbiBWaW0gc2NyaXB0cyB5b3UgY2FuIHVzZSB0aGUgfHY6bGFuZ3wgdmFyaWFibGUgdG8gZ2V0IHRoZSBjdXJyZW50IGxhbmd1YWdlCihsb2NhbGUpLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgIkMiIG9yIGNvbWVzIGZyb20gdGhlICRMQU5HIGVudmlyb25tZW50CnZhcmlhYmxlLgoKVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gYSBzaW1wbGUgd2F5LCB0byBtYWtlCmEgbWVzc2FnZSBhZGFwdCB0byBsYW5ndWFnZSBwcmVmZXJlbmNlcyBvZiB0aGUgdXNlciwgPgoKCTppZiB2OmxhbmcgPX4gImRlX0RFIgoJOiAgZWNobyAiR3V0ZW4gTW9yZ2VuIgoJOmVsc2UKCTogIGVjaG8gIkdvb2QgbW9ybmluZyIKCTplbmRpZgo8CgogdmltOnR3PTc4OnN3PTQ6dHM9ODpmdD1oZWxwOm5vcmw6Cg==