REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 57.29 KB
Close
//opt/cloudlinux/venv/lib/python3.11/site-packages/sqlalchemy/__pycache__/events.cpython-311.pyc
Text
Base64
pw0NCgAAAAC7fG9pfdEAAOMAAAAAAAAAAAAAAAAFAAAAAAAAAPMCAQAAlwBkAFoAZAFkAmwBbQJaAgEAZAFkA2wBbQNaAwEAZAFkBGwBbQRaBAEAZAFkBWwFbQZaBgEAZAFkBmwFbQdaBwEAZAFkB2wFbQhaCAEAZAFkCGwJbQpaCgEAZAFkCWwLbQxaDAEAAgBHAGQKhABkC2UCag0AAAAAAAAAAKYDAACrAwAAAAAAAAAAWg4CAEcAZAyEAGQNZQJqDQAAAAAAAAAApgMAAKsDAAAAAAAAAABaDwIARwBkDoQAZA9lAmoNAAAAAAAAAACmAwAAqwMAAAAAAAAAAFoQAgBHAGQQhABkEWUCag0AAAAAAAAAAKYDAACrAwAAAAAAAAAAWhFkElMAKRN6FkNvcmUgZXZlbnQgaW50ZXJmYWNlcy7pAQAAACkB2gVldmVudCkB2gNleGMpAdoEdXRpbCkB2gtDb25uZWN0YWJsZSkB2gdEaWFsZWN0KQHaBkVuZ2luZSkB2gRQb29sKQHaEVNjaGVtYUV2ZW50VGFyZ2V0YwAAAAAAAAAAAAAAAAEAAAAAAAAA80oAAACXAGUAWgFkAFoCZAFaA2QCWgRlBVoGZAOEAFoHZASEAFoIZAWEAFoJZAaEAFoKZAeEAFoLZAiEAFoMZAmEAFoNZAqEAFoOZAtTACkM2glERExFdmVudHNhwQkAAAogICAgRGVmaW5lIGV2ZW50IGxpc3RlbmVycyBmb3Igc2NoZW1hIG9iamVjdHMsCiAgICB0aGF0IGlzLCA6Y2xhc3M6YC5TY2hlbWFJdGVtYCBhbmQgb3RoZXIgOmNsYXNzOmAuU2NoZW1hRXZlbnRUYXJnZXRgCiAgICBzdWJjbGFzc2VzLCBpbmNsdWRpbmcgOmNsYXNzOmBfc2NoZW1hLk1ldGFEYXRhYCwgOmNsYXNzOmBfc2NoZW1hLlRhYmxlYCwKICAgIDpjbGFzczpgX3NjaGVtYS5Db2x1bW5gLgoKICAgIDpjbGFzczpgX3NjaGVtYS5NZXRhRGF0YWAgYW5kIDpjbGFzczpgX3NjaGVtYS5UYWJsZWAgc3VwcG9ydCBldmVudHMKICAgIHNwZWNpZmljYWxseSByZWdhcmRpbmcgd2hlbiBDUkVBVEUgYW5kIERST1AKICAgIERETCBpcyBlbWl0dGVkIHRvIHRoZSBkYXRhYmFzZS4KCiAgICBBdHRhY2htZW50IGV2ZW50cyBhcmUgYWxzbyBwcm92aWRlZCB0byBjdXN0b21pemUKICAgIGJlaGF2aW9yIHdoZW5ldmVyIGEgY2hpbGQgc2NoZW1hIGVsZW1lbnQgaXMgYXNzb2NpYXRlZAogICAgd2l0aCBhIHBhcmVudCwgc3VjaCBhcywgd2hlbiBhIDpjbGFzczpgX3NjaGVtYS5Db2x1bW5gIGlzIGFzc29jaWF0ZWQKICAgIHdpdGggaXRzIDpjbGFzczpgX3NjaGVtYS5UYWJsZWAsIHdoZW4gYQogICAgOmNsYXNzOmBfc2NoZW1hLkZvcmVpZ25LZXlDb25zdHJhaW50YAogICAgaXMgYXNzb2NpYXRlZCB3aXRoIGEgOmNsYXNzOmBfc2NoZW1hLlRhYmxlYCwgZXRjLgoKICAgIEV4YW1wbGUgdXNpbmcgdGhlIGBgYWZ0ZXJfY3JlYXRlYGAgZXZlbnQ6OgoKICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IGV2ZW50CiAgICAgICAgZnJvbSBzcWxhbGNoZW15IGltcG9ydCBUYWJsZSwgQ29sdW1uLCBNZXRhZGF0YSwgSW50ZWdlcgoKICAgICAgICBtID0gTWV0YURhdGEoKQogICAgICAgIHNvbWVfdGFibGUgPSBUYWJsZSgnc29tZV90YWJsZScsIG0sIENvbHVtbignZGF0YScsIEludGVnZXIpKQoKICAgICAgICBkZWYgYWZ0ZXJfY3JlYXRlKHRhcmdldCwgY29ubmVjdGlvbiwgKiprdyk6CiAgICAgICAgICAgIGNvbm5lY3Rpb24uZXhlY3V0ZSgiQUxURVIgVEFCTEUgJXMgU0VUIG5hbWU9Zm9vXyVzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YXJnZXQubmFtZSwgdGFyZ2V0Lm5hbWUpKQoKICAgICAgICBldmVudC5saXN0ZW4oc29tZV90YWJsZSwgImFmdGVyX2NyZWF0ZSIsIGFmdGVyX2NyZWF0ZSkKCiAgICBEREwgZXZlbnRzIGludGVncmF0ZSBjbG9zZWx5IHdpdGggdGhlCiAgICA6Y2xhc3M6YC5ERExgIGNsYXNzIGFuZCB0aGUgOmNsYXNzOmAuRERMRWxlbWVudGAgaGllcmFyY2h5CiAgICBvZiBEREwgY2xhdXNlIGNvbnN0cnVjdHMsIHdoaWNoIGFyZSB0aGVtc2VsdmVzIGFwcHJvcHJpYXRlCiAgICBhcyBsaXN0ZW5lciBjYWxsYWJsZXM6OgoKICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IERETAogICAgICAgIGV2ZW50Lmxpc3RlbigKICAgICAgICAgICAgc29tZV90YWJsZSwKICAgICAgICAgICAgImFmdGVyX2NyZWF0ZSIsCiAgICAgICAgICAgIERETCgiQUxURVIgVEFCTEUgJSh0YWJsZSlzIFNFVCBuYW1lPWZvb18lKHRhYmxlKXMiKQogICAgICAgICkKCiAgICBUaGUgbWV0aG9kcyBoZXJlIGRlZmluZSB0aGUgbmFtZSBvZiBhbiBldmVudCBhcyB3ZWxsCiAgICBhcyB0aGUgbmFtZXMgb2YgbWVtYmVycyB0aGF0IGFyZSBwYXNzZWQgdG8gbGlzdGVuZXIKICAgIGZ1bmN0aW9ucy4KCiAgICBGb3IgYWxsIDpjbGFzczpgLkRETEV2ZW50YCBldmVudHMsIHRoZSBgYHByb3BhZ2F0ZT1UcnVlYGAga2V5d29yZCBhcmd1bWVudAogICAgd2lsbCBlbnN1cmUgdGhhdCBhIGdpdmVuIGV2ZW50IGhhbmRsZXIgaXMgcHJvcGFnYXRlZCB0byBjb3BpZXMgb2YgdGhlCiAgICBvYmplY3QsIHdoaWNoIGFyZSBtYWRlIHdoZW4gdXNpbmcgdGhlIDptZXRoOmBfc2NoZW1hLlRhYmxlLnRvbWV0YWRhdGFgCiAgICBtZXRob2Q6OgoKICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IERETAogICAgICAgIGV2ZW50Lmxpc3RlbigKICAgICAgICAgICAgc29tZV90YWJsZSwKICAgICAgICAgICAgImFmdGVyX2NyZWF0ZSIsCiAgICAgICAgICAgIERETCgiQUxURVIgVEFCTEUgJSh0YWJsZSlzIFNFVCBuYW1lPWZvb18lKHRhYmxlKXMiKSwKICAgICAgICAgICAgcHJvcGFnYXRlPVRydWUKICAgICAgICApCgogICAgICAgIG5ld190YWJsZSA9IHNvbWVfdGFibGUudG9tZXRhZGF0YShuZXdfbWV0YWRhdGEpCgogICAgVGhlIGFib3ZlIDpjbGFzczpgLkRETGAgb2JqZWN0IHdpbGwgYWxzbyBiZSBhc3NvY2lhdGVkIHdpdGggdGhlCiAgICA6Y2xhc3M6YF9zY2hlbWEuVGFibGVgIG9iamVjdCByZXByZXNlbnRlZCBieSBgYG5ld190YWJsZWBgLgoKICAgIC4uIHNlZWFsc286OgoKICAgICAgICA6cmVmOmBldmVudF90b3BsZXZlbGAKCiAgICAgICAgOmNsYXNzOmAuRERMRWxlbWVudGAKCiAgICAgICAgOmNsYXNzOmAuRERMYAoKICAgICAgICA6cmVmOmBzY2hlbWFfZGRsX3NlcXVlbmNlc2AKCiAgICDaF1NvbWVTY2hlbWFDbGFzc09yT2JqZWN0YwMAAAAAAAAAAAAAAAEAAAALAAAA8wYAAACXAGQBUwApAmGjAwAAQ2FsbGVkIGJlZm9yZSBDUkVBVEUgc3RhdGVtZW50cyBhcmUgZW1pdHRlZC4KCiAgICAgICAgOnBhcmFtIHRhcmdldDogdGhlIDpjbGFzczpgX3NjaGVtYS5NZXRhRGF0YWAgb3IgOmNsYXNzOmBfc2NoZW1hLlRhYmxlYAogICAgICAgICBvYmplY3Qgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQuCiAgICAgICAgOnBhcmFtIGNvbm5lY3Rpb246IHRoZSA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgd2hlcmUgdGhlCiAgICAgICAgIENSRUFURSBzdGF0ZW1lbnQgb3Igc3RhdGVtZW50cyB3aWxsIGJlIGVtaXR0ZWQuCiAgICAgICAgOnBhcmFtIFwqKmt3OiBhZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIHJlbGV2YW50CiAgICAgICAgIHRvIHRoZSBldmVudC4gIFRoZSBjb250ZW50cyBvZiB0aGlzIGRpY3Rpb25hcnkKICAgICAgICAgbWF5IHZhcnkgYWNyb3NzIHJlbGVhc2VzLCBhbmQgaW5jbHVkZSB0aGUKICAgICAgICAgbGlzdCBvZiB0YWJsZXMgYmVpbmcgZ2VuZXJhdGVkIGZvciBhIG1ldGFkYXRhLWxldmVsCiAgICAgICAgIGV2ZW50LCB0aGUgY2hlY2tmaXJzdCBmbGFnLCBhbmQgb3RoZXIKICAgICAgICAgZWxlbWVudHMgdXNlZCBieSBpbnRlcm5hbCBldmVudHMuCgogICAgICAgIDpmdW5jOmAuZXZlbnQubGlzdGVuYCBhbHNvIGFjY2VwdHMgdGhlIGBgcHJvcGFnYXRlPVRydWVgYAogICAgICAgIG1vZGlmaWVyIGZvciB0aGlzIGV2ZW50OyB3aGVuIFRydWUsIHRoZSBsaXN0ZW5lciBmdW5jdGlvbiB3aWxsCiAgICAgICAgYmUgZXN0YWJsaXNoZWQgZm9yIGFueSBjb3BpZXMgbWFkZSBvZiB0aGUgdGFyZ2V0IG9iamVjdCwKICAgICAgICBpLmUuIHRob3NlIGNvcGllcyB0aGF0IGFyZSBnZW5lcmF0ZWQgd2hlbgogICAgICAgIDptZXRoOmBfc2NoZW1hLlRhYmxlLnRvbWV0YWRhdGFgIGlzIHVzZWQuCgogICAgICAgIE6pAKkE2gRzZWxm2gZ0YXJnZXTaCmNvbm5lY3Rpb27aAmt3cwQAAAAgICAg+kgvb3B0L2Nsb3VkbGludXgvdmVudi9saWI2NC9weXRob24zLjExL3NpdGUtcGFja2FnZXMvc3FsYWxjaGVteS9ldmVudHMucHnaDWJlZm9yZV9jcmVhdGV6F0RETEV2ZW50cy5iZWZvcmVfY3JlYXRlZQAAAPMGAAAAgACAAIAA8wAAAABjAwAAAAAAAAAAAAAAAQAAAAsAAADzBgAAAJcAZAFTACkCYaQDAABDYWxsZWQgYWZ0ZXIgQ1JFQVRFIHN0YXRlbWVudHMgYXJlIGVtaXR0ZWQuCgogICAgICAgIDpwYXJhbSB0YXJnZXQ6IHRoZSA6Y2xhc3M6YF9zY2hlbWEuTWV0YURhdGFgIG9yIDpjbGFzczpgX3NjaGVtYS5UYWJsZWAKICAgICAgICAgb2JqZWN0IHdoaWNoIGlzIHRoZSB0YXJnZXQgb2YgdGhlIGV2ZW50LgogICAgICAgIDpwYXJhbSBjb25uZWN0aW9uOiB0aGUgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gIHdoZXJlIHRoZQogICAgICAgICBDUkVBVEUgc3RhdGVtZW50IG9yIHN0YXRlbWVudHMgaGF2ZSBiZWVuIGVtaXR0ZWQuCiAgICAgICAgOnBhcmFtIFwqKmt3OiBhZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIHJlbGV2YW50CiAgICAgICAgIHRvIHRoZSBldmVudC4gIFRoZSBjb250ZW50cyBvZiB0aGlzIGRpY3Rpb25hcnkKICAgICAgICAgbWF5IHZhcnkgYWNyb3NzIHJlbGVhc2VzLCBhbmQgaW5jbHVkZSB0aGUKICAgICAgICAgbGlzdCBvZiB0YWJsZXMgYmVpbmcgZ2VuZXJhdGVkIGZvciBhIG1ldGFkYXRhLWxldmVsCiAgICAgICAgIGV2ZW50LCB0aGUgY2hlY2tmaXJzdCBmbGFnLCBhbmQgb3RoZXIKICAgICAgICAgZWxlbWVudHMgdXNlZCBieSBpbnRlcm5hbCBldmVudHMuCgogICAgICAgIDpmdW5jOmAuZXZlbnQubGlzdGVuYCBhbHNvIGFjY2VwdHMgdGhlIGBgcHJvcGFnYXRlPVRydWVgYAogICAgICAgIG1vZGlmaWVyIGZvciB0aGlzIGV2ZW50OyB3aGVuIFRydWUsIHRoZSBsaXN0ZW5lciBmdW5jdGlvbiB3aWxsCiAgICAgICAgYmUgZXN0YWJsaXNoZWQgZm9yIGFueSBjb3BpZXMgbWFkZSBvZiB0aGUgdGFyZ2V0IG9iamVjdCwKICAgICAgICBpLmUuIHRob3NlIGNvcGllcyB0aGF0IGFyZSBnZW5lcmF0ZWQgd2hlbgogICAgICAgIDptZXRoOmBfc2NoZW1hLlRhYmxlLnRvbWV0YWRhdGFgIGlzIHVzZWQuCgogICAgICAgIE5yDwAAAHIQAAAAcwQAAAAgICAgchUAAADaDGFmdGVyX2NyZWF0ZXoWRERMRXZlbnRzLmFmdGVyX2NyZWF0ZXsAAAByFwAAAHIYAAAAYwMAAAAAAAAAAAAAAAEAAAALAAAA8wYAAACXAGQBUwApAmGfAwAAQ2FsbGVkIGJlZm9yZSBEUk9QIHN0YXRlbWVudHMgYXJlIGVtaXR0ZWQuCgogICAgICAgIDpwYXJhbSB0YXJnZXQ6IHRoZSA6Y2xhc3M6YF9zY2hlbWEuTWV0YURhdGFgIG9yIDpjbGFzczpgX3NjaGVtYS5UYWJsZWAKICAgICAgICAgb2JqZWN0IHdoaWNoIGlzIHRoZSB0YXJnZXQgb2YgdGhlIGV2ZW50LgogICAgICAgIDpwYXJhbSBjb25uZWN0aW9uOiB0aGUgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gIHdoZXJlIHRoZQogICAgICAgICBEUk9QIHN0YXRlbWVudCBvciBzdGF0ZW1lbnRzIHdpbGwgYmUgZW1pdHRlZC4KICAgICAgICA6cGFyYW0gXCoqa3c6IGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgcmVsZXZhbnQKICAgICAgICAgdG8gdGhlIGV2ZW50LiAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZGljdGlvbmFyeQogICAgICAgICBtYXkgdmFyeSBhY3Jvc3MgcmVsZWFzZXMsIGFuZCBpbmNsdWRlIHRoZQogICAgICAgICBsaXN0IG9mIHRhYmxlcyBiZWluZyBnZW5lcmF0ZWQgZm9yIGEgbWV0YWRhdGEtbGV2ZWwKICAgICAgICAgZXZlbnQsIHRoZSBjaGVja2ZpcnN0IGZsYWcsIGFuZCBvdGhlcgogICAgICAgICBlbGVtZW50cyB1c2VkIGJ5IGludGVybmFsIGV2ZW50cy4KCiAgICAgICAgOmZ1bmM6YC5ldmVudC5saXN0ZW5gIGFsc28gYWNjZXB0cyB0aGUgYGBwcm9wYWdhdGU9VHJ1ZWBgCiAgICAgICAgbW9kaWZpZXIgZm9yIHRoaXMgZXZlbnQ7IHdoZW4gVHJ1ZSwgdGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHdpbGwKICAgICAgICBiZSBlc3RhYmxpc2hlZCBmb3IgYW55IGNvcGllcyBtYWRlIG9mIHRoZSB0YXJnZXQgb2JqZWN0LAogICAgICAgIGkuZS4gdGhvc2UgY29waWVzIHRoYXQgYXJlIGdlbmVyYXRlZCB3aGVuCiAgICAgICAgOm1ldGg6YF9zY2hlbWEuVGFibGUudG9tZXRhZGF0YWAgaXMgdXNlZC4KCiAgICAgICAgTnIPAAAAchAAAABzBAAAACAgICByFQAAANoLYmVmb3JlX2Ryb3B6FURETEV2ZW50cy5iZWZvcmVfZHJvcJEAAAByFwAAAHIYAAAAYwMAAAAAAAAAAAAAAAEAAAALAAAA8wYAAACXAGQBUwApAmGgAwAAQ2FsbGVkIGFmdGVyIERST1Agc3RhdGVtZW50cyBhcmUgZW1pdHRlZC4KCiAgICAgICAgOnBhcmFtIHRhcmdldDogdGhlIDpjbGFzczpgX3NjaGVtYS5NZXRhRGF0YWAgb3IgOmNsYXNzOmBfc2NoZW1hLlRhYmxlYAogICAgICAgICBvYmplY3Qgd2hpY2ggaXMgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQuCiAgICAgICAgOnBhcmFtIGNvbm5lY3Rpb246IHRoZSA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgd2hlcmUgdGhlCiAgICAgICAgIERST1Agc3RhdGVtZW50IG9yIHN0YXRlbWVudHMgaGF2ZSBiZWVuIGVtaXR0ZWQuCiAgICAgICAgOnBhcmFtIFwqKmt3OiBhZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIHJlbGV2YW50CiAgICAgICAgIHRvIHRoZSBldmVudC4gIFRoZSBjb250ZW50cyBvZiB0aGlzIGRpY3Rpb25hcnkKICAgICAgICAgbWF5IHZhcnkgYWNyb3NzIHJlbGVhc2VzLCBhbmQgaW5jbHVkZSB0aGUKICAgICAgICAgbGlzdCBvZiB0YWJsZXMgYmVpbmcgZ2VuZXJhdGVkIGZvciBhIG1ldGFkYXRhLWxldmVsCiAgICAgICAgIGV2ZW50LCB0aGUgY2hlY2tmaXJzdCBmbGFnLCBhbmQgb3RoZXIKICAgICAgICAgZWxlbWVudHMgdXNlZCBieSBpbnRlcm5hbCBldmVudHMuCgogICAgICAgIDpmdW5jOmAuZXZlbnQubGlzdGVuYCBhbHNvIGFjY2VwdHMgdGhlIGBgcHJvcGFnYXRlPVRydWVgYAogICAgICAgIG1vZGlmaWVyIGZvciB0aGlzIGV2ZW50OyB3aGVuIFRydWUsIHRoZSBsaXN0ZW5lciBmdW5jdGlvbiB3aWxsCiAgICAgICAgYmUgZXN0YWJsaXNoZWQgZm9yIGFueSBjb3BpZXMgbWFkZSBvZiB0aGUgdGFyZ2V0IG9iamVjdCwKICAgICAgICBpLmUuIHRob3NlIGNvcGllcyB0aGF0IGFyZSBnZW5lcmF0ZWQgd2hlbgogICAgICAgIDptZXRoOmBfc2NoZW1hLlRhYmxlLnRvbWV0YWRhdGFgIGlzIHVzZWQuCgogICAgICAgIE5yDwAAAHIQAAAAcwQAAAAgICAgchUAAADaCmFmdGVyX2Ryb3B6FERETEV2ZW50cy5hZnRlcl9kcm9wpwAAAHIXAAAAchgAAABjAwAAAAAAAAAAAAAAAQAAAAMAAADzBgAAAJcAZAFTACkCYQoCAABDYWxsZWQgYmVmb3JlIGEgOmNsYXNzOmAuU2NoZW1hSXRlbWAgaXMgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAgYSBwYXJlbnQgOmNsYXNzOmAuU2NoZW1hSXRlbWAuCgogICAgICAgIDpwYXJhbSB0YXJnZXQ6IHRoZSB0YXJnZXQgb2JqZWN0CiAgICAgICAgOnBhcmFtIHBhcmVudDogdGhlIHBhcmVudCB0byB3aGljaCB0aGUgdGFyZ2V0IGlzIGJlaW5nIGF0dGFjaGVkLgoKICAgICAgICA6ZnVuYzpgLmV2ZW50Lmxpc3RlbmAgYWxzbyBhY2NlcHRzIHRoZSBgYHByb3BhZ2F0ZT1UcnVlYGAKICAgICAgICBtb2RpZmllciBmb3IgdGhpcyBldmVudDsgd2hlbiBUcnVlLCB0aGUgbGlzdGVuZXIgZnVuY3Rpb24gd2lsbAogICAgICAgIGJlIGVzdGFibGlzaGVkIGZvciBhbnkgY29waWVzIG1hZGUgb2YgdGhlIHRhcmdldCBvYmplY3QsCiAgICAgICAgaS5lLiB0aG9zZSBjb3BpZXMgdGhhdCBhcmUgZ2VuZXJhdGVkIHdoZW4KICAgICAgICA6bWV0aDpgX3NjaGVtYS5UYWJsZS50b21ldGFkYXRhYCBpcyB1c2VkLgoKICAgICAgICBOcg8AAACpA3IRAAAAchIAAADaBnBhcmVudHMDAAAAICAgchUAAADaFGJlZm9yZV9wYXJlbnRfYXR0YWNoeh5ERExFdmVudHMuYmVmb3JlX3BhcmVudF9hdHRhY2i9AAAAchcAAAByGAAAAGMDAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJhCQIAAENhbGxlZCBhZnRlciBhIDpjbGFzczpgLlNjaGVtYUl0ZW1gIGlzIGFzc29jaWF0ZWQgd2l0aAogICAgICAgIGEgcGFyZW50IDpjbGFzczpgLlNjaGVtYUl0ZW1gLgoKICAgICAgICA6cGFyYW0gdGFyZ2V0OiB0aGUgdGFyZ2V0IG9iamVjdAogICAgICAgIDpwYXJhbSBwYXJlbnQ6IHRoZSBwYXJlbnQgdG8gd2hpY2ggdGhlIHRhcmdldCBpcyBiZWluZyBhdHRhY2hlZC4KCiAgICAgICAgOmZ1bmM6YC5ldmVudC5saXN0ZW5gIGFsc28gYWNjZXB0cyB0aGUgYGBwcm9wYWdhdGU9VHJ1ZWBgCiAgICAgICAgbW9kaWZpZXIgZm9yIHRoaXMgZXZlbnQ7IHdoZW4gVHJ1ZSwgdGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHdpbGwKICAgICAgICBiZSBlc3RhYmxpc2hlZCBmb3IgYW55IGNvcGllcyBtYWRlIG9mIHRoZSB0YXJnZXQgb2JqZWN0LAogICAgICAgIGkuZS4gdGhvc2UgY29waWVzIHRoYXQgYXJlIGdlbmVyYXRlZCB3aGVuCiAgICAgICAgOm1ldGg6YF9zY2hlbWEuVGFibGUudG9tZXRhZGF0YWAgaXMgdXNlZC4KCiAgICAgICAgTnIPAAAAciAAAABzAwAAACAgIHIVAAAA2hNhZnRlcl9wYXJlbnRfYXR0YWNoeh1ERExFdmVudHMuYWZ0ZXJfcGFyZW50X2F0dGFjaMwAAAByFwAAAHIYAAAAYwMAAAAAAAAAAAAAAAEAAAADAAAA8wYAAACXAGQBUwApAnpVaW50ZXJuYWwgZXZlbnQgaG9vayB1c2VkIGZvciBwcmltYXJ5IGtleSBuYW1pbmcgY29udmVudGlvbgogICAgICAgIHVwZGF0ZXMuCgogICAgICAgIE5yDwAAACkDchEAAADaBWNvbnN02gNjb2xzAwAAACAgIHIVAAAA2idfc2FfZXZlbnRfY29sdW1uX2FkZGVkX3RvX3BrX2NvbnN0cmFpbnR6MURETEV2ZW50cy5fc2FfZXZlbnRfY29sdW1uX2FkZGVkX3RvX3BrX2NvbnN0cmFpbnTbAAAAchcAAAByGAAAAGMEAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJhEQ4AAENhbGxlZCBmb3IgZWFjaCB1bml0IG9mICdjb2x1bW4gaW5mbycgcmV0cmlldmVkIHdoZW4KICAgICAgICBhIDpjbGFzczpgX3NjaGVtYS5UYWJsZWAgaXMgYmVpbmcgcmVmbGVjdGVkLgoKICAgICAgICBDdXJyZW50bHksIHRoaXMgZXZlbnQgbWF5IG9ubHkgYmUgYXBwbGllZCB0byB0aGUgOmNsYXNzOmBfc2NoZW1hLlRhYmxlYAogICAgICAgIGNsYXNzIGRpcmVjdGx5OjoKCiAgICAgICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgVGFibGUKCiAgICAgICAgICAgIEBldmVudC5saXN0ZW5zX2ZvcihUYWJsZSwgJ2NvbHVtbl9yZWZsZWN0JykKICAgICAgICAgICAgZGVmIHJlY2VpdmVfY29sdW1uX3JlZmxlY3QoaW5zcGVjdG9yLCB0YWJsZSwgY29sdW1uX2luZm8pOgogICAgICAgICAgICAgICAgIyByZWNlaXZlcyBmb3IgYWxsIFRhYmxlIG9iamVjdHMgdGhhdCBhcmUgcmVmbGVjdGVkCgogICAgICAgIE9yIGFwcGxpZWQgdXNpbmcgdGhlCiAgICAgICAgOnBhcmFtcmVmOmBfc2NoZW1hLlRhYmxlLmxpc3RlbmVyc2AgcGFyYW1ldGVyOjoKCiAgICAgICAgICAgIHQxID0gVGFibGUoCiAgICAgICAgICAgICAgICAibXlfdGFibGUiLAogICAgICAgICAgICAgICAgYXV0b2xvYWRfd2l0aD1zb21lX2VuZ2luZSwKICAgICAgICAgICAgICAgIGxpc3RlbmVycz1bCiAgICAgICAgICAgICAgICAgICAgKCdjb2x1bW5fcmVmbGVjdCcsIHJlY2VpdmVfY29sdW1uX3JlZmxlY3QpCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICkKCiAgICAgICAgQSBmdXR1cmUgcmVsZWFzZSB3aWxsIGFsbG93IGl0IHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljCiAgICAgICAgOmNsYXNzOmBfc2NoZW1hLk1ldGFEYXRhYCBvYmplY3QgYXMgd2VsbC4KCiAgICAgICAgVGhlIGRpY3Rpb25hcnkgb2YgY29sdW1uIGluZm9ybWF0aW9uIGFzIHJldHVybmVkIGJ5IHRoZQogICAgICAgIGRpYWxlY3QgaXMgcGFzc2VkLCBhbmQgY2FuIGJlIG1vZGlmaWVkLiAgVGhlIGRpY3Rpb25hcnkKICAgICAgICBpcyB0aGF0IHJldHVybmVkIGluIGVhY2ggZWxlbWVudCBvZiB0aGUgbGlzdCByZXR1cm5lZAogICAgICAgIGJ5IDptZXRoOmAucmVmbGVjdGlvbi5JbnNwZWN0b3IuZ2V0X2NvbHVtbnNgOgoKICAgICAgICAgICAgKiBgYG5hbWVgYCAtIHRoZSBjb2x1bW4ncyBuYW1lLCBpcyBhcHBsaWVkIHRvIHRoZQogICAgICAgICAgICAgIDpwYXJhbXJlZjpgX3NjaGVtYS5Db2x1bW4ubmFtZWAgcGFyYW1ldGVyCgogICAgICAgICAgICAqIGBgdHlwZWBgIC0gdGhlIHR5cGUgb2YgdGhpcyBjb2x1bW4sIHdoaWNoIHNob3VsZCBiZSBhbiBpbnN0YW5jZQogICAgICAgICAgICAgIG9mIDpjbGFzczpgfnNxbGFsY2hlbXkudHlwZXMuVHlwZUVuZ2luZWAsIGlzIGFwcGxpZWQgdG8gdGhlCiAgICAgICAgICAgICAgOnBhcmFtcmVmOmBfc2NoZW1hLkNvbHVtbi50eXBlYCBwYXJhbWV0ZXIKCiAgICAgICAgICAgICogYGBudWxsYWJsZWBgIC0gYm9vbGVhbiBmbGFnIGlmIHRoZSBjb2x1bW4gaXMgTlVMTCBvciBOT1QgTlVMTCwKICAgICAgICAgICAgICBpcyBhcHBsaWVkIHRvIHRoZSA6cGFyYW1yZWY6YF9zY2hlbWEuQ29sdW1uLm51bGxhYmxlYCBwYXJhbWV0ZXIKCiAgICAgICAgICAgICogYGBkZWZhdWx0YGAgLSB0aGUgY29sdW1uJ3Mgc2VydmVyIGRlZmF1bHQgdmFsdWUuICBUaGlzIGlzCiAgICAgICAgICAgICAgbm9ybWFsbHkgc3BlY2lmaWVkIGFzIGEgcGxhaW4gc3RyaW5nIFNRTCBleHByZXNzaW9uLCBob3dldmVyIHRoZQogICAgICAgICAgICAgIGV2ZW50IGNhbiBwYXNzIGEgOmNsYXNzOmAuRmV0Y2hlZFZhbHVlYCwgOmNsYXNzOmAuRGVmYXVsdENsYXVzZWAsCiAgICAgICAgICAgICAgb3IgOmZ1bmM6YF9leHByZXNzaW9uLnRleHRgIG9iamVjdCBhcyB3ZWxsLiAgSXMgYXBwbGllZCB0byB0aGUKICAgICAgICAgICAgICA6cGFyYW1yZWY6YF9zY2hlbWEuQ29sdW1uLnNlcnZlcl9kZWZhdWx0YCBwYXJhbWV0ZXIKCiAgICAgICAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAxLjEuNgoKICAgICAgICAgICAgICAgICAgICBUaGUgOm1ldGg6YC5ERExFdmVudHMuY29sdW1uX3JlZmxlY3RgIGV2ZW50IGFsbG93cyBhIG5vbgogICAgICAgICAgICAgICAgICAgIHN0cmluZyA6Y2xhc3M6YC5GZXRjaGVkVmFsdWVgLAogICAgICAgICAgICAgICAgICAgIDpmdW5jOmBfZXhwcmVzc2lvbi50ZXh0YCwgb3IgZGVyaXZlZCBvYmplY3QgdG8gYmUKICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgYXMgdGhlIHZhbHVlIG9mIGBgZGVmYXVsdGBgIGluIHRoZSBjb2x1bW4KICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5LgoKICAgICAgICBUaGUgZXZlbnQgaXMgY2FsbGVkIGJlZm9yZSBhbnkgYWN0aW9uIGlzIHRha2VuIGFnYWluc3QKICAgICAgICB0aGlzIGRpY3Rpb25hcnksIGFuZCB0aGUgY29udGVudHMgY2FuIGJlIG1vZGlmaWVkOyB0aGUgZm9sbG93aW5nCiAgICAgICAgYWRkaXRpb25hbCBrZXlzIG1heSBiZSBhZGRlZCB0byB0aGUgZGljdGlvbmFyeSB0byBmdXJ0aGVyIG1vZGlmeQogICAgICAgIGhvdyB0aGUgOmNsYXNzOmBfc2NoZW1hLkNvbHVtbmAgaXMgY29uc3RydWN0ZWQ6CgoKICAgICAgICAgICAgKiBgYGtleWBgIC0gdGhlIHN0cmluZyBrZXkgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYWNjZXNzIHRoaXMKICAgICAgICAgICAgICA6Y2xhc3M6YF9zY2hlbWEuQ29sdW1uYCBpbiB0aGUgYGAuY2BgIGNvbGxlY3Rpb247IHdpbGwgYmUgYXBwbGllZAogICAgICAgICAgICAgIHRvIHRoZSA6cGFyYW1yZWY6YF9zY2hlbWEuQ29sdW1uLmtleWAgcGFyYW1ldGVyLiBJcyBhbHNvIHVzZWQKICAgICAgICAgICAgICBmb3IgT1JNIG1hcHBpbmcuICBTZWUgdGhlIHNlY3Rpb24KICAgICAgICAgICAgICA6cmVmOmBtYXBwZXJfYXV0b21hdGVkX3JlZmxlY3Rpb25fc2NoZW1lc2AgZm9yIGFuIGV4YW1wbGUuCgogICAgICAgICAgICAqIGBgcXVvdGVgYCAtIGZvcmNlIG9yIHVuLWZvcmNlIHF1b3Rpbmcgb24gdGhlIGNvbHVtbiBuYW1lOwogICAgICAgICAgICAgIGlzIGFwcGxpZWQgdG8gdGhlIDpwYXJhbXJlZjpgX3NjaGVtYS5Db2x1bW4ucXVvdGVgIHBhcmFtZXRlci4KCiAgICAgICAgICAgICogYGBpbmZvYGAgLSBhIGRpY3Rpb25hcnkgb2YgYXJiaXRyYXJ5IGRhdGEgdG8gZm9sbG93IGFsb25nIHdpdGgKICAgICAgICAgICAgICB0aGUgOmNsYXNzOmBfc2NoZW1hLkNvbHVtbmAsIGlzIGFwcGxpZWQgdG8gdGhlCiAgICAgICAgICAgICAgOnBhcmFtcmVmOmBfc2NoZW1hLkNvbHVtbi5pbmZvYCBwYXJhbWV0ZXIuCgogICAgICAgIDpmdW5jOmAuZXZlbnQubGlzdGVuYCBhbHNvIGFjY2VwdHMgdGhlIGBgcHJvcGFnYXRlPVRydWVgYAogICAgICAgIG1vZGlmaWVyIGZvciB0aGlzIGV2ZW50OyB3aGVuIFRydWUsIHRoZSBsaXN0ZW5lciBmdW5jdGlvbiB3aWxsCiAgICAgICAgYmUgZXN0YWJsaXNoZWQgZm9yIGFueSBjb3BpZXMgbWFkZSBvZiB0aGUgdGFyZ2V0IG9iamVjdCwKICAgICAgICBpLmUuIHRob3NlIGNvcGllcyB0aGF0IGFyZSBnZW5lcmF0ZWQgd2hlbgogICAgICAgIDptZXRoOmBfc2NoZW1hLlRhYmxlLnRvX21ldGFkYXRhYCBpcyB1c2VkLgoKICAgICAgICBOcg8AAAApBHIRAAAA2glpbnNwZWN0b3LaBXRhYmxl2gtjb2x1bW5f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aGVja2VkIG91dCBmcm9tIGEgcGFydGljdWxhciA6Y2xhc3M6YF9wb29sLlBvb2xgLgoKICAgICAgICBUaGUgcmF0aW9uYWxlIGZvciA6bWV0aDpgX2V2ZW50cy5Qb29sRXZlbnRzLmZpcnN0X2Nvbm5lY3RgCiAgICAgICAgaXMgdG8gZGV0ZXJtaW5lCiAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIHNlcmllcyBvZiBkYXRhYmFzZSBjb25uZWN0aW9ucyBiYXNlZAogICAgICAgIG9uIHRoZSBzZXR0aW5ncyB1c2VkIGZvciBhbGwgY29ubmVjdGlvbnMuICBTaW5jZSBhIHBhcnRpY3VsYXIKICAgICAgICA6Y2xhc3M6YF9wb29sLlBvb2xgCiAgICAgICAgcmVmZXJzIHRvIGEgc2luZ2xlICJjcmVhdG9yIiBmdW5jdGlvbiAod2hpY2ggaW4gdGVybXMKICAgICAgICBvZiBhIDpjbGFzczpgX2VuZ2luZS5FbmdpbmVgCiAgICAgICAgcmVmZXJzIHRvIHRoZSBVUkwgYW5kIGNvbm5lY3Rpb24gb3B0aW9ucyB1c2VkKSwKICAgICAgICBpdCBpcyB0eXBpY2FsbHkgdmFsaWQgdG8gbWFrZSBvYnNlcnZhdGlvbnMgYWJvdXQgYSBzaW5nbGUgY29ubmVjdGlvbgogICAgICAgIHRoYXQgY2FuIGJlIHNhZmVseSBhc3N1bWVkIHRvIGJlIHZhbGlkIGFib3V0IGFsbCBzdWJzZXF1ZW50CiAgICAgICAgY29ubmVjdGlvbnMsIHN1Y2ggYXMgdGhlIGRhdGFiYXNlIHZlcnNpb24sIHRoZSBzZXJ2ZXIgYW5kIGNsaWVudAogICAgICAgIGVuY29kaW5nIHNldHRpbmdzLCBjb2xsYXRpb24gc2V0dGluZ3MsIGFuZCBtYW55IG90aGVycy4KCiAgICAgICAgOnBhcmFtIGRiYXBpX2Nvbm5lY3Rpb246IGEgREJBUEkgY29ubmVjdGlvbi4KCiAgICAgICAgOnBhcmFtIGNvbm5lY3Rpb25fcmVjb3JkOiB0aGUgOmNsYXNzOmAuX0Nvbm5lY3Rpb25SZWNvcmRgIG1hbmFnaW5nIHRoZQogICAgICAgICBEQkFQSSBjb25uZWN0aW9uLgoKICAgICAgICBOcg8AAAByQQAAAHMDAAAAICAgchUAAADaDWZpcnN0X2Nvbm5lY3R6GFBvb2xFdmVudHMuZmlyc3RfY29ubmVjdHABAAByFwAAAHIYAAAAYwQAAAAAAAAAAAAAAAEAAAADAAAA8wYAAACXAGQBUwApAmFHAwAAQ2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIGlzIHJldHJpZXZlZCBmcm9tIHRoZSBQb29sLgoKICAgICAgICA6cGFyYW0gZGJhcGlfY29ubmVjdGlvbjogYSBEQkFQSSBjb25uZWN0aW9uLgoKICAgICAgICA6cGFyYW0gY29ubmVjdGlvbl9yZWNvcmQ6IHRoZSA6Y2xhc3M6YC5fQ29ubmVjdGlvblJlY29yZGAgbWFuYWdpbmcgdGhlCiAgICAgICAgIERCQVBJIGNvbm5lY3Rpb24uCgogICAgICAgIDpwYXJhbSBjb25uZWN0aW9uX3Byb3h5OiB0aGUgOmNsYXNzOmAuX0Nvbm5lY3Rpb25GYWlyeWAgb2JqZWN0IHdoaWNoCiAgICAgICAgICB3aWxsIHByb3h5IHRoZSBwdWJsaWMgaW50ZXJmYWNlIG9mIHRoZSBEQkFQSSBjb25uZWN0aW9uIGZvciB0aGUKICAgICAgICAgIGxpZmVzcGFuIG9mIHRoZSBjaGVja291dC4KCiAgICAgICAgSWYgeW91IHJhaXNlIGEgOmNsYXNzOmB+c3FsYWxjaGVteS5leGMuRGlzY29ubmVjdGlvbkVycm9yYCwgdGhlIGN1cnJlbnQKICAgICAgICBjb25uZWN0aW9uIHdpbGwgYmUgZGlzcG9zZWQgYW5kIGEgZnJlc2ggY29ubmVjdGlvbiByZXRyaWV2ZWQuCiAgICAgICAgUHJvY2Vzc2luZyBvZiBhbGwgY2hlY2tvdXQgbGlzdGVuZXJzIHdpbGwgYWJvcnQgYW5kIHJlc3RhcnQKICAgICAgICB1c2luZyB0aGUgbmV3IGNvbm5lY3Rpb24uCgogICAgICAgIC4uIHNlZWFsc286OiA6bWV0aDpgX2V2ZW50cy5Db25uZWN0aW9uRXZlbnRzLmVuZ2luZV9jb25uZWN0YAogICAgICAgICAgIC0gYSBzaW1pbGFyIGV2ZW50CiAgICAgICAgICAgd2hpY2ggb2NjdXJzIHVwb24gY3JlYXRpb24gb2YgYSBuZXcgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gLgoKICAgICAgICBOcg8AAAApBHIRAAAAckIAAAByQwAAANoQY29ubmVjdGlvbl9wcm94eXMEAAAAICAgIHIVAAAA2ghjaGVja291dHoTUG9vbEV2ZW50cy5jaGVja291dIgBAAByFwAAAHIYAAAAYwMAAAAAAAAAAAAAAAEAAAADAAAA8wYAAACXAGQBUwApAmGuAQAAQ2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIHJldHVybnMgdG8gdGhlIHBvb2wuCgogICAgICAgIE5vdGUgdGhhdCB0aGUgY29ubmVjdGlvbiBtYXkgYmUgY2xvc2VkLCBhbmQgbWF5IGJlIE5vbmUgaWYgdGhlCiAgICAgICAgY29ubmVjdGlvbiBoYXMgYmVlbiBpbnZhbGlkYXRlZC4gIGBgY2hlY2tpbmBgIHdpbGwgbm90IGJlIGNhbGxlZAogICAgICAgIGZvciBkZXRhY2hlZCBjb25uZWN0aW9ucy4gIChUaGV5IGRvIG5vdCByZXR1cm4gdG8gdGhlIHBvb2wuKQoKICAgICAgICA6cGFyYW0gZGJhcGlfY29ubmVjdGlvbjogYSBEQkFQSSBjb25uZWN0aW9uLgoKICAgICAgICA6cGFyYW0gY29ubmVjdGlvbl9yZWNvcmQ6IHRoZSA6Y2xhc3M6YC5fQ29ubmVjdGlvblJlY29yZGAgbWFuYWdpbmcgdGhlCiAgICAgICAgIERCQVBJIGNvbm5lY3Rpb24uCgogICAgICAgIE5yDwAAAHJBAAAAcwMAAAAgICByFQAAANoHY2hlY2tpbnoSUG9vbEV2ZW50cy5jaGVja2lunwEAAHIXAAAAchgAAABjAwAAAAAAAAAAAAAAAQAAAAMAAADzBgAAAJcAZAFTACkCYWIDAABDYWxsZWQgYmVmb3JlIHRoZSAicmVzZXQiIGFjdGlvbiBvY2N1cnMgZm9yIGEgcG9vbGVkIGNvbm5lY3Rpb24uCgogICAgICAgIFRoaXMgZXZlbnQgcmVwcmVzZW50cwogICAgICAgIHdoZW4gdGhlIGBgcm9sbGJhY2soKWBgIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIERCQVBJIGNvbm5lY3Rpb24KICAgICAgICBiZWZvcmUgaXQgaXMgcmV0dXJuZWQgdG8gdGhlIHBvb2wuICBUaGUgYmVoYXZpb3Igb2YgInJlc2V0IiBjYW4KICAgICAgICBiZSBjb250cm9sbGVkLCBpbmNsdWRpbmcgZGlzYWJsZWQsIHVzaW5nIHRoZSBgYHJlc2V0X29uX3JldHVybmBgCiAgICAgICAgcG9vbCBhcmd1bWVudC4KCgogICAgICAgIFRoZSA6bWV0aDpgX2V2ZW50cy5Qb29sRXZlbnRzLnJlc2V0YCBldmVudCBpcyB1c3VhbGx5IGZvbGxvd2VkIGJ5IHRoZQogICAgICAgIDptZXRoOmBfZXZlbnRzLlBvb2xFdmVudHMuY2hlY2tpbmAgZXZlbnQgaXMgY2FsbGVkLCBleGNlcHQgaW4gdGhvc2UKICAgICAgICBjYXNlcyB3aGVyZSB0aGUgY29ubmVjdGlvbiBpcyBkaXNjYXJkZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgcmVzZXQuCgogICAgICAgIDpwYXJhbSBkYmFwaV9jb25uZWN0aW9uOiBhIERCQVBJIGNvbm5lY3Rpb24uCgogICAgICAgIDpwYXJhbSBjb25uZWN0aW9uX3JlY29yZDogdGhlIDpjbGFzczpgLl9Db25uZWN0aW9uUmVjb3JkYCBtYW5hZ2luZyB0aGUKICAgICAgICAgREJBUEkgY29ubmVjdGlvbi4KCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgX2V2ZW50cy5Db25uZWN0aW9uRXZlbnRzLnJvbGxiYWNrYAoKICAgICAgICAgICAgOm1ldGg6YF9ldmVudHMuQ29ubmVjdGlvbkV2ZW50cy5jb21taXRgCgogICAgICAgIE5yDwAAAHJBAAAAcwMAAAAgICByFQAAANoFcmVzZXR6EFBvb2xFdmVudHMucmVzZXStAQAAchcAAAByGAAAAGMEAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJhOAMAAENhbGxlZCB3aGVuIGEgREJBUEkgY29ubmVjdGlvbiBpcyB0byBiZSAiaW52YWxpZGF0ZWQiLgoKICAgICAgICBUaGlzIGV2ZW50IGlzIGNhbGxlZCBhbnkgdGltZSB0aGUgOm1ldGg6YC5fQ29ubmVjdGlvblJlY29yZC5pbnZhbGlkYXRlYAogICAgICAgIG1ldGhvZCBpcyBpbnZva2VkLCBlaXRoZXIgZnJvbSBBUEkgdXNhZ2Ugb3IgdmlhICJhdXRvLWludmFsaWRhdGlvbiIsCiAgICAgICAgd2l0aG91dCB0aGUgYGBzb2Z0YGAgZmxhZy4KCiAgICAgICAgVGhlIGV2ZW50IG9jY3VycyBiZWZvcmUgYSBmaW5hbCBhdHRlbXB0IHRvIGNhbGwgYGAuY2xvc2UoKWBgIG9uIHRoZQogICAgICAgIGNvbm5lY3Rpb24gb2NjdXJzLgoKICAgICAgICA6cGFyYW0gZGJhcGlfY29ubmVjdGlvbjogYSBEQkFQSSBjb25uZWN0aW9uLgoKICAgICAgICA6cGFyYW0gY29ubmVjdGlvbl9yZWNvcmQ6IHRoZSA6Y2xhc3M6YC5fQ29ubmVjdGlvblJlY29yZGAgbWFuYWdpbmcgdGhlCiAgICAgICAgIERCQVBJIGNvbm5lY3Rpb24uCgogICAgICAgIDpwYXJhbSBleGNlcHRpb246IHRoZSBleGNlcHRpb24gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlYXNvbgogICAgICAgICBmb3IgdGhpcyBpbnZhbGlkYXRpb24sIGlmIGFueS4gIE1heSBiZSBgYE5vbmVgYC4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMC45LjIgQWRkZWQgc3VwcG9ydCBmb3IgY29ubmVjdGlvbiBpbnZhbGlkYXRpb24KICAgICAgICAgICBsaXN0ZW5pbmcuCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOnJlZjpgcG9vbF9jb25uZWN0aW9uX2ludmFsaWRhdGlvbmAKCiAgICAgICAgTnIPAAAAqQRyEQAAAHJCAAAAckMAAADaCWV4Y2VwdGlvbnMEAAAAICAgIHIVAAAA2gppbnZhbGlkYXRlehVQb29sRXZlbnRzLmludmFsaWRhdGXIAQAAchcAAAByGAAAAGMEAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJh9gEAAENhbGxlZCB3aGVuIGEgREJBUEkgY29ubmVjdGlvbiBpcyB0byBiZSAic29mdCBpbnZhbGlkYXRlZCIuCgogICAgICAgIFRoaXMgZXZlbnQgaXMgY2FsbGVkIGFueSB0aW1lIHRoZSA6bWV0aDpgLl9Db25uZWN0aW9uUmVjb3JkLmludmFsaWRhdGVgCiAgICAgICAgbWV0aG9kIGlzIGludm9rZWQgd2l0aCB0aGUgYGBzb2Z0YGAgZmxhZy4KCiAgICAgICAgU29mdCBpbnZhbGlkYXRpb24gcmVmZXJzIHRvIHdoZW4gdGhlIGNvbm5lY3Rpb24gcmVjb3JkIHRoYXQgdHJhY2tzCiAgICAgICAgdGhpcyBjb25uZWN0aW9uIHdpbGwgZm9yY2UgYSByZWNvbm5lY3QgYWZ0ZXIgdGhlIGN1cnJlbnQgY29ubmVjdGlvbgogICAgICAgIGlzIGNoZWNrZWQgaW4uICAgSXQgZG9lcyBub3QgYWN0aXZlbHkgY2xvc2UgdGhlIGRiYXBpX2Nvbm5lY3Rpb24KICAgICAgICBhdCB0aGUgcG9pbnQgYXQgd2hpY2ggaXQgaXMgY2FsbGVkLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjAuMwoKICAgICAgICBOcg8AAAByTwAAAHMEAAAAICAgIHIVAAAA2g9zb2Z0X2ludmFsaWRhdGV6GlBvb2xFdmVudHMuc29mdF9pbnZhbGlkYXRl4wEAAHIXAAAAchgAAABjAwAAAAAAAAAAAAAAAQAAAAMAAADzBgAAAJcAZAFTACkCYQMCAABDYWxsZWQgd2hlbiBhIERCQVBJIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgoKICAgICAgICBUaGUgZXZlbnQgaXMgZW1pdHRlZCBiZWZvcmUgdGhlIGNsb3NlIG9jY3Vycy4KCiAgICAgICAgVGhlIGNsb3NlIG9mIGEgY29ubmVjdGlvbiBjYW4gZmFpbDsgdHlwaWNhbGx5IHRoaXMgaXMgYmVjYXVzZQogICAgICAgIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHkgY2xvc2VkLiAgSWYgdGhlIGNsb3NlIG9wZXJhdGlvbiBmYWlscywKICAgICAgICB0aGUgY29ubmVjdGlvbiBpcyBkaXNjYXJkZWQuCgogICAgICAgIFRoZSA6bWV0aDpgLmNsb3NlYCBldmVudCBjb3JyZXNwb25kcyB0byBhIGNvbm5lY3Rpb24gdGhhdCdzIHN0aWxsCiAgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb29sLiBUbyBpbnRlcmNlcHQgY2xvc2UgZXZlbnRzIGZvciBkZXRhY2hlZAogICAgICAgIGNvbm5lY3Rpb25zIHVzZSA6bWV0aDpgLmNsb3NlX2RldGFjaGVkYC4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMS4xCgogICAgICAgIE5yDwAAAHJBAAAAcwMAAAAgICByFQAAANoFY2xvc2V6EFBvb2xFdmVudHMuY2xvc2XyAQAAchcAAAByGAAAAGMDAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJ67ENhbGxlZCB3aGVuIGEgREJBUEkgY29ubmVjdGlvbiBpcyAiZGV0YWNoZWQiIGZyb20gYSBwb29sLgoKICAgICAgICBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgYWZ0ZXIgdGhlIGRldGFjaCBvY2N1cnMuICBUaGUgY29ubmVjdGlvbgogICAgICAgIGlzIG5vIGxvbmdlciBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvbm5lY3Rpb24gcmVjb3JkLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjEKCiAgICAgICAgTnIPAAAAckEAAABzAwAAACAgIHIVAAAA2gZkZXRhY2h6EVBvb2xFdmVudHMuZGV0YWNoAwIAAHIXAAAAchgAAABjAgAAAAAAAAAAAAAAAQAAAAMAAADzBgAAAJcAZAFTACkCYUcBAABDYWxsZWQgd2hlbiBhIGRldGFjaGVkIERCQVBJIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgoKICAgICAgICBUaGUgZXZlbnQgaXMgZW1pdHRlZCBiZWZvcmUgdGhlIGNsb3NlIG9jY3Vycy4KCiAgICAgICAgVGhlIGNsb3NlIG9mIGEgY29ubmVjdGlvbiBjYW4gZmFpbDsgdHlwaWNhbGx5IHRoaXMgaXMgYmVjYXVzZQogICAgICAgIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHkgY2xvc2VkLiAgSWYgdGhlIGNsb3NlIG9wZXJhdGlvbiBmYWlscywKICAgICAgICB0aGUgY29ubmVjdGlvbiBpcyBkaXNjYXJkZWQuCgogICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDEuMQoKICAgICAgICBOcg8AAAApAnIRAAAAckIAAABzAgAAACAgchUAAADaDmNsb3NlX2RldGFjaGVkehlQb29sRXZlbnRzLmNsb3NlX2RldGFjaGVkDQIAAHIXAAAAchgAAABOKRNyLgAAAHIvAAAAcjAAAAByMQAAAHIyAAAAcgkAAAByMwAAANoLY2xhc3NtZXRob2RyPwAAAHJEAAAAckYAAABySQAAAHJLAAAAck0AAAByUQAAAHJTAAAAclUAAAByVwAAAHJZAAAAcg8AAAByGAAAAHIVAAAAcjUAAAByNQAAADUBAABz2wAAAIAAgACAAIAAgADwAhoFCPAAGgUI8DgAGSvQBBXYFxvQBBTgBRDwAgkFGvAACQUa8QMABhGEW/ACCQUa8BYNBQzwAA0FDPAADQUM8B4WBQzwABYFDPAAFgUM8DAVBQzwABUFDPAAFQUM8C4MBQzwAAwFDPAADAUM8BwZBQzwABkFDPAAGQUM8DYZBQzwABkFDPAAGQUM8DYNBQzwAA0FDPAADQUM8B4PBQzwAA8FDPAADwUM8CIIBQzwAAgFDPAACAUM8BQLBQzwAAsFDPAACwUM8AALBQzwAAsFDHIYAAAAcjUAAABjAAAAAAAAAAAAAAAABAAAAAAAAADz2AAAAJcAZQBaAWQAWgJkAVoDZAJaBGUFWgZlB2QcZASEAaYAAACrAAAAAAAAAAAAWghkBYQAWglkBoQAWgpkB4QAWgtkCIQAWgwCAGUNag4AAAAAAAAAAGQJZAqmAgAAqwIAAAAAAAAAAGQLhACmAAAAqwAAAAAAAAAAAFoPZAyEAFoQZA2EAFoRZA6EAFoSZA+EAFoTZBCEAFoUZBGEAFoVZBKEAFoWZBOEAFoXZBSEAFoYZBWEAFoZZBaEAFoaZBeEAFobZBiEAFocZBmEAFodZBqEAFoeZBtTACkd2hBDb25uZWN0aW9uRXZlbnRzYVsOAABBdmFpbGFibGUgZXZlbnRzIGZvciA6Y2xhc3M6YC5Db25uZWN0YWJsZWAsIHdoaWNoIGluY2x1ZGVzCiAgICA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgYW5kIDpjbGFzczpgX2VuZ2luZS5FbmdpbmVgLgoKICAgIFRoZSBtZXRob2RzIGhlcmUgZGVmaW5lIHRoZSBuYW1lIG9mIGFuIGV2ZW50IGFzIHdlbGwgYXMgdGhlIG5hbWVzIG9mCiAgICBtZW1iZXJzIHRoYXQgYXJlIHBhc3NlZCB0byBsaXN0ZW5lciBmdW5jdGlvbnMuCgogICAgQW4gZXZlbnQgbGlzdGVuZXIgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhbnkgOmNsYXNzOmAuQ29ubmVjdGFibGVgCiAgICBjbGFzcyBvciBpbnN0YW5jZSwgc3VjaCBhcyBhbiA6Y2xhc3M6YF9lbmdpbmUuRW5naW5lYCwgZS5nLjo6CgogICAgICAgIGZyb20gc3FsYWxjaGVteSBpbXBvcnQgZXZlbnQsIGNyZWF0ZV9lbmdpbmUKCiAgICAgICAgZGVmIGJlZm9yZV9jdXJzb3JfZXhlY3V0ZShjb25uLCBjdXJzb3IsIHN0YXRlbWVudCwgcGFyYW1ldGVycywgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlbWFueSk6CiAgICAgICAgICAgIGxvZy5pbmZvKCJSZWNlaXZlZCBzdGF0ZW1lbnQ6ICVzIiwgc3RhdGVtZW50KQoKICAgICAgICBlbmdpbmUgPSBjcmVhdGVfZW5naW5lKCdwb3N0Z3Jlc3FsOi8vc2NvdHQ6dGlnZXJAbG9jYWxob3N0L3Rlc3QnKQogICAgICAgIGV2ZW50Lmxpc3RlbihlbmdpbmUsICJiZWZvcmVfY3Vyc29yX2V4ZWN1dGUiLCBiZWZvcmVfY3Vyc29yX2V4ZWN1dGUpCgogICAgb3Igd2l0aCBhIHNwZWNpZmljIDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYDo6CgogICAgICAgIHdpdGggZW5naW5lLmJlZ2luKCkgYXMgY29ubjoKICAgICAgICAgICAgQGV2ZW50Lmxpc3RlbnNfZm9yKGNvbm4sICdiZWZvcmVfY3Vyc29yX2V4ZWN1dGUnKQogICAgICAgICAgICBkZWYgYmVmb3JlX2N1cnNvcl9leGVjdXRlKGNvbm4sIGN1cnNvciwgc3RhdGVtZW50LCBwYXJhbWV0ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsIGV4ZWN1dGVtYW55KToKICAgICAgICAgICAgICAgIGxvZy5pbmZvKCJSZWNlaXZlZCBzdGF0ZW1lbnQ6ICVzIiwgc3RhdGVtZW50KQoKICAgIFdoZW4gdGhlIG1ldGhvZHMgYXJlIGNhbGxlZCB3aXRoIGEgYHN0YXRlbWVudGAgcGFyYW1ldGVyLCBzdWNoIGFzIGluCiAgICA6bWV0aDpgLmFmdGVyX2N1cnNvcl9leGVjdXRlYCwgOm1ldGg6YC5iZWZvcmVfY3Vyc29yX2V4ZWN1dGVgIGFuZAogICAgOm1ldGg6YC5kYmFwaV9lcnJvcmAsIHRoZSBzdGF0ZW1lbnQgaXMgdGhlIGV4YWN0IFNRTCBzdHJpbmcgdGhhdCB3YXMKICAgIHByZXBhcmVkIGZvciB0cmFuc21pc3Npb24gdG8gdGhlIERCQVBJIGBgY3Vyc29yYGAgaW4gdGhlIGNvbm5lY3Rpb24ncwogICAgOmNsYXNzOmAuRGlhbGVjdGAuCgogICAgVGhlIDptZXRoOmAuYmVmb3JlX2V4ZWN1dGVgIGFuZCA6bWV0aDpgLmJlZm9yZV9jdXJzb3JfZXhlY3V0ZWAKICAgIGV2ZW50cyBjYW4gYWxzbyBiZSBlc3RhYmxpc2hlZCB3aXRoIHRoZSBgYHJldHZhbD1UcnVlYGAgZmxhZywgd2hpY2gKICAgIGFsbG93cyBtb2RpZmljYXRpb24gb2YgdGhlIHN0YXRlbWVudCBhbmQgcGFyYW1ldGVycyB0byBiZSBzZW50CiAgICB0byB0aGUgZGF0YWJhc2UuICBUaGUgOm1ldGg6YC5iZWZvcmVfY3Vyc29yX2V4ZWN1dGVgIGV2ZW50IGlzCiAgICBwYXJ0aWN1bGFybHkgdXNlZnVsIGhlcmUgdG8gYWRkIGFkLWhvYyBzdHJpbmcgdHJhbnNmb3JtYXRpb25zLCBzdWNoCiAgICBhcyBjb21tZW50cywgdG8gYWxsIGV4ZWN1dGlvbnM6OgoKICAgICAgICBmcm9tIHNxbGFsY2hlbXkuZW5naW5lIGltcG9ydCBFbmdpbmUKICAgICAgICBmcm9tIHNxbGFsY2hlbXkgaW1wb3J0IGV2ZW50CgogICAgICAgIEBldmVudC5saXN0ZW5zX2ZvcihFbmdpbmUsICJiZWZvcmVfY3Vyc29yX2V4ZWN1dGUiLCByZXR2YWw9VHJ1ZSkKICAgICAgICBkZWYgY29tbWVudF9zcWxfY2FsbHMoY29ubiwgY3Vyc29yLCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgZXhlY3V0ZW1hbnkpOgogICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnQgKyAiIC0tIHNvbWUgY29tbWVudCIKICAgICAgICAgICAgcmV0dXJuIHN0YXRlbWVudCwgcGFyYW1ldGVycwoKICAgIC4uIG5vdGU6OiA6Y2xhc3M6YF9ldmVudHMuQ29ubmVjdGlvbkV2ZW50c2AgY2FuIGJlIGVzdGFibGlzaGVkIG9uIGFueQogICAgICAgY29tYmluYXRpb24gb2YgOmNsYXNzOmBfZW5naW5lLkVuZ2luZWAsIDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYCwKICAgICAgIGFzIHdlbGwKICAgICAgIGFzIGluc3RhbmNlcyBvZiBlYWNoIG9mIHRob3NlIGNsYXNzZXMuICBFdmVudHMgYWNyb3NzIGFsbAogICAgICAgZm91ciBzY29wZXMgd2lsbCBmaXJlIG9mZiBmb3IgYSBnaXZlbiBpbnN0YW5jZSBvZgogICAgICAgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gLiAgSG93ZXZlciwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHRoZQogICAgICAgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gIG9iamVjdCBkZXRlcm1pbmVzIGF0IGluc3RhbnRpYXRpb24gdGltZQogICAgICAgd2hldGhlciBvciBub3QgaXRzIHBhcmVudCA6Y2xhc3M6YF9lbmdpbmUuRW5naW5lYCBoYXMgZXZlbnQgbGlzdGVuZXJzCiAgICAgICBlc3RhYmxpc2hlZC4gICBFdmVudCBsaXN0ZW5lcnMgYWRkZWQgdG8gdGhlIDpjbGFzczpgX2VuZ2luZS5FbmdpbmVgCiAgICAgICBjbGFzcyBvciB0byBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YF9lbmdpbmUuRW5naW5lYAogICAgICAgKmFmdGVyKiB0aGUgaW5zdGFudGlhdGlvbgogICAgICAgb2YgYSBkZXBlbmRlbnQgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gIGluc3RhbmNlIHdpbGwgdXN1YWxseQogICAgICAgKm5vdCogYmUgYXZhaWxhYmxlIG9uIHRoYXQgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gIGluc3RhbmNlLgogICAgICAgVGhlIG5ld2x5CiAgICAgICBhZGRlZCBsaXN0ZW5lcnMgd2lsbCBpbnN0ZWFkIHRha2UgZWZmZWN0IGZvcgogICAgICAgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gCiAgICAgICBpbnN0YW5jZXMgY3JlYXRlZCBzdWJzZXF1ZW50IHRvIHRob3NlIGV2ZW50IGxpc3RlbmVycyBiZWluZwogICAgICAgZXN0YWJsaXNoZWQgb24gdGhlIHBhcmVudCA6Y2xhc3M6YF9lbmdpbmUuRW5naW5lYCBjbGFzcyBvciBpbnN0YW5jZS4KCiAgICA6cGFyYW0gcmV0dmFsPUZhbHNlOiBBcHBsaWVzIHRvIHRoZSA6bWV0aDpgLmJlZm9yZV9leGVjdXRlYCBhbmQKICAgICAgOm1ldGg6YC5iZWZvcmVfY3Vyc29yX2V4ZWN1dGVgIGV2ZW50cyBvbmx5LiAgV2hlbiBUcnVlLCB0aGUKICAgICAgdXNlci1kZWZpbmVkIGV2ZW50IGZ1bmN0aW9uIG11c3QgaGF2ZSBhIHJldHVybiB2YWx1ZSwgd2hpY2gKICAgICAgaXMgYSB0dXBsZSBvZiBwYXJhbWV0ZXJzIHRoYXQgcmVwbGFjZSB0aGUgZ2l2ZW4gc3RhdGVtZW50CiAgICAgIGFuZCBwYXJhbWV0ZXJzLiAgU2VlIHRob3NlIG1ldGhvZHMgZm9yIGEgZGVzY3JpcHRpb24gb2YKICAgICAgc3BlY2lmaWMgcmV0dXJuIGFyZ3VtZW50cy4KCiAgICDaClNvbWVFbmdpbmVG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ICAgIGFzIGVhcmx5IG1hbmlwdWxhdGlvbiBvZiB0aGUgcGFyYW1ldGVycyBiZWluZyBzZW50IHRvIHRoZSBkYXRhYmFzZSwKICAgICAgICBhcyB0aGUgcGFyYW1ldGVyIGxpc3RzIHdpbGwgYmUgaW4gYSBjb25zaXN0ZW50IGZvcm1hdCBoZXJlLgoKICAgICAgICBUaGlzIGV2ZW50IGNhbiBiZSBvcHRpb25hbGx5IGVzdGFibGlzaGVkIHdpdGggdGhlIGBgcmV0dmFsPVRydWVgYAogICAgICAgIGZsYWcuICBUaGUgYGBjbGF1c2VlbGVtZW50YGAsIGBgbXVsdGlwYXJhbXNgYCwgYW5kIGBgcGFyYW1zYGAKICAgICAgICBhcmd1bWVudHMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGEgdGhyZWUtdHVwbGUgaW4gdGhpcyBjYXNlOjoKCiAgICAgICAgICAgIEBldmVudC5saXN0ZW5zX2ZvcihFbmdpbmUsICJiZWZvcmVfZXhlY3V0ZSIsIHJldHZhbD1UcnVlKQogICAgICAgICAgICBkZWYgYmVmb3JlX2V4ZWN1dGUoY29ubiwgY2xhdXNlZWxlbWVudCwgbXVsdGlwYXJhbXMsIHBhcmFtcyk6CiAgICAgICAgICAgICAgICAjIGRvIHNvbWV0aGluZyB3aXRoIGNsYXVzZWVsZW1lbnQsIG11bHRpcGFyYW1zLCBwYXJhbXMKICAgICAgICAgICAgICAgIHJldHVybiBjbGF1c2VlbGVtZW50LCBtdWx0aXBhcmFtcywgcGFyYW1zCgogICAgICAgIDpwYXJhbSBjb25uOiA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgb2JqZWN0CiAgICAgICAgOnBhcmFtIGNsYXVzZWVsZW1lbnQ6IFNRTCBleHByZXNzaW9uIGNvbnN0cnVjdCwgOmNsYXNzOmAuQ29tcGlsZWRgCiAgICAgICAgIGluc3RhbmNlLCBvciBzdHJpbmcgc3RhdGVtZW50IHBhc3NlZCB0bwogICAgICAgICA6bWV0aDpgX2VuZ2luZS5Db25uZWN0aW9uLmV4ZWN1dGVgLgogICAgICAgIDpwYXJhbSBtdWx0aXBhcmFtczogTXVsdGlwbGUgcGFyYW1ldGVyIHNldHMsIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMuCiAgICAgICAgOnBhcmFtIHBhcmFtczogU2luZ2xlIHBhcmFtZXRlciBzZXQsIGEgc2luZ2xlIGRpY3Rpb25hcnkuCgogICAgICAgIC4uIHNlZWFsc286OgoKICAgICAgICAgICAgOm1ldGg6YC5iZWZvcmVfY3Vyc29yX2V4ZWN1dGVgCgogICAgICAgIE5yDwAAACkFchEAAAByYQAAAHJiAAAAcmMAAAByZAAAAHMFAAAAICAgICByFQAAAHJfAAAAeh9Db25uZWN0aW9uRXZlbnRzLmJlZm9yZV9leGVjdXRlngIAAHIXAAAAchgAAABjBgAAAAAAAAAAAAAAAQAAAAMAAADzBgAAAJcAZAFTACkCYRcCAABJbnRlcmNlcHQgaGlnaCBsZXZlbCBleGVjdXRlKCkgZXZlbnRzIGFmdGVyIGV4ZWN1dGUuCgoKICAgICAgICA6cGFyYW0gY29ubjogOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gIG9iamVjdAogICAgICAgIDpwYXJhbSBjbGF1c2VlbGVtZW50OiBTUUwgZXhwcmVzc2lvbiBjb25zdHJ1Y3QsIDpjbGFzczpgLkNvbXBpbGVkYAogICAgICAgICBpbnN0YW5jZSwgb3Igc3RyaW5nIHN0YXRlbWVudCBwYXNzZWQgdG8KICAgICAgICAgOm1ldGg6YF9lbmdpbmUuQ29ubmVjdGlvbi5leGVjdXRlYC4KICAgICAgICA6cGFyYW0gbXVsdGlwYXJhbXM6IE11bHRpcGxlIHBhcmFtZXRlciBzZXRzLCBhIGxpc3Qgb2YgZGljdGlvbmFyaWVzLgogICAgICAgIDpwYXJhbSBwYXJhbXM6IFNpbmdsZSBwYXJhbWV0ZXIgc2V0LCBhIHNpbmdsZSBkaWN0aW9uYXJ5LgogICAgICAgIDpwYXJhbSByZXN1bHQ6IDpjbGFzczpgX2VuZ2luZS5SZXN1bHRQcm94eWAgZ2VuZXJhdGVkIGJ5IHRoZSBleGVjdXRpb24KICAgICAgICAgICAgICAgICAgICAgIC4KCiAgICAgICAgTnIPAAAAKQZyEQAAAHJhAAAAcmIAAAByYwAAAHJkAAAA2gZyZXN1bHRzBgAAACAgICAgIHIVAAAA2g1hZnRlcl9leGVjdXRleh5Db25uZWN0aW9uRXZlbnRzLmFmdGVyX2V4ZWN1dGW8AgAAchcAAAByGAAAAGMHAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJhlAYAAEludGVyY2VwdCBsb3ctbGV2ZWwgY3Vyc29yIGV4ZWN1dGUoKSBldmVudHMgYmVmb3JlIGV4ZWN1dGlvbiwKICAgICAgICByZWNlaXZpbmcgdGhlIHN0cmluZyBTUUwgc3RhdGVtZW50IGFuZCBEQkFQSS1zcGVjaWZpYyBwYXJhbWV0ZXIgbGlzdCB0bwogICAgICAgIGJlIGludm9rZWQgYWdhaW5zdCBhIGN1cnNvci4KCiAgICAgICAgVGhpcyBldmVudCBpcyBhIGdvb2QgY2hvaWNlIGZvciBsb2dnaW5nIGFzIHdlbGwgYXMgbGF0ZSBtb2RpZmljYXRpb25zCiAgICAgICAgdG8gdGhlIFNRTCBzdHJpbmcuICBJdCdzIGxlc3MgaWRlYWwgZm9yIHBhcmFtZXRlciBtb2RpZmljYXRpb25zIGV4Y2VwdAogICAgICAgIGZvciB0aG9zZSB3aGljaCBhcmUgc3BlY2lmaWMgdG8gYSB0YXJnZXQgYmFja2VuZC4KCiAgICAgICAgVGhpcyBldmVudCBjYW4gYmUgb3B0aW9uYWxseSBlc3RhYmxpc2hlZCB3aXRoIHRoZSBgYHJldHZhbD1UcnVlYGAKICAgICAgICBmbGFnLiAgVGhlIGBgc3RhdGVtZW50YGAgYW5kIGBgcGFyYW1ldGVyc2BgIGFyZ3VtZW50cyBzaG91bGQgYmUKICAgICAgICByZXR1cm5lZCBhcyBhIHR3by10dXBsZSBpbiB0aGlzIGNhc2U6OgoKICAgICAgICAgICAgQGV2ZW50Lmxpc3RlbnNfZm9yKEVuZ2luZSwgImJlZm9yZV9jdXJzb3JfZXhlY3V0ZSIsIHJldHZhbD1UcnVlKQogICAgICAgICAgICBkZWYgYmVmb3JlX2N1cnNvcl9leGVjdXRlKGNvbm4sIGN1cnNvciwgc3RhdGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycywgY29udGV4dCwgZXhlY3V0ZW1hbnkpOgogICAgICAgICAgICAgICAgIyBkbyBzb21ldGhpbmcgd2l0aCBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMKICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZW1lbnQsIHBhcmFtZXRlcnMKCiAgICAgICAgU2VlIHRoZSBleGFtcGxlIGF0IDpjbGFzczpgX2V2ZW50cy5Db25uZWN0aW9uRXZlbnRzYC4KCiAgICAgICAgOnBhcmFtIGNvbm46IDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYCBvYmplY3QKICAgICAgICA6cGFyYW0gY3Vyc29yOiBEQkFQSSBjdXJzb3Igb2JqZWN0CiAgICAgICAgOnBhcmFtIHN0YXRlbWVudDogc3RyaW5nIFNRTCBzdGF0ZW1lbnQsIGFzIHRvIGJlIHBhc3NlZCB0byB0aGUgREJBUEkKICAgICAgICA6cGFyYW0gcGFyYW1ldGVyczogRGljdGlvbmFyeSwgdHVwbGUsIG9yIGxpc3Qgb2YgcGFyYW1ldGVycyBiZWluZwogICAgICAgICBwYXNzZWQgdG8gdGhlIGBgZXhlY3V0ZSgpYGAgb3IgYGBleGVjdXRlbWFueSgpYGAgbWV0aG9kIG9mIHRoZQogICAgICAgICBEQkFQSSBgYGN1cnNvcmBgLiAgSW4gc29tZSBjYXNlcyBtYXkgYmUgYGBOb25lYGAuCiAgICAgICAgOnBhcmFtIGNvbnRleHQ6IDpjbGFzczpgLkV4ZWN1dGlvbkNvbnRleHRgIG9iamVjdCBpbiB1c2UuICBNYXkKICAgICAgICAgYmUgYGBOb25lYGAuCiAgICAgICAgOnBhcmFtIGV4ZWN1dGVtYW55OiBib29sZWFuLCBpZiBgYFRydWVgYCwgdGhpcyBpcyBhbiBgYGV4ZWN1dGVtYW55KClgYAogICAgICAgICBjYWxsLCBpZiBgYEZhbHNlYGAsIHRoaXMgaXMgYW4gYGBleGVjdXRlKClgYCBjYWxsLgoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDptZXRoOmAuYmVmb3JlX2V4ZWN1dGVgCgogICAgICAgICAgICA6bWV0aDpgLmFmdGVyX2N1cnNvcl9leGVjdXRlYAoKICAgICAgICBOcg8AAACpB3IRAAAAcmEAAAByaQAAAHJqAAAAcmsAAABybAAAAHJtAAAAcwcAAAAgICAgICAgchUAAAByZwAAAHomQ29ubmVjdGlvbkV2ZW50cy5iZWZvcmVfY3Vyc29yX2V4ZWN1dGXLAgAAchcAAAByGAAAAGMHAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJhUAMAAEludGVyY2VwdCBsb3ctbGV2ZWwgY3Vyc29yIGV4ZWN1dGUoKSBldmVudHMgYWZ0ZXIgZXhlY3V0aW9uLgoKICAgICAgICA6cGFyYW0gY29ubjogOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gIG9iamVjdAogICAgICAgIDpwYXJhbSBjdXJzb3I6IERCQVBJIGN1cnNvciBvYmplY3QuICBXaWxsIGhhdmUgcmVzdWx0cyBwZW5kaW5nCiAgICAgICAgIGlmIHRoZSBzdGF0ZW1lbnQgd2FzIGEgU0VMRUNULCBidXQgdGhlc2Ugc2hvdWxkIG5vdCBiZSBjb25zdW1lZAogICAgICAgICBhcyB0aGV5IHdpbGwgYmUgbmVlZGVkIGJ5IHRoZSA6Y2xhc3M6YF9lbmdpbmUuUmVzdWx0UHJveHlgLgogICAgICAgIDpwYXJhbSBzdGF0ZW1lbnQ6IHN0cmluZyBTUUwgc3RhdGVtZW50LCBhcyBwYXNzZWQgdG8gdGhlIERCQVBJCiAgICAgICAgOnBhcmFtIHBhcmFtZXRlcnM6IERpY3Rpb25hcnksIHR1cGxlLCBvciBsaXN0IG9mIHBhcmFtZXRlcnMgYmVpbmcKICAgICAgICAgcGFzc2VkIHRvIHRoZSBgYGV4ZWN1dGUoKWBgIG9yIGBgZXhlY3V0ZW1hbnkoKWBgIG1ldGhvZCBvZiB0aGUKICAgICAgICAgREJBUEkgYGBjdXJzb3JgYC4gIEluIHNvbWUgY2FzZXMgbWF5IGJlIGBgTm9uZWBgLgogICAgICAgIDpwYXJhbSBjb250ZXh0OiA6Y2xhc3M6YC5FeGVjdXRpb25Db250ZXh0YCBvYmplY3QgaW4gdXNlLiAgTWF5CiAgICAgICAgIGJlIGBgTm9uZWBgLgogICAgICAgIDpwYXJhbSBleGVjdXRlbWFueTogYm9vbGVhbiwgaWYgYGBUcnVlYGAsIHRoaXMgaXMgYW4gYGBleGVjdXRlbWFueSgpYGAKICAgICAgICAgY2FsbCwgaWYgYGBGYWxzZWBgLCB0aGlzIGlzIGFuIGBgZXhlY3V0ZSgpYGAgY2FsbC4KCiAgICAgICAgTnIPAAAAcoAAAABzBwAAACAgICAgICByFQAAANoUYWZ0ZXJfY3Vyc29yX2V4ZWN1dGV6JUNvbm5lY3Rpb25FdmVudHMuYWZ0ZXJfY3Vyc29yX2V4ZWN1dGX1AgAAchcAAAByGAAAAHoDMC45erZUaGUgOm1ldGg6YF9ldmVudHMuQ29ubmVjdGlvbkV2ZW50cy5kYmFwaV9lcnJvcmAgZXZlbnQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuIFBsZWFzZSByZWZlciB0byB0aGUgOm1ldGg6YF9ldmVudHMuQ29ubmVjdGlvbkV2ZW50cy5oYW5kbGVfZXJyb3JgIGV2ZW50LmMHAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJhjgcAAEludGVyY2VwdCBhIHJhdyBEQkFQSSBlcnJvci4KCiAgICAgICAgVGhpcyBldmVudCBpcyBjYWxsZWQgd2l0aCB0aGUgREJBUEkgZXhjZXB0aW9uIGluc3RhbmNlCiAgICAgICAgcmVjZWl2ZWQgZnJvbSB0aGUgREJBUEkgaXRzZWxmLCAqYmVmb3JlKiBTUUxBbGNoZW15IHdyYXBzIHRoZQogICAgICAgIGV4Y2VwdGlvbiB3aXRoIGl0J3Mgb3duIGV4Y2VwdGlvbiB3cmFwcGVycywgYW5kIGJlZm9yZSBhbnkKICAgICAgICBvdGhlciBvcGVyYXRpb25zIGFyZSBwZXJmb3JtZWQgb24gdGhlIERCQVBJIGN1cnNvcjsgdGhlCiAgICAgICAgZXhpc3RpbmcgdHJhbnNhY3Rpb24gcmVtYWlucyBpbiBlZmZlY3QgYXMgd2VsbCBhcyBhbnkgc3RhdGUKICAgICAgICBvbiB0aGUgY3Vyc29yLgoKICAgICAgICBUaGUgdXNlIGNhc2UgaGVyZSBpcyB0byBpbmplY3QgbG93LWxldmVsIGV4Y2VwdGlvbiBoYW5kbGluZwogICAgICAgIGludG8gYW4gOmNsYXNzOmBfZW5naW5lLkVuZ2luZWAsIHR5cGljYWxseSBmb3IgbG9nZ2luZyBhbmQKICAgICAgICBkZWJ1Z2dpbmcgcHVycG9zZXMuCgogICAgICAgIC4uIHdhcm5pbmc6OgoKICAgICAgICAgICAgQ29kZSBzaG91bGQgKipub3QqKiBtb2RpZnkKICAgICAgICAgICAgYW55IHN0YXRlIG9yIHRocm93IGFueSBleGNlcHRpb25zIGhlcmUgYXMgdGhpcyB3aWxsCiAgICAgICAgICAgIGludGVyZmVyZSB3aXRoIFNRTEFsY2hlbXkncyBjbGVhbnVwIGFuZCBlcnJvciBoYW5kbGluZwogICAgICAgICAgICByb3V0aW5lcy4gIEZvciBleGNlcHRpb24gbW9kaWZpY2F0aW9uLCBwbGVhc2UgcmVmZXIgdG8gdGhlCiAgICAgICAgICAgIG5ldyA6bWV0aDpgX2V2ZW50cy5Db25uZWN0aW9uRXZlbnRzLmhhbmRsZV9lcnJvcmAgZXZlbnQuCgogICAgICAgIFN1YnNlcXVlbnQgdG8gdGhpcyBob29rLCBTUUxBbGNoZW15IG1heSBhdHRlbXB0IGFueQogICAgICAgIG51bWJlciBvZiBvcGVyYXRpb25zIG9uIHRoZSBjb25uZWN0aW9uL2N1cnNvciwgaW5jbHVkaW5nCiAgICAgICAgY2xvc2luZyB0aGUgY3Vyc29yLCByb2xsaW5nIGJhY2sgb2YgdGhlIHRyYW5zYWN0aW9uIGluIHRoZQogICAgICAgIGNhc2Ugb2YgY29ubmVjdGlvbmxlc3MgZXhlY3V0aW9uLCBhbmQgZGlzcG9zaW5nIG9mIHRoZSBlbnRpcmUKICAgICAgICBjb25uZWN0aW9uIHBvb2wgaWYgYSAiZGlzY29ubmVjdCIgd2FzIGRldGVjdGVkLiAgIFRoZQogICAgICAgIGV4Y2VwdGlvbiBpcyB0aGVuIHdyYXBwZWQgaW4gYSBTUUxBbGNoZW15IERCQVBJIGV4Y2VwdGlvbgogICAgICAgIHdyYXBwZXIgYW5kIHJlLXRocm93bi4KCiAgICAgICAgOnBhcmFtIGNvbm46IDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYCBvYmplY3QKICAgICAgICA6cGFyYW0gY3Vyc29yOiBEQkFQSSBjdXJzb3Igb2JqZWN0CiAgICAgICAgOnBhcmFtIHN0YXRlbWVudDogc3RyaW5nIFNRTCBzdGF0ZW1lbnQsIGFzIHBhc3NlZCB0byB0aGUgREJBUEkKICAgICAgICA6cGFyYW0gcGFyYW1ldGVyczogRGljdGlvbmFyeSwgdHVwbGUsIG9yIGxpc3Qgb2YgcGFyYW1ldGVycyBiZWluZwogICAgICAgICBwYXNzZWQgdG8gdGhlIGBgZXhlY3V0ZSgpYGAgb3IgYGBleGVjdXRlbWFueSgpYGAgbWV0aG9kIG9mIHRoZQogICAgICAgICBEQkFQSSBgYGN1cnNvcmBgLiAgSW4gc29tZSBjYXNlcyBtYXkgYmUgYGBOb25lYGAuCiAgICAgICAgOnBhcmFtIGNvbnRleHQ6IDpjbGFzczpgLkV4ZWN1dGlvbkNvbnRleHRgIG9iamVjdCBpbiB1c2UuICBNYXkKICAgICAgICAgYmUgYGBOb25lYGAuCiAgICAgICAgOnBhcmFtIGV4Y2VwdGlvbjogVGhlICoqdW53cmFwcGVkKiogZXhjZXB0aW9uIGVtaXR0ZWQgZGlyZWN0bHkgZnJvbSB0aGUKICAgICAgICAgREJBUEkuICBUaGUgY2xhc3MgaGVyZSBpcyBzcGVjaWZpYyB0byB0aGUgREJBUEkgbW9kdWxlIGluIHVzZS4KCiAgICAgICAgTnIPAAAAKQdyEQAAAHJhAAAAcmkAAAByagAAAHJrAAAAcmwAAAByUAAAAHMHAAAAICAgICAgIHIVAAAA2gtkYmFwaV9lcnJvcnocQ29ubmVjdGlvbkV2ZW50cy5kYmFwaV9lcnJvcgkDAAByFwAAAHIYAAAAYwIAAAAAAAAAAAAAAAEAAAADAAAA8wYAAACXAGQBUwApAmGQGgAASW50ZXJjZXB0IGFsbCBleGNlcHRpb25zIHByb2Nlc3NlZCBieSB0aGUKICAgICAgICA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAuCgogICAgICAgIFRoaXMgaW5jbHVkZXMgYWxsIGV4Y2VwdGlvbnMgZW1pdHRlZCBieSB0aGUgREJBUEkgYXMgd2VsbCBhcwogICAgICAgIHdpdGhpbiBTUUxBbGNoZW15J3Mgc3RhdGVtZW50IGludm9jYXRpb24gcHJvY2VzcywgaW5jbHVkaW5nCiAgICAgICAgZW5jb2RpbmcgZXJyb3JzIGFuZCBvdGhlciBzdGF0ZW1lbnQgdmFsaWRhdGlvbiBlcnJvcnMuICBPdGhlciBhcmVhcwogICAgICAgIGluIHdoaWNoIHRoZSBldmVudCBpcyBpbnZva2VkIGluY2x1ZGUgdHJhbnNhY3Rpb24gYmVnaW4gYW5kIGVuZCwKICAgICAgICByZXN1bHQgcm93IGZldGNoaW5nLCBjdXJzb3IgY3JlYXRpb24uCgogICAgICAgIE5vdGUgdGhhdCA6bWV0aDpgLmhhbmRsZV9lcnJvcmAgbWF5IHN1cHBvcnQgbmV3IGtpbmRzIG9mIGV4Y2VwdGlvbnMKICAgICAgICBhbmQgbmV3IGNhbGxpbmcgc2NlbmFyaW9zIGF0ICphbnkgdGltZSouICBDb2RlIHdoaWNoIHVzZXMgdGhpcwogICAgICAgIGV2ZW50IG11c3QgZXhwZWN0IG5ldyBjYWxsaW5nIHBhdHRlcm5zIHRvIGJlIHByZXNlbnQgaW4gbWlub3IKICAgICAgICByZWxlYXNlcy4KCiAgICAgICAgVG8gc3VwcG9ydCB0aGUgd2lkZSB2YXJpZXR5IG9mIG1lbWJlcnMgdGhhdCBjb3JyZXNwb25kIHRvIGFuIGV4Y2VwdGlvbiwKICAgICAgICBhcyB3ZWxsIGFzIHRvIGFsbG93IGV4dGVuc2liaWxpdHkgb2YgdGhlIGV2ZW50IHdpdGhvdXQgYmFja3dhcmRzCiAgICAgICAgaW5jb21wYXRpYmlsaXR5LCB0aGUgc29sZSBhcmd1bWVudCByZWNlaXZlZCBpcyBhbiBpbnN0YW5jZSBvZgogICAgICAgIDpjbGFzczpgLkV4Y2VwdGlvbkNvbnRleHRgLiAgIFRoaXMgb2JqZWN0IGNvbnRhaW5zIGRhdGEgbWVtYmVycwogICAgICAgIHJlcHJlc2VudGluZyBkZXRhaWwgYWJvdXQgdGhlIGV4Y2VwdGlvbi4KCiAgICAgICAgVXNlIGNhc2VzIHN1cHBvcnRlZCBieSB0aGlzIGhvb2sgaW5jbHVkZToKCiAgICAgICAgKiByZWFkLW9ubHksIGxvdy1sZXZlbCBleGNlcHRpb24gaGFuZGxpbmcgZm9yIGxvZ2dpbmcgYW5kCiAgICAgICAgICBkZWJ1Z2dpbmcgcHVycG9zZXMKICAgICAgICAqIGV4Y2VwdGlvbiByZS13cml0aW5nCiAgICAgICAgKiBFc3RhYmxpc2hpbmcgb3IgZGlzYWJsaW5nIHdoZXRoZXIgYSBjb25uZWN0aW9uIG9yIHRoZSBvd25pbmcKICAgICAgICAgIGNvbm5lY3Rpb24gcG9vbCBpcyBpbnZhbGlkYXRlZCBvciBleHBpcmVkIGluIHJlc3BvbnNlIHRvIGEKICAgICAgICAgIHNwZWNpZmljIGV4Y2VwdGlvbi4gWzFdXy4KCiAgICAgICAgVGhlIGhvb2sgaXMgY2FsbGVkIHdoaWxlIHRoZSBjdXJzb3IgZnJvbSB0aGUgZmFpbGVkIG9wZXJhdGlvbgogICAgICAgIChpZiBhbnkpIGlzIHN0aWxsIG9wZW4gYW5kIGFjY2Vzc2libGUuICAgU3BlY2lhbCBjbGVhbnVwIG9wZXJhdGlvbnMKICAgICAgICBjYW4gYmUgY2FsbGVkIG9uIHRoaXMgY3Vyc29yOyBTUUxBbGNoZW15IHdpbGwgYXR0ZW1wdCB0byBjbG9zZQogICAgICAgIHRoaXMgY3Vyc29yIHN1YnNlcXVlbnQgdG8gdGhpcyBob29rIGJlaW5nIGludm9rZWQuICBJZiB0aGUgY29ubmVjdGlvbgogICAgICAgIGlzIGluICJhdXRvY29tbWl0IiBtb2RlLCB0aGUgdHJhbnNhY3Rpb24gYWxzbyByZW1haW5zIG9wZW4gd2l0aGluCiAgICAgICAgdGhlIHNjb3BlIG9mIHRoaXMgaG9vazsgdGhlIHJvbGxiYWNrIG9mIHRoZSBwZXItc3RhdGVtZW50IHRyYW5zYWN0aW9uCiAgICAgICAgYWxzbyBvY2N1cnMgYWZ0ZXIgdGhlIGhvb2sgaXMgY2FsbGVkLgoKICAgICAgICAuLiBub3RlOjoKCiAgICAgICAgICAgIC4uIFsxXSBUaGUgcG9vbCAicHJlX3BpbmciIGhhbmRsZXIgZW5hYmxlZCB1c2luZyB0aGUKICAgICAgICAgICAgICAgIDpwYXJhbXJlZjpgX3NhLmNyZWF0ZV9lbmdpbmUucG9vbF9wcmVfcGluZ2AgcGFyYW1ldGVyIGRvZXMKICAgICAgICAgICAgICAgICoqbm90KiogY29uc3VsdCB0aGlzIGV2ZW50IGJlZm9yZSBkZWNpZGluZyBpZiB0aGUgInBpbmciCiAgICAgICAgICAgICAgICByZXR1cm5lZCBmYWxzZSwgYXMgb3Bwb3NlZCB0byByZWNlaXZpbmcgYW4gdW5oYW5kbGVkIGVycm9yLgogICAgICAgICAgICAgICAgRm9yIHRoaXMgdXNlIGNhc2UsIHRoZSA6cmVmOmBsZWdhY3kgcmVjaXBlIGJhc2VkIG9uCiAgICAgICAgICAgICAgICBlbmdpbmVfY29ubmVjdCgpIG1heSBiZSB1c2VkCiAgICAgICAgICAgICAgICA8cG9vbF9kaXNjb25uZWN0c19wZXNzaW1pc3RpY19jdXN0b20+YC4gIEEgZnV0dXJlIEFQSSBhbGxvdwogICAgICAgICAgICAgICAgbW9yZSBjb21wcmVoZW5zaXZlIGN1c3RvbWl6YXRpb24gb2YgdGhlICJkaXNjb25uZWN0IgogICAgICAgICAgICAgICAgZGV0ZWN0aW9uIG1lY2hhbmlzbSBhY3Jvc3MgYWxsIGZ1bmN0aW9ucy4KCiAgICAgICAgQSBoYW5kbGVyIGZ1bmN0aW9uIGhhcyB0d28gb3B0aW9ucyBmb3IgcmVwbGFjaW5nCiAgICAgICAgdGhlIFNRTEFsY2hlbXktY29uc3RydWN0ZWQgZXhjZXB0aW9uIGludG8gb25lIHRoYXQgaXMgdXNlcgogICAgICAgIGRlZmluZWQuICAgSXQgY2FuIGVpdGhlciByYWlzZSB0aGlzIG5ldyBleGNlcHRpb24gZGlyZWN0bHksIGluCiAgICAgICAgd2hpY2ggY2FzZSBhbGwgZnVydGhlciBldmVudCBsaXN0ZW5lcnMgYXJlIGJ5cGFzc2VkIGFuZCB0aGUKICAgICAgICBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQsIGFmdGVyIGFwcHJvcHJpYXRlIGNsZWFudXAgYXMgdGFrZW4KICAgICAgICBwbGFjZTo6CgogICAgICAgICAgICBAZXZlbnQubGlzdGVuc19mb3IoRW5naW5lLCAiaGFuZGxlX2Vycm9yIikKICAgICAgICAgICAgZGVmIGhhbmRsZV9leGNlcHRpb24oY29udGV4dCk6CiAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNvbnRleHQub3JpZ2luYWxfZXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgIHBzeWNvcGcyLk9wZXJhdGlvbmFsRXJyb3IpIGFuZCBcCiAgICAgICAgICAgICAgICAgICAgImZhaWxlZCIgaW4gc3RyKGNvbnRleHQub3JpZ2luYWxfZXhjZXB0aW9uKToKICAgICAgICAgICAgICAgICAgICByYWlzZSBNeVNwZWNpYWxFeGNlcHRpb24oImZhaWxlZCBvcGVyYXRpb24iKQoKICAgICAgICAuLiB3YXJuaW5nOjogIEJlY2F1c2UgdGhlCiAgICAgICAgICAgOm1ldGg6YF9ldmVudHMuQ29ubmVjdGlvbkV2ZW50cy5oYW5kbGVfZXJyb3JgCiAgICAgICAgICAgZXZlbnQgc3BlY2lmaWNhbGx5IHByb3ZpZGVzIGZvciBleGNlcHRpb25zIHRvIGJlIHJlLXRocm93biBhcwogICAgICAgICAgIHRoZSB1bHRpbWF0ZSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoZSBmYWlsZWQgc3RhdGVtZW50LAogICAgICAgICAgICoqc3RhY2sgdHJhY2VzIHdpbGwgYmUgbWlzbGVhZGluZyoqIGlmIHRoZSB1c2VyLWRlZmluZWQgZXZlbnQKICAgICAgICAgICBoYW5kbGVyIGl0c2VsZiBmYWlscyBhbmQgdGhyb3dzIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uOwogICAgICAgICAgIHRoZSBzdGFjayB0cmFjZSBtYXkgbm90IGlsbHVzdHJhdGUgdGhlIGFjdHVhbCBjb2RlIGxpbmUgdGhhdAogICAgICAgICAgIGZhaWxlZCEgIEl0IGlzIGFkdmlzZWQgdG8gY29kZSBjYXJlZnVsbHkgaGVyZSBhbmQgdXNlCiAgICAgICAgICAgbG9nZ2luZyBhbmQvb3IgaW5saW5lIGRlYnVnZ2luZyBpZiB1bmV4cGVjdGVkIGV4Y2VwdGlvbnMgYXJlCiAgICAgICAgICAgb2NjdXJyaW5nLgoKICAgICAgICBBbHRlcm5hdGl2ZWx5LCBhICJjaGFpbmVkIiBzdHlsZSBvZiBldmVudCBoYW5kbGluZyBjYW4gYmUKICAgICAgICB1c2VkLCBieSBjb25maWd1cmluZyB0aGUgaGFuZGxlciB3aXRoIHRoZSBgYHJldHZhbD1UcnVlYGAKICAgICAgICBtb2RpZmllciBhbmQgcmV0dXJuaW5nIHRoZSBuZXcgZXhjZXB0aW9uIGluc3RhbmNlIGZyb20gdGhlCiAgICAgICAgZnVuY3Rpb24uICBJbiB0aGlzIGNhc2UsIGV2ZW50IGhhbmRsaW5nIHdpbGwgY29udGludWUgb250byB0aGUKICAgICAgICBuZXh0IGhhbmRsZXIuICAgVGhlICJjaGFpbmVkIiBleGNlcHRpb24gaXMgYXZhaWxhYmxlIHVzaW5nCiAgICAgICAgOmF0dHI6YC5FeGNlcHRpb25Db250ZXh0LmNoYWluZWRfZXhjZXB0aW9uYDo6CgogICAgICAgICAgICBAZXZlbnQubGlzdGVuc19mb3IoRW5naW5lLCAiaGFuZGxlX2Vycm9yIiwgcmV0dmFsPVRydWUpCiAgICAgICAgICAgIGRlZiBoYW5kbGVfZXhjZXB0aW9uKGNvbnRleHQpOgogICAgICAgICAgICAgICAgaWYgY29udGV4dC5jaGFpbmVkX2V4Y2VwdGlvbiBpcyBub3QgTm9uZSBhbmQgXAogICAgICAgICAgICAgICAgICAgICJzcGVjaWFsIiBpbiBjb250ZXh0LmNoYWluZWRfZXhjZXB0aW9uLm1lc3NhZ2U6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE15U3BlY2lhbEV4Y2VwdGlvbigiZmFpbGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgY2F1c2U9Y29udGV4dC5jaGFpbmVkX2V4Y2VwdGlvbikKCiAgICAgICAgSGFuZGxlcnMgdGhhdCByZXR1cm4gYGBOb25lYGAgbWF5IGJlIHVzZWQgd2l0aGluIHRoZSBjaGFpbjsgd2hlbgogICAgICAgIGEgaGFuZGxlciByZXR1cm5zIGBgTm9uZWBgLCB0aGUgcHJldmlvdXMgZXhjZXB0aW9uIGluc3RhbmNlLAogICAgICAgIGlmIGFueSwgaXMgbWFpbnRhaW5lZCBhcyB0aGUgY3VycmVudCBleGNlcHRpb24gdGhhdCBpcyBwYXNzZWQgb250byB0aGUKICAgICAgICBuZXh0IGhhbmRsZXIuCgogICAgICAgIFdoZW4gYSBjdXN0b20gZXhjZXB0aW9uIGlzIHJhaXNlZCBvciByZXR1cm5lZCwgU1FMQWxjaGVteSByYWlzZXMKICAgICAgICB0aGlzIG5ldyBleGNlcHRpb24gYXMtaXMsIGl0IGlzIG5vdCB3cmFwcGVkIGJ5IGFueSBTUUxBbGNoZW15CiAgICAgICAgb2JqZWN0LiAgSWYgdGhlIGV4Y2VwdGlvbiBpcyBub3QgYSBzdWJjbGFzcyBvZgogICAgICAgIDpjbGFzczpgc3FsYWxjaGVteS5leGMuU3RhdGVtZW50RXJyb3JgLAogICAgICAgIGNlcnRhaW4gZmVhdHVyZXMgbWF5IG5vdCBiZSBhdmFpbGFibGU7IGN1cnJlbnRseSB0aGlzIGluY2x1ZGVzCiAgICAgICAgdGhlIE9STSdzIGZlYXR1cmUgb2YgYWRkaW5nIGEgZGV0YWlsIGhpbnQgYWJvdXQgImF1dG9mbHVzaCIgdG8KICAgICAgICBleGNlcHRpb25zIHJhaXNlZCB3aXRoaW4gdGhlIGF1dG9mbHVzaCBwcm9jZXNzLgoKICAgICAgICA6cGFyYW0gY29udGV4dDogYW4gOmNsYXNzOmAuRXhjZXB0aW9uQ29udGV4dGAgb2JqZWN0LiAgU2VlIHRoaXMKICAgICAgICAgY2xhc3MgZm9yIGRldGFpbHMgb24gYWxsIGF2YWlsYWJsZSBtZW1iZXJzLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAwLjkuNyBBZGRlZCB0aGUKICAgICAgICAgICAgOm1ldGg6YF9ldmVudHMuQ29ubmVjdGlvbkV2ZW50cy5oYW5kbGVfZXJyb3JgIGhvb2suCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMS4xIFRoZSA6bWV0aDpgLmhhbmRsZV9lcnJvcmAgZXZlbnQgd2lsbCBub3cKICAgICAgICAgICByZWNlaXZlIGFsbCBleGNlcHRpb25zIHRoYXQgaW5oZXJpdCBmcm9tIGBgQmFzZUV4Y2VwdGlvbmBgLAogICAgICAgICAgIGluY2x1ZGluZyBgYFN5c3RlbUV4aXRgYCBhbmQgYGBLZXlib2FyZEludGVycnVwdGBgLiAgVGhlIHNldHRpbmcgZm9yCiAgICAgICAgICAgOmF0dHI6YC5FeGNlcHRpb25Db250ZXh0LmlzX2Rpc2Nvbm5lY3RgIGlzIGBgVHJ1ZWBgIGluIHRoaXMgY2FzZSBhbmQKICAgICAgICAgICB0aGUgZGVmYXVsdCBmb3IKICAgICAgICAgICA6YXR0cjpgLkV4Y2VwdGlvbkNvbnRleHQuaW52YWxpZGF0ZV9wb29sX29uX2Rpc2Nvbm5lY3RgIGlzCiAgICAgICAgICAgYGBGYWxzZWBgLgoKICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDEuMC4wIFRoZSA6bWV0aDpgLmhhbmRsZV9lcnJvcmAgZXZlbnQgaXMgbm93CiAgICAgICAgICAgaW52b2tlZCB3aGVuIGFuIDpjbGFzczpgX2VuZ2luZS5FbmdpbmVgIGZhaWxzIGR1cmluZyB0aGUgaW5pdGlhbAogICAgICAgICAgIGNhbGwgdG8gOm1ldGg6YF9lbmdpbmUuRW5naW5lLmNvbm5lY3RgLCBhcyB3ZWxsIGFzIHdoZW4gYQogICAgICAgICAgIDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYCBvYmplY3QgZW5jb3VudGVycyBhbiBlcnJvciBkdXJpbmcgYQogICAgICAgICAgIHJlY29ubmVjdCBvcGVyYXRpb24uCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMS4wLjAgVGhlIDptZXRoOmAuaGFuZGxlX2Vycm9yYCBldmVudCBpcwogICAgICAgICAgIG5vdCBmaXJlZCBvZmYgd2hlbiBhIGRpYWxlY3QgbWFrZXMgdXNlIG9mIHRoZQogICAgICAgICAgIGBgc2tpcF91c2VyX2Vycm9yX2V2ZW50c2BgIGV4ZWN1dGlvbiBvcHRpb24uICAgVGhpcyBpcyB1c2VkCiAgICAgICAgICAgYnkgZGlhbGVjdHMgd2hpY2ggaW50ZW5kIHRvIGNhdGNoIFNRTEFsY2hlbXktc3BlY2lmaWMgZXhjZXB0aW9ucwogICAgICAgICAgIHdpdGhpbiBzcGVjaWZpYyBvcGVyYXRpb25zLCBzdWNoIGFzIHdoZW4gdGhlIE15U1FMIGRpYWxlY3QgZGV0ZWN0cwogICAgICAgICAgIGEgdGFibGUgbm90IHByZXNlbnQgd2l0aGluIHRoZSBgYGhhc190YWJsZSgpYGAgZGlhbGVjdCBtZXRob2QuCiAgICAgICAgICAgUHJpb3IgdG8gMS4wLjAsIGNvZGUgd2hpY2ggaW1wbGVtZW50cyA6bWV0aDpgLmhhbmRsZV9lcnJvcmAgbmVlZHMKICAgICAgICAgICB0byBlbnN1cmUgdGhhdCBleGNlcHRpb25zIHRocm93biBpbiB0aGVzZSBzY2VuYXJpb3MgYXJlIHJlLXJhaXNlZAogICAgICAgICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgoKICAgICAgICBOcg8AAAApAnIRAAAA2hFleGNlcHRpb25fY29udGV4dHMCAAAAICByFQAAAHJvAAAAeh1Db25uZWN0aW9uRXZlbnRzLmhhbmRsZV9lcnJvcj0DAAByFwAAAHIYAAAAYwMAAAAAAAAAAAAAAAEAAAADAAAA8wYAAACXAGQBUwApAmHWCQAASW50ZXJjZXB0IHRoZSBjcmVhdGlvbiBvZiBhIG5ldyA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAuCgogICAgICAgIFRoaXMgZXZlbnQgaXMgY2FsbGVkIHR5cGljYWxseSBhcyB0aGUgZGlyZWN0IHJlc3VsdCBvZiBjYWxsaW5nCiAgICAgICAgdGhlIDptZXRoOmBfZW5naW5lLkVuZ2luZS5jb25uZWN0YCBtZXRob2QuCgogICAgICAgIEl0IGRpZmZlcnMgZnJvbSB0aGUgOm1ldGg6YF9ldmVudHMuUG9vbEV2ZW50cy5jb25uZWN0YCBtZXRob2QsIHdoaWNoCiAgICAgICAgcmVmZXJzIHRvIHRoZSBhY3R1YWwgY29ubmVjdGlvbiB0byBhIGRhdGFiYXNlIGF0IHRoZSBEQkFQSSBsZXZlbDsKICAgICAgICBhIERCQVBJIGNvbm5lY3Rpb24gbWF5IGJlIHBvb2xlZCBhbmQgcmV1c2VkIGZvciBtYW55IG9wZXJhdGlvbnMuCiAgICAgICAgSW4gY29udHJhc3QsIHRoaXMgZXZlbnQgcmVmZXJzIG9ubHkgdG8gdGhlIHByb2R1Y3Rpb24gb2YgYSBoaWdoZXIgbGV2ZWwKICAgICAgICA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgd3JhcHBlciBhcm91bmQgc3VjaCBhIERCQVBJIGNvbm5lY3Rpb24uCgogICAgICAgIEl0IGFsc28gZGlmZmVycyBmcm9tIHRoZSA6bWV0aDpgX2V2ZW50cy5Qb29sRXZlbnRzLmNoZWNrb3V0YCBldmVudAogICAgICAgIGluIHRoYXQgaXQgaXMgc3BlY2lmaWMgdG8gdGhlIDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYCBvYmplY3QsCiAgICAgICAgbm90IHRoZQogICAgICAgIERCQVBJIGNvbm5lY3Rpb24gdGhhdCA6bWV0aDpgX2V2ZW50cy5Qb29sRXZlbnRzLmNoZWNrb3V0YCBkZWFscyB3aXRoLAogICAgICAgIGFsdGhvdWdoCiAgICAgICAgdGhpcyBEQkFQSSBjb25uZWN0aW9uIGlzIGF2YWlsYWJsZSBoZXJlIHZpYSB0aGUKICAgICAgICA6YXR0cjpgX2VuZ2luZS5Db25uZWN0aW9uLmNvbm5lY3Rpb25gIGF0dHJpYnV0ZS4KICAgICAgICBCdXQgbm90ZSB0aGVyZSBjYW4gaW4gZmFjdAogICAgICAgIGJlIG11bHRpcGxlIDptZXRoOmBfZXZlbnRzLlBvb2xFdmVudHMuY2hlY2tvdXRgCiAgICAgICAgZXZlbnRzIHdpdGhpbiB0aGUgbGlmZXNwYW4KICAgICAgICBvZiBhIHNpbmdsZSA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgb2JqZWN0LCBpZiB0aGF0CiAgICAgICAgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gCiAgICAgICAgaXMgaW52YWxpZGF0ZWQgYW5kIHJlLWVzdGFibGlzaGVkLiAgVGhlcmUgY2FuIGFsc28gYmUgbXVsdGlwbGUKICAgICAgICA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAKICAgICAgICBvYmplY3RzIGdlbmVyYXRlZCBmb3IgdGhlIHNhbWUgYWxyZWFkeS1jaGVja2VkLW91dAogICAgICAgIERCQVBJIGNvbm5lY3Rpb24sIGluIHRoZSBjYXNlIHRoYXQgYSAiYnJhbmNoIiBvZiBhCiAgICAgICAgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gCiAgICAgICAgaXMgcHJvZHVjZWQuCgogICAgICAgIDpwYXJhbSBjb25uOiA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgb2JqZWN0LgogICAgICAgIDpwYXJhbSBicmFuY2g6IGlmIFRydWUsIHRoaXMgaXMgYSAiYnJhbmNoIiBvZiBhbiBleGlzdGluZwogICAgICAgICA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAuICBBIGJyYW5jaCBpcyBnZW5lcmF0ZWQgd2l0aGluIHRoZSBjb3Vyc2UKICAgICAgICAgb2YgYSBzdGF0ZW1lbnQgZXhlY3V0aW9uIHRvIGludm9rZSBzdXBwbGVtZW50YWwgc3RhdGVtZW50cywgbW9zdAogICAgICAgICB0eXBpY2FsbHkgdG8gcHJlLWV4ZWN1dGUgYSBTRUxFQ1Qgb2YgYSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgcHVycG9zZXMKICAgICAgICAgb2YgYW4gSU5TRVJUIHN0YXRlbWVudC4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMC45LjAKCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6cmVmOmBwb29sX2Rpc2Nvbm5lY3RzX3Blc3NpbWlzdGljYCAtIGlsbHVzdHJhdGVzIGhvdyB0byB1c2UKICAgICAgICAgICAgOm1ldGg6YF9ldmVudHMuQ29ubmVjdGlvbkV2ZW50cy5lbmdpbmVfY29ubmVjdGAKICAgICAgICAgICAgdG8gdHJhbnNwYXJlbnRseSBlbnN1cmUgcG9vbGVkIGNvbm5lY3Rpb25zIGFyZSBjb25uZWN0ZWQgdG8gdGhlCiAgICAgICAgICAgIGRhdGFiYXNlLgoKICAgICAgICAgICAgOm1ldGg6YF9ldmVudHMuUG9vbEV2ZW50cy5jaGVja291dGAKICAgICAgICAgICAgdGhlIGxvd2VyLWxldmVsIHBvb2wgY2hlY2tvdXQgZXZlbnQKICAgICAgICAgICAgZm9yIGFuIGluZGl2aWR1YWwgREJBUEkgY29ubmVjdGlvbgoKICAgICAgICAgICAgOm1ldGg6YF9ldmVudHMuQ29ubmVjdGlvbkV2ZW50cy5zZXRfY29ubmVjdGlvbl9leGVjdXRpb25fb3B0aW9uc2AKICAgICAgICAgICAgLSBhIGNvcHkKICAgICAgICAgICAgb2YgYSA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgaXMgYWxzbyBtYWRlIHdoZW4gdGhlCiAgICAgICAgICAgIDptZXRoOmBfZW5naW5lLkNvbm5lY3Rpb24uZXhlY3V0aW9uX29wdGlvbnNgIG1ldGhvZCBpcyBjYWxsZWQuCgogICAgICAgIE5yDwAAACkDchEAAAByYQAAANoGYnJhbmNocwMAAAAgICByFQAAANoOZW5naW5lX2Nvbm5lY3R6H0Nvbm5lY3Rpb25FdmVudHMuZW5naW5lX2Nvbm5lY3TDAwAAchcAAAByGAAAAGMDAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJhRQQAAEludGVyY2VwdCB3aGVuIHRoZSA6bWV0aDpgX2VuZ2luZS5Db25uZWN0aW9uLmV4ZWN1dGlvbl9vcHRpb25zYAogICAgICAgIG1ldGhvZCBpcyBjYWxsZWQuCgogICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhZnRlciB0aGUgbmV3IDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYAogICAgICAgIGhhcyBiZWVuCiAgICAgICAgcHJvZHVjZWQsIHdpdGggdGhlIG5ld2x5IHVwZGF0ZWQgZXhlY3V0aW9uIG9wdGlvbnMgY29sbGVjdGlvbiwgYnV0CiAgICAgICAgYmVmb3JlIHRoZSA6Y2xhc3M6YC5EaWFsZWN0YCBoYXMgYWN0ZWQgdXBvbiBhbnkgb2YgdGhvc2UgbmV3IG9wdGlvbnMuCgogICAgICAgIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBpcyBub3QgY2FsbGVkIHdoZW4gYSBuZXcKICAgICAgICA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAKICAgICAgICBpcyBwcm9kdWNlZCB3aGljaCBpcyBpbmhlcml0aW5nIGV4ZWN1dGlvbiBvcHRpb25zIGZyb20gaXRzIHBhcmVudAogICAgICAgIDpjbGFzczpgX2VuZ2luZS5FbmdpbmVgOyB0byBpbnRlcmNlcHQgdGhpcyBjb25kaXRpb24sIHVzZSB0aGUKICAgICAgICA6bWV0aDpgX2V2ZW50cy5Db25uZWN0aW9uRXZlbnRzLmVuZ2luZV9jb25uZWN0YCBldmVudC4KCiAgICAgICAgOnBhcmFtIGNvbm46IFRoZSBuZXdseSBjb3BpZWQgOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gIG9iamVjdAoKICAgICAgICA6cGFyYW0gb3B0czogZGljdGlvbmFyeSBvZiBvcHRpb25zIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhlCiAgICAgICAgIDptZXRoOmBfZW5naW5lLkNvbm5lY3Rpb24uZXhlY3V0aW9uX29wdGlvbnNgIG1ldGhvZC4KCiAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMC45LjAKCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgX2V2ZW50cy5Db25uZWN0aW9uRXZlbnRzLnNldF9lbmdpbmVfZXhlY3V0aW9uX29wdGlvbnNgCiAgICAgICAgICAgIC0gZXZlbnQKICAgICAgICAgICAgd2hpY2ggaXMgY2FsbGVkIHdoZW4gOm1ldGg6YF9lbmdpbmUuRW5naW5lLmV4ZWN1dGlvbl9vcHRpb25zYAogICAgICAgICAgICBpcyBjYWxsZWQuCgoKICAgICAgICBOcg8AAAApA3IRAAAAcmEAAADaBG9wdHNzAwAAACAgIHIVAAAA2iBzZXRfY29ubmVjdGlvbl9leGVjdXRpb25fb3B0aW9uc3oxQ29ubmVjdGlvbkV2ZW50cy5zZXRfY29ubmVjdGlvbl9leGVjdXRpb25fb3B0aW9uc/0DAAByFwAAAHIYAAAAYwMAAAAAAAAAAAAAAAEAAAADAAAA8wYAAACXAGQBUwApAmE3BAAASW50ZXJjZXB0IHdoZW4gdGhlIDptZXRoOmBfZW5naW5lLkVuZ2luZS5leGVjdXRpb25fb3B0aW9uc2AKICAgICAgICBtZXRob2QgaXMgY2FsbGVkLgoKICAgICAgICBUaGUgOm1ldGg6YF9lbmdpbmUuRW5naW5lLmV4ZWN1dGlvbl9vcHRpb25zYCBtZXRob2QgcHJvZHVjZXMgYSBzaGFsbG93CiAgICAgICAgY29weSBvZiB0aGUgOmNsYXNzOmBfZW5naW5lLkVuZ2luZWAgd2hpY2ggc3RvcmVzIHRoZSBuZXcgb3B0aW9ucy4KICAgICAgICBUaGF0IG5ldwogICAgICAgIDpjbGFzczpgX2VuZ2luZS5FbmdpbmVgIGlzIHBhc3NlZCBoZXJlLgogICAgICAgIEEgcGFydGljdWxhciBhcHBsaWNhdGlvbiBvZiB0aGlzCiAgICAgICAgbWV0aG9kIGlzIHRvIGFkZCBhIDptZXRoOmBfZXZlbnRzLkNvbm5lY3Rpb25FdmVudHMuZW5naW5lX2Nvbm5lY3RgCiAgICAgICAgZXZlbnQKICAgICAgICBoYW5kbGVyIHRvIHRoZSBnaXZlbiA6Y2xhc3M6YF9lbmdpbmUuRW5naW5lYAogICAgICAgIHdoaWNoIHdpbGwgcGVyZm9ybSBzb21lIHBlci0KICAgICAgICA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgdGFzayBzcGVjaWZpYyB0byB0aGVzZSBleGVjdXRpb24gb3B0aW9ucy4KCiAgICAgICAgOnBhcmFtIGNvbm46IFRoZSBuZXdseSBjb3BpZWQgOmNsYXNzOmBfZW5naW5lLkVuZ2luZWAgb2JqZWN0CgogICAgICAgIDpwYXJhbSBvcHRzOiBkaWN0aW9uYXJ5IG9mIG9wdGlvbnMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGUKICAgICAgICAgOm1ldGg6YF9lbmdpbmUuQ29ubmVjdGlvbi5leGVjdXRpb25fb3B0aW9uc2AgbWV0aG9kLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAwLjkuMAoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDptZXRoOmBfZXZlbnRzLkNvbm5lY3Rpb25FdmVudHMuc2V0X2Nvbm5lY3Rpb25fZXhlY3V0aW9uX29wdGlvbnNgCiAgICAgICAgICAgIC0gZXZlbnQKICAgICAgICAgICAgd2hpY2ggaXMgY2FsbGVkIHdoZW4gOm1ldGg6YF9lbmdpbmUuQ29ubmVjdGlvbi5leGVjdXRpb25fb3B0aW9uc2AKICAgICAgICAgICAgaXMKICAgICAgICAgICAgY2FsbGVkLgoKICAgICAgICBOcg8AAAApA3IRAAAA2gZlbmdpbmVyiwAAAHMDAAAAICAgchUAAADaHHNldF9lbmdpbmVfZXhlY3V0aW9uX29wdGlvbnN6LUNvbm5lY3Rpb25FdmVudHMuc2V0X2VuZ2luZV9leGVjdXRpb25fb3B0aW9ucx0EAAByFwAAAHIYAAAAYwIAAAAAAAAAAAAAAAEAAAADAAAA8wYAAACXAGQBUwApAmELAwAASW50ZXJjZXB0IHdoZW4gdGhlIDptZXRoOmBfZW5naW5lLkVuZ2luZS5kaXNwb3NlYCBtZXRob2QgaXMgY2FsbGVkLgoKICAgICAgICBUaGUgOm1ldGg6YF9lbmdpbmUuRW5naW5lLmRpc3Bvc2VgIG1ldGhvZCBpbnN0cnVjdHMgdGhlIGVuZ2luZSB0bwogICAgICAgICJkaXNwb3NlIiBvZiBpdCdzIGNvbm5lY3Rpb24gcG9vbCAoZS5nLiA6Y2xhc3M6YF9wb29sLlBvb2xgKSwgYW5kCiAgICAgICAgcmVwbGFjZXMgaXQgd2l0aCBhIG5ldyBvbmUuICBEaXNwb3Npbmcgb2YgdGhlIG9sZCBwb29sIGhhcyB0aGUKICAgICAgICBlZmZlY3QgdGhhdCBleGlzdGluZyBjaGVja2VkLWluIGNvbm5lY3Rpb25zIGFyZSBjbG9zZWQuICBUaGUgbmV3CiAgICAgICAgcG9vbCBkb2VzIG5vdCBlc3RhYmxpc2ggYW55IG5ldyBjb25uZWN0aW9ucyB1bnRpbCBpdCBpcyBmaXJzdCB1c2VkLgoKICAgICAgICBUaGlzIGV2ZW50IGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gdGhlCiAgICAgICAgOmNsYXNzOmBfZW5naW5lLkVuZ2luZWAgc2hvdWxkIGFsc28gYmUgY2xlYW5lZCB1cCwKICAgICAgICBrZWVwaW5nIGluIG1pbmQgdGhhdCB0aGUKICAgICAgICA6Y2xhc3M6YF9lbmdpbmUuRW5naW5lYAogICAgICAgIGNhbiBzdGlsbCBiZSB1c2VkIGZvciBuZXcgcmVxdWVzdHMgaW4gd2hpY2ggY2FzZQogICAgICAgIGl0IHJlLWFjcXVpcmVzIGNvbm5lY3Rpb24gcmVzb3VyY2VzLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjAuNQoKICAgICAgICBOcg8AAAApAnIRAAAAco4AAABzAgAAACAgchUAAADaD2VuZ2luZV9kaXNwb3NlZHogQ29ubmVjdGlvbkV2ZW50cy5lbmdpbmVfZGlzcG9zZWQ9BAAAchcAAAByGAAAAGMCAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJ6XEludGVyY2VwdCBiZWdpbigpIGV2ZW50cy4KCiAgICAgICAgOnBhcmFtIGNvbm46IDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYCBvYmplY3QKCiAgICAgICAgTnIPAAAAqQJyEQAAAHJhAAAAcwIAAAAgIHIVAAAA2gViZWdpbnoWQ29ubmVjdGlvbkV2ZW50cy5iZWdpblEEAAByFwAAAHIYAAAAYwIAAAAAAAAAAAAAAAEAAAADAAAA8wYAAACXAGQBUwApAmHxAQAASW50ZXJjZXB0IHJvbGxiYWNrKCkgZXZlbnRzLCBhcyBpbml0aWF0ZWQgYnkgYQogICAgICAgIDpjbGFzczpgLlRyYW5zYWN0aW9uYC4KCiAgICAgICAgTm90ZSB0aGF0IHRoZSA6Y2xhc3M6YF9wb29sLlBvb2xgIGFsc28gImF1dG8tcm9sbHMgYmFjayIKICAgICAgICBhIERCQVBJIGNvbm5lY3Rpb24gdXBvbiBjaGVja2luLCBpZiB0aGUgYGByZXNldF9vbl9yZXR1cm5gYAogICAgICAgIGZsYWcgaXMgc2V0IHRvIGl0cyBkZWZhdWx0IHZhbHVlIG9mIGBgJ3JvbGxiYWNrJ2BgLgogICAgICAgIFRvIGludGVyY2VwdCB0aGlzCiAgICAgICAgcm9sbGJhY2ssIHVzZSB0aGUgOm1ldGg6YF9ldmVudHMuUG9vbEV2ZW50cy5yZXNldGAgaG9vay4KCiAgICAgICAgOnBhcmFtIGNvbm46IDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYCBvYmplY3QKCiAgICAgICAgLi4gc2VlYWxzbzo6CgogICAgICAgICAgICA6bWV0aDpgX2V2ZW50cy5Qb29sRXZlbnRzLnJlc2V0YAoKICAgICAgICBOcg8AAABykwAAAHMCAAAAICByFQAAANoIcm9sbGJhY2t6GUNvbm5lY3Rpb25FdmVudHMucm9sbGJhY2tYBAAAchcAAAByGAAAAGMCAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJhlAEAAEludGVyY2VwdCBjb21taXQoKSBldmVudHMsIGFzIGluaXRpYXRlZCBieSBhCiAgICAgICAgOmNsYXNzOmAuVHJhbnNhY3Rpb25gLgoKICAgICAgICBOb3RlIHRoYXQgdGhlIDpjbGFzczpgX3Bvb2wuUG9vbGAgbWF5IGFsc28gImF1dG8tY29tbWl0IgogICAgICAgIGEgREJBUEkgY29ubmVjdGlvbiB1cG9uIGNoZWNraW4sIGlmIHRoZSBgYHJlc2V0X29uX3JldHVybmBgCiAgICAgICAgZmxhZyBpcyBzZXQgdG8gdGhlIHZhbHVlIGBgJ2NvbW1pdCdgYC4gIFRvIGludGVyY2VwdCB0aGlzCiAgICAgICAgY29tbWl0LCB1c2UgdGhlIDptZXRoOmBfZXZlbnRzLlBvb2xFdmVudHMucmVzZXRgIGhvb2suCgogICAgICAgIDpwYXJhbSBjb25uOiA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgb2JqZWN0CiAgICAgICAgTnIPAAAAcpMAAABzAgAAACAgchUAAADaBmNvbW1pdHoXQ29ubmVjdGlvbkV2ZW50cy5jb21taXRqBAAAchcAAAByGAAAAGMDAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJ6nEludGVyY2VwdCBzYXZlcG9pbnQoKSBldmVudHMuCgogICAgICAgIDpwYXJhbSBjb25uOiA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgb2JqZWN0CiAgICAgICAgOnBhcmFtIG5hbWU6IHNwZWNpZmllZCBuYW1lIHVzZWQgZm9yIHRoZSBzYXZlcG9pbnQuCgogICAgICAgIE5yDwAAACkDchEAAAByYQAAANoEbmFtZXMDAAAAICAgchUAAADaCXNhdmVwb2ludHoaQ29ubmVjdGlvbkV2ZW50cy5zYXZlcG9pbnR2BAAAchcAAAByGAAAAGMEAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJ68kludGVyY2VwdCByb2xsYmFja19zYXZlcG9pbnQoKSBldmVudHMuCgogICAgICAgIDpwYXJhbSBjb25uOiA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgb2JqZWN0CiAgICAgICAgOnBhcmFtIG5hbWU6IHNwZWNpZmllZCBuYW1lIHVzZWQgZm9yIHRoZSBzYXZlcG9pbnQuCiAgICAgICAgOnBhcmFtIGNvbnRleHQ6IDpjbGFzczpgLkV4ZWN1dGlvbkNvbnRleHRgIGluIHVzZS4gIE1heSBiZSBgYE5vbmVgYC4KCiAgICAgICAgTnIPAAAAqQRyEQAAAHJhAAAAcpoAAABybAAAAHMEAAAAICAgIHIVAAAA2hJyb2xsYmFja19zYXZlcG9pbnR6I0Nvbm5lY3Rpb25FdmVudHMucm9sbGJhY2tfc2F2ZXBvaW50fgQAAHIXAAAAchgAAABjBAAAAAAAAAAAAAAAAQAAAAMAAADzBgAAAJcAZAFTACkCevFJbnRlcmNlcHQgcmVsZWFzZV9zYXZlcG9pbnQoKSBldmVudHMuCgogICAgICAgIDpwYXJhbSBjb25uOiA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgb2JqZWN0CiAgICAgICAgOnBhcmFtIG5hbWU6IHNwZWNpZmllZCBuYW1lIHVzZWQgZm9yIHRoZSBzYXZlcG9pbnQuCiAgICAgICAgOnBhcmFtIGNvbnRleHQ6IDpjbGFzczpgLkV4ZWN1dGlvbkNvbnRleHRgIGluIHVzZS4gIE1heSBiZSBgYE5vbmVgYC4KCiAgICAgICAgTnIPAAAAcp0AAABzBAAAACAgICByFQAAANoRcmVsZWFzZV9zYXZlcG9pbnR6IkNvbm5lY3Rpb25FdmVudHMucmVsZWFzZV9zYXZlcG9pbnSHBAAAchcAAAByGAAAAGMDAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJ6kkludGVyY2VwdCBiZWdpbl90d29waGFzZSgpIGV2ZW50cy4KCiAgICAgICAgOnBhcmFtIGNvbm46IDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYCBvYmplY3QKICAgICAgICA6cGFyYW0geGlkOiB0d28tcGhhc2UgWElEIGlkZW50aWZpZXIKCiAgICAgICAgTnIPAAAAqQNyEQAAAHJhAAAA2gN4aWRzAwAAACAgIHIVAAAA2g5iZWdpbl90d29waGFzZXofQ29ubmVjdGlvbkV2ZW50cy5iZWdpbl90d29waGFzZZAEAAByFwAAAHIYAAAAYwMAAAAAAAAAAAAAAAEAAAADAAAA8wYAAACXAGQBUwApAnqTSW50ZXJjZXB0IHByZXBhcmVfdHdvcGhhc2UoKSBldmVudHMuCgogICAgICAgIDpwYXJhbSBjb25uOiA6Y2xhc3M6YF9lbmdpbmUuQ29ubmVjdGlvbmAgb2JqZWN0CiAgICAgICAgOnBhcmFtIHhpZDogdHdvLXBoYXNlIFhJRCBpZGVudGlmaWVyCiAgICAgICAgTnIPAAAAcqIAAABzAwAAACAgIHIVAAAA2hBwcmVwYXJlX3R3b3BoYXNleiFDb25uZWN0aW9uRXZlbnRzLnByZXBhcmVfdHdvcGhhc2WYBAAAchcAAAByGAAAAGMEAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJhAQEAAEludGVyY2VwdCByb2xsYmFja190d29waGFzZSgpIGV2ZW50cy4KCiAgICAgICAgOnBhcmFtIGNvbm46IDpjbGFzczpgX2VuZ2luZS5Db25uZWN0aW9uYCBvYmplY3QKICAgICAgICA6cGFyYW0geGlkOiB0d28tcGhhc2UgWElEIGlkZW50aWZpZXIKICAgICAgICA6cGFyYW0gaXNfcHJlcGFyZWQ6IGJvb2xlYW4sIGluZGljYXRlcyBpZgogICAgICAgICA6bWV0aDpgLlR3b1BoYXNlVHJhbnNhY3Rpb24ucHJlcGFyZWAgd2FzIGNhbGxlZC4KCiAgICAgICAgTnIPAAAAqQRyEQAAAHJhAAAAcqMAAADaC2lzX3ByZXBhcmVkcwQAAAAgICAgchUAAADaEXJvbGxiYWNrX3R3b3BoYXNleiJDb25uZWN0aW9uRXZlbnRzLnJvbGxiYWNrX3R3b3BoYXNlnwQAAHIXAAAAchgAAABjBAAAAAAAAAAAAAAAAQAAAAMAAADzBgAAAJcAZAFTACkCev9JbnRlcmNlcHQgY29tbWl0X3R3b3BoYXNlKCkgZXZlbnRzLgoKICAgICAgICA6cGFyYW0gY29ubjogOmNsYXNzOmBfZW5naW5lLkNvbm5lY3Rpb25gIG9iamVjdAogICAgICAgIDpwYXJhbSB4aWQ6IHR3by1waGFzZSBYSUQgaWRlbnRpZmllcgogICAgICAgIDpwYXJhbSBpc19wcmVwYXJlZDogYm9vbGVhbiwgaW5kaWNhdGVzIGlmCiAgICAgICAgIDptZXRoOmAuVHdvUGhhc2VUcmFuc2FjdGlvbi5wcmVwYXJlYCB3YXMgY2FsbGVkLgoKICAgICAgICBOcg8AAAByqAAAAHMEAAAAICAgIHIVAAAA2g9jb21taXRfdHdvcGhhc2V6IENvbm5lY3Rpb25FdmVudHMuY29tbWl0X3R3b3BoYXNlqQQAAHIXAAAAchgAAABOqQFGKR9yLgAAAHIvAAAAcjAAAAByMQAAAHIyAAAAcgYAAAByMwAAAHJaAAAAcnoAAAByXwAAAHJ+AAAAcmcAAAByggAAAHIFAAAA2gpkZXByZWNhdGVkcoQAAABybwAAAHKJAAAAcowAAAByjwAAAHKRAAAAcpQAAABylgAAAHKYAAAAcpsAAAByngAAAHKgAAAAcqQAAABypgAAAHKqAAAAcqwAAAByDwAAAHIYAAAAchUAAAByXAAAAHJcAAAAGwIAAHOoAQAAgACAAIAAgACAAPACSgEFCPAASgEFCPBYAgAZJdAEFdgXItAEFOAFEPACMAUx8AAwBTHwADAFMfEDAAYRhFvwAjAFMfBkARwFDPAAHAUM8AAcBQzwPA0FDPAADQUM8AANBQzwHigFDPAAKAUM8AAoBQzwVAESBQzwABIFDPAAEgUM8CgABhWAVIRf2AgN8AIDCRHxBQYGBvQABgYG8A4rBQzwACsFDPEPBgYG9AAGBgbwDisFDPBaAUQCBQzwAEQCBQzwAEQCBQzwTAQ4BQzwADgFDPAAOAUM8HQBHgUM8AAeBQzwAB4FDPBAAR4FDPAAHgUM8AAeBQzwQAESBQzwABIFDPAAEgUM8CgFBQzwAAUFDPAABQUM8A4QBQzwABAFDPAAEAUM8CQKBQzwAAoFDPAACgUM8BgGBQzwAAYFDPAABgUM8BAHBQzwAAcFDPAABwUM8BIHBQzwAAcFDPAABwUM8BIGBQzwAAYFDPAABgUM8BAFBQzwAAUFDPAABQUM8A4IBQzwAAgFDPAACAUM8BQIBQzwAAgFDPAACAUM8AAIBQzwAAgFDHIYAAAAclwAAABjAAAAAAAAAAAAAAAAAwAAAAAAAADzZgAAAJcAZQBaAWQAWgJkAVoDZAJaBGUFWgZlB2QMZASEAaYAAACrAAAAAAAAAAAAWghlB2QFhACmAAAAqwAAAAAAAAAAAFoJZAaEAFoKZAeEAFoLZAiEAFoMZAmEAFoNZAqEAFoOZAtTACkN2g1EaWFsZWN0RXZlbnRzYXcDAABldmVudCBpbnRlcmZhY2UgZm9yIGV4ZWN1dGlvbi1yZXBsYWNlbWVudCBmdW5jdGlvbnMuCgogICAgVGhlc2UgZXZlbnRzIGFsbG93IGRpcmVjdCBpbnN0cnVtZW50YXRpb24gYW5kIHJlcGxhY2VtZW50CiAgICBvZiBrZXkgZGlhbGVjdCBmdW5jdGlvbnMgd2hpY2ggaW50ZXJhY3Qgd2l0aCB0aGUgREJBUEkuCgogICAgLi4gbm90ZTo6CgogICAgICAgIDpjbGFzczpgLkRpYWxlY3RFdmVudHNgIGhvb2tzIHNob3VsZCBiZSBjb25zaWRlcmVkICoqc2VtaS1wdWJsaWMqKgogICAgICAgIGFuZCBleHBlcmltZW50YWwuCiAgICAgICAgVGhlc2UgaG9va3MgYXJlIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYW5kIGFyZSBvbmx5IGZvciB0aG9zZSBzaXR1YXRpb25zCiAgICAgICAgd2hlcmUgaW50cmljYXRlIHJlLXN0YXRlbWVudCBvZiBEQkFQSSBtZWNoYW5pY3MgbXVzdCBiZSBpbmplY3RlZCBvbnRvCiAgICAgICAgYW4gZXhpc3RpbmcgZGlhbGVjdC4gIEZvciBnZW5lcmFsLXVzZSBzdGF0ZW1lbnQtaW50ZXJjZXB0aW9uIGV2ZW50cywKICAgICAgICBwbGVhc2UgdXNlIHRoZSA6Y2xhc3M6YF9ldmVudHMuQ29ubmVjdGlvbkV2ZW50c2AgaW50ZXJmYWNlLgoKICAgIC4uIHNlZWFsc286OgoKICAgICAgICA6bWV0aDpgX2V2ZW50cy5Db25uZWN0aW9uRXZlbnRzLmJlZm9yZV9jdXJzb3JfZXhlY3V0ZWAKCiAgICAgICAgOm1ldGg6YF9ldmVudHMuQ29ubmVjdGlvbkV2ZW50cy5iZWZvcmVfZXhlY3V0ZWAKCiAgICAgICAgOm1ldGg6YF9ldmVudHMuQ29ubmVjdGlvbkV2ZW50cy5hZnRlcl9jdXJzb3JfZXhlY3V0ZWAKCiAgICAgICAgOm1ldGg6YF9ldmVudHMuQ29ubmVjdGlvbkV2ZW50cy5hZnRlcl9leGVjdXRlYAoKCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAwLjkuNAoKICAgIHJdAAAARmMDAAAAAAAAAAAAAAACAAAAAwAAAPNKAAAAlwB8AWoAAAAAAAAAAAB9A2QBfANfAQAAAAAAAAAAfAGgAgAAAAAAAAAAAAAAAAAAAAAAAAAApgAAAKsAAAAAAAAAAAABAGQAUwApAk5UKQNycAAAAHJzAAAAcnYAAAApBHI+AAAAcncAAAByeAAAAHISAAAAcwQAAAAgICAgchUAAAByegAAAHoVRGlhbGVjdEV2ZW50cy5fbGlzdGVu1QQAAHMqAAAAgADgERrUESqIBuAdIYgG1Aga2AgR1wgd0ggd0Qgf1Agf0Agf0Agf0AgfchgAAABjAgAAAAAAAAAAAAAABAAAAAMAAADz0gAAAJcAdAEAAAAAAAAAAAAAfAF0AgAAAAAAAAAAAACmAgAAqwIAAAAAAAAAAHI1dAUAAAAAAAAAAAAAfAF0BgAAAAAAAAAAAACmAgAAqwIAAAAAAAAAAHIHdAgAAAAAAAAAAAAAUwB0BQAAAAAAAAAAAAB8AXQIAAAAAAAAAAAAAKYCAACrAgAAAAAAAAAAcgJ8AVMAZABTAHQBAAAAAAAAAAAAAHwBdAYAAAAAAAAAAAAApgIAAKsCAAAAAAAAAAByB3wBagUAAAAAAAAAAFMAfAFTAHI4AAAAKQZyOQAAAHI6AAAAcjsAAAByCAAAAHIHAAAA2gdkaWFsZWN0cj0AAABzAgAAACAgchUAAAByPwAAAHoaRGlhbGVjdEV2ZW50cy5fYWNjZXB0X3dpdGjcBAAAc2sAAACAAOULFZBmnWTRCyPUCyPwAAgJGt0PGZgmpSbRDynUDynwAAMNHt0XHpAO3REbmEalR9ERLNQRLPAAAQ0e2BcdkA3wAwENHvAAAQ0e5Q0XmAalBtENJ9QNJ/AAAwka2BMZlD7QDCHgExmITXIYAAAAYwUAAAAAAAAAAAAAAAEAAAADAAAA8wYAAACXAGQBUwApAmGNAgAAUmVjZWl2ZSBjb25uZWN0aW9uIGFyZ3VtZW50cyBiZWZvcmUgYSBjb25uZWN0aW9uIGlzIG1hZGUuCgogICAgICAgIFJldHVybiBhIERCQVBJIGNvbm5lY3Rpb24gdG8gaGFsdCBmdXJ0aGVyIGV2ZW50cyBmcm9tIGludm9raW5nOwogICAgICAgIHRoZSByZXR1cm5lZCBjb25uZWN0aW9uIHdpbGwgYmUgdXNlZC4KCiAgICAgICAgQWx0ZXJuYXRpdmVseSwgdGhlIGV2ZW50IGNhbiBtYW5pcHVsYXRlIHRoZSBjYXJncyBhbmQvb3IgY3BhcmFtcwogICAgICAgIGNvbGxlY3Rpb25zOyBjYXJncyB3aWxsIGFsd2F5cyBiZSBhIFB5dGhvbiBsaXN0IHRoYXQgY2FuIGJlIG11dGF0ZWQKICAgICAgICBpbi1wbGFjZSBhbmQgY3BhcmFtcyBhIFB5dGhvbiBkaWN0aW9uYXJ5LiAgUmV0dXJuIE5vbmUgdG8KICAgICAgICBhbGxvdyBjb250cm9sIHRvIHBhc3MgdG8gdGhlIG5leHQgZXZlbnQgaGFuZGxlciBhbmQgdWx0aW1hdGVseQogICAgICAgIHRvIGFsbG93IHRoZSBkaWFsZWN0IHRvIGNvbm5lY3Qgbm9ybWFsbHksIGdpdmVuIHRoZSB1cGRhdGVkCiAgICAgICAgYXJndW1lbnRzLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjAuMwoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDpyZWY6YGN1c3RvbV9kYmFwaV9hcmdzYAoKICAgICAgICBOcg8AAAApBXIRAAAAcrMAAADaCGNvbm5fcmVj2gVjYXJnc9oHY3BhcmFtc3MFAAAAICAgICByFQAAANoKZG9fY29ubmVjdHoYRGlhbGVjdEV2ZW50cy5kb19jb25uZWN06AQAAHIXAAAAchgAAABjBQAAAAAAAAAAAAAAAQAAAAMAAADzBgAAAJcAZAFTACkCeulSZWNlaXZlIGEgY3Vyc29yIHRvIGhhdmUgZXhlY3V0ZW1hbnkoKSBjYWxsZWQuCgogICAgICAgIFJldHVybiB0aGUgdmFsdWUgVHJ1ZSB0byBoYWx0IGZ1cnRoZXIgZXZlbnRzIGZyb20gaW52b2tpbmcsCiAgICAgICAgYW5kIHRvIGluZGljYXRlIHRoYXQgdGhlIGN1cnNvciBleGVjdXRpb24gaGFzIGFscmVhZHkgdGFrZW4KICAgICAgICBwbGFjZSB3aXRoaW4gdGhlIGV2ZW50IGhhbmRsZXIuCgogICAgICAgIE5yDwAAAKkFchEAAAByaQAAAHJqAAAAcmsAAABybAAAAHMFAAAAICAgICByFQAAANoOZG9fZXhlY3V0ZW1hbnl6HERpYWxlY3RFdmVudHMuZG9fZXhlY3V0ZW1hbnn9BAAAchcAAAByGAAAAGMEAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJ6+FJlY2VpdmUgYSBjdXJzb3IgdG8gaGF2ZSBleGVjdXRlKCkgd2l0aCBubyBwYXJhbWV0ZXJzIGNhbGxlZC4KCiAgICAgICAgUmV0dXJuIHRoZSB2YWx1ZSBUcnVlIHRvIGhhbHQgZnVydGhlciBldmVudHMgZnJvbSBpbnZva2luZywKICAgICAgICBhbmQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY3Vyc29yIGV4ZWN1dGlvbiBoYXMgYWxyZWFkeSB0YWtlbgogICAgICAgIHBsYWNlIHdpdGhpbiB0aGUgZXZlbnQgaGFuZGxlci4KCiAgICAgICAgTnIPAAAAKQRyEQAAAHJpAAAAcmoAAABybAAAAHMEAAAAICAgIHIVAAAA2hRkb19leGVjdXRlX25vX3BhcmFtc3oiRGlhbGVjdEV2ZW50cy5kb19leGVjdXRlX25vX3BhcmFtcwYFAAByFwAAAHIYAAAAYwUAAAAAAAAAAAAAAAEAAAADAAAA8wYAAACXAGQBUwApAnrlUmVjZWl2ZSBhIGN1cnNvciB0byBoYXZlIGV4ZWN1dGUoKSBjYWxsZWQuCgogICAgICAgIFJldHVybiB0aGUgdmFsdWUgVHJ1ZSB0byBoYWx0IGZ1cnRoZXIgZXZlbnRzIGZyb20gaW52b2tpbmcsCiAgICAgICAgYW5kIHRvIGluZGljYXRlIHRoYXQgdGhlIGN1cnNvciBleGVjdXRpb24gaGFzIGFscmVhZHkgdGFrZW4KICAgICAgICBwbGFjZSB3aXRoaW4gdGhlIGV2ZW50IGhhbmRsZXIuCgogICAgICAgIE5yDwAAAHK6AAAAcwUAAAAgICAgIHIVAAAA2gpkb19leGVjdXRlehhEaWFsZWN0RXZlbnRzLmRvX2V4ZWN1dGUPBQAAchcAAAByGAAAAGMGAAAAAAAAAAAAAAABAAAAAwAAAPMGAAAAlwBkAVMAKQJh4gYAAFJlY2VpdmUgdGhlIHNldGlucHV0c2l6ZXMgZGljdGlvbmFyeSBmb3IgcG9zc2libGUgbW9kaWZpY2F0aW9uLgoKICAgICAgICBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGRpYWxlY3QgbWFrZXMgdXNlIG9mIHRoZQogICAgICAgIERCQVBJIGBgY3Vyc29yLnNldGlucHV0c2l6ZXMoKWBgIG1ldGhvZCB3aGljaCBwYXNzZXMgaW5mb3JtYXRpb24gYWJvdXQKICAgICAgICBwYXJhbWV0ZXIgYmluZGluZyBmb3IgYSBwYXJ0aWN1bGFyIHN0YXRlbWVudC4gICBUaGUgZ2l2ZW4KICAgICAgICBgYGlucHV0c2l6ZXNgYCBkaWN0aW9uYXJ5IHdpbGwgY29udGFpbiA6Y2xhc3M6YC5CaW5kUGFyYW1ldGVyYCBvYmplY3RzCiAgICAgICAgYXMga2V5cywgbGlua2VkIHRvIERCQVBJLXNwZWNpZmljIHR5cGUgb2JqZWN0cyBhcyB2YWx1ZXM7IGZvcgogICAgICAgIHBhcmFtZXRlcnMgdGhhdCBhcmUgbm90IGJvdW5kLCB0aGV5IGFyZSBhZGRlZCB0byB0aGUgZGljdGlvbmFyeSB3aXRoCiAgICAgICAgYGBOb25lYGAgYXMgdGhlIHZhbHVlLCB3aGljaCBtZWFucyB0aGUgcGFyYW1ldGVyIHdpbGwgbm90IGJlIGluY2x1ZGVkCiAgICAgICAgaW4gdGhlIHVsdGltYXRlIHNldGlucHV0c2l6ZXMgY2FsbC4gICBUaGUgZXZlbnQgbWF5IGJlIHVzZWQgdG8gaW5zcGVjdAogICAgICAgIGFuZC9vciBsb2cgdGhlIGRhdGF0eXBlcyB0aGF0IGFyZSBiZWluZyBib3VuZCwgYXMgd2VsbCBhcyB0byBtb2RpZnkgdGhlCiAgICAgICAgZGljdGlvbmFyeSBpbiBwbGFjZS4gIFBhcmFtZXRlcnMgY2FuIGJlIGFkZGVkLCBtb2RpZmllZCwgb3IgcmVtb3ZlZAogICAgICAgIGZyb20gdGhpcyBkaWN0aW9uYXJ5LiAgIENhbGxlcnMgd2lsbCB0eXBpY2FsbHkgd2FudCB0byBpbnNwZWN0IHRoZQogICAgICAgIDphdHRyOmAuQmluZFBhcmFtZXRlci50eXBlYCBhdHRyaWJ1dGUgb2YgdGhlIGdpdmVuIGJpbmQgb2JqZWN0cyBpbgogICAgICAgIG9yZGVyIHRvIG1ha2UgZGVjaXNpb25zIGFib3V0IHRoZSBEQkFQSSBvYmplY3QuCgogICAgICAgIEFmdGVyIHRoZSBldmVudCwgdGhlIGBgaW5wdXRzaXplc2BgIGRpY3Rpb25hcnkgaXMgY29udmVydGVkIGludG8KICAgICAgICBhbiBhcHByb3ByaWF0ZSBkYXRhc3RydWN0dXJlIHRvIGJlIHBhc3NlZCB0byBgYGN1cnNvci5zZXRpbnB1dHNpemVzYGA7CiAgICAgICAgZWl0aGVyIGEgbGlzdCBmb3IgYSBwb3NpdGlvbmFsIGJvdW5kIHBhcmFtZXRlciBleGVjdXRpb24gc3R5bGUsCiAgICAgICAgb3IgYSBkaWN0aW9uYXJ5IG9mIHN0cmluZyBwYXJhbWV0ZXIga2V5cyB0byBEQkFQSSB0eXBlIG9iamVjdHMgZm9yCiAgICAgICAgYSBuYW1lZCBib3VuZCBwYXJhbWV0ZXIgZXhlY3V0aW9uIHN0eWxlLgoKICAgICAgICBNb3N0IGRpYWxlY3RzICoqZG8gbm90IHVzZSoqIHRoaXMgbWV0aG9kIGF0IGFsbDsgdGhlIG9ubHkgYnVpbHQtaW4KICAgICAgICBkaWFsZWN0IHdoaWNoIHVzZXMgdGhpcyBob29rIGlzIHRoZSBjeF9PcmFjbGUgZGlhbGVjdC4gICBUaGUgaG9vayBoZXJlCiAgICAgICAgaXMgbWFkZSBhdmFpbGFibGUgc28gYXMgdG8gYWxsb3cgY3VzdG9taXphdGlvbiBvZiBob3cgZGF0YXR5cGVzIGFyZSBzZXQKICAgICAgICB1cCB3aXRoIHRoZSAgY3hfT3JhY2xlIERCQVBJLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAxLjIuOQoKICAgICAgICAuLiBzZWVhbHNvOjoKCiAgICAgICAgICAgIDpyZWY6YGN4X29yYWNsZV9zZXRpbnB1dHNpemVzYAoKICAgICAgICBOcg8AAAApBnIRAAAA2gppbnB1dHNpemVzcmkAAAByagAAAHJrAAAAcmwAAABzBgAAACAgICAgIHIVAAAA2hBkb19zZXRpbnB1dHNpemVzeh5EaWFsZWN0RXZlbnRzLmRvX3NldGlucHV0c2l6ZXMYBQAAcwoAAACAAPBKAQAJDYgEchgAAABOcq0AAAApD3IuAAAAci8AAAByMAAAAHIxAAAAcjIAAAByBwAAAHIzAAAAcloAAAByegAAAHI/AAAAcrgAAAByuwAAAHK9AAAAcr8AAABywgAAAHIPAAAAchgAAAByFQAAAHKwAAAAcrAAAAC0BAAAc7AAAACAAIAAgACAAIAA8AIbBQjwABsFCPA6ABkl0AQV2Bce0AQU4AUQ8AIEBSDwAAQFIPAABAUg8QMABhGEW/ACBAUg8AwABhHwAgkFGvAACQUa8QMABhGEW/ACCQUa8BYTBQzwABMFDPAAEwUM8CoHBQzwAAcFDPAABwUM8BIHBQzwAAcFDPAABwUM8BIHBQzwAAcFDPAABwUM8BIlBQ3wACUFDfAAJQUN8AAlBQ3wACUFDXIYAAAAcrAAAABOKRJyMQAAANoAcgMAAAByBAAAAHIFAAAAco4AAAByBgAAAHIHAAAAcggAAAByPAAAAHIJAAAA2ghzcWwuYmFzZXIKAAAA2gZFdmVudHNyDAAAAHI1AAAAclwAAABysAAAAHIPAAAAchgAAAByFQAAAPoIPG1vZHVsZT5yxgAAAAEAAABzfAEAAPADAQEB8BAAAR3QABzgABPQABPQABPQABPQABPQABPYABHQABHQABHQABHQABHQABHYABLQABLQABLQABLQABLQABLYAB/QAB/QAB/QAB/QAB/QAB/YABvQABvQABvQABvQABvQABvYABrQABrQABrQABrQABrQABrYABbQABbQABbQABbQABbQABbYACfQACfQACfQACfQACfQACfwBl4EAQzwAF4EAQzwAF4EAQzwAF4EAQzwAF4EAQyQBZQM8QBeBAEM9ABeBAEM8ABeBAEM8EIJYwMBDPAAYwMBDPAAYwMBDPAAYwMBDPAAYwMBDJAVlBzxAGMDAQz0AGMDAQzwAGMDAQzwTAdWCgEM8ABWCgEM8ABWCgEM8ABWCgEM8ABWCgEMkHWUfPEAVgoBDPQAVgoBDPAAVgoBDPByFEkCAQ3wAEkCAQ3wAEkCAQ3wAEkCAQ3wAEkCAQ2QRZRM8QBJAgEN9ABJAgEN8ABJAgEN8ABJAgEN8ABJAgENchgAAAA=
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 9
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
events.cpython-311.pyc
57.29 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
exc.cpython-311.pyc
24.79 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
inspection.cpython-311.pyc
3.40 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
interfaces.cpython-311.pyc
15.37 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
log.cpython-311.pyc
9.41 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
processors.cpython-311.pyc
6.67 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
schema.cpython-311.pyc
2.78 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
types.cpython-311.pyc
3.08 KB
lrw-r--r--
2026-02-06 08:01:46
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-311.pyc
6.76 KB
lrw-r--r--
2026-02-06 08:01:45
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).