@discordeno/rest 22.0.1-next.724a37f → 22.0.1-next.72677dc

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/types.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export { };
2
2
 
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEFkZERtUmVjaXBpZW50T3B0aW9ucyxcbiAgQWRkR3VpbGRNZW1iZXJPcHRpb25zLFxuICBBZGRMb2JieU1lbWJlcixcbiAgQXRMZWFzdE9uZSxcbiAgQmVnaW5HdWlsZFBydW5lLFxuICBCaWdTdHJpbmcsXG4gIENhbWVsaXplLFxuICBDaGFubmVsVHlwZXMsXG4gIENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgQ3JlYXRlQXBwbGljYXRpb25FbW9qaSxcbiAgQ3JlYXRlQXV0b01vZGVyYXRpb25SdWxlT3B0aW9ucyxcbiAgQ3JlYXRlQ2hhbm5lbEludml0ZSxcbiAgQ3JlYXRlRm9ydW1Qb3N0V2l0aE1lc3NhZ2UsXG4gIENyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZE9wdGlvbnMsXG4gIENyZWF0ZUdyb3VwRG1PcHRpb25zLFxuICBDcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZE9wdGlvbnMsXG4gIENyZWF0ZUd1aWxkQmFuLFxuICBDcmVhdGVHdWlsZEJ1bGtCYW4sXG4gIENyZWF0ZUd1aWxkQ2hhbm5lbCxcbiAgQ3JlYXRlR3VpbGRFbW9qaSxcbiAgQ3JlYXRlR3VpbGRSb2xlLFxuICBDcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZCxcbiAgQ3JlYXRlR3VpbGRTdGlja2VyT3B0aW9ucyxcbiAgQ3JlYXRlTG9iYnksXG4gIENyZWF0ZU1lc3NhZ2VPcHRpb25zLFxuICBDcmVhdGVTY2hlZHVsZWRFdmVudCxcbiAgQ3JlYXRlU3RhZ2VJbnN0YW5jZSxcbiAgQ3JlYXRlVGVtcGxhdGUsXG4gIENyZWF0ZVRlc3RFbnRpdGxlbWVudCxcbiAgQ3JlYXRlV2ViaG9vayxcbiAgRGVsZXRlV2ViaG9va01lc3NhZ2VPcHRpb25zLFxuICBEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZSxcbiAgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIERpc2NvcmRBcHBsaWNhdGlvbixcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkQXBwbGljYXRpb25JbnRlZ3JhdGlvblR5cGUsXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uLFxuICBEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRCdWxrQmFuLFxuICBEaXNjb3JkQ2hhbm5lbCxcbiAgRGlzY29yZENvbm5lY3Rpb24sXG4gIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgRGlzY29yZEVtb2ppLFxuICBEaXNjb3JkRW50aXRsZW1lbnQsXG4gIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICBEaXNjb3JkR2V0Q2hhbm5lbFBpbnMsXG4gIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICBEaXNjb3JkR3VpbGQsXG4gIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICBEaXNjb3JkR3VpbGRQcmV2aWV3LFxuICBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICBEaXNjb3JkSW5jaWRlbnRzRGF0YSxcbiAgRGlzY29yZEludGVncmF0aW9uLFxuICBEaXNjb3JkSW50ZXJhY3Rpb24sXG4gIERpc2NvcmRJbnRlcmFjdGlvbkNhbGxiYWNrUmVzcG9uc2UsXG4gIERpc2NvcmRJbnZpdGUsXG4gIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgRGlzY29yZExpc3RBY3RpdmVUaHJlYWRzLFxuICBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgRGlzY29yZExvYmJ5LFxuICBEaXNjb3JkTG9iYnlNZW1iZXIsXG4gIERpc2NvcmRNZW1iZXIsXG4gIERpc2NvcmRNZW1iZXJXaXRoVXNlcixcbiAgRGlzY29yZE1lc3NhZ2UsXG4gIERpc2NvcmRQcnVuZWRDb3VudCxcbiAgRGlzY29yZFJvbGUsXG4gIERpc2NvcmRTY2hlZHVsZWRFdmVudCxcbiAgRGlzY29yZFNrdSxcbiAgRGlzY29yZFNvdW5kYm9hcmRTb3VuZCxcbiAgRGlzY29yZFN0YWdlSW5zdGFuY2UsXG4gIERpc2NvcmRTdGlja2VyLFxuICBEaXNjb3JkU3RpY2tlclBhY2ssXG4gIERpc2NvcmRTdWJzY3JpcHRpb24sXG4gIERpc2NvcmRUZW1wbGF0ZSxcbiAgRGlzY29yZFRocmVhZE1lbWJlcixcbiAgRGlzY29yZFRva2VuRXhjaGFuZ2UsXG4gIERpc2NvcmRUb2tlblJldm9jYXRpb24sXG4gIERpc2NvcmRVc2VyLFxuICBEaXNjb3JkVmFuaXR5VXJsLFxuICBEaXNjb3JkVm9pY2VSZWdpb24sXG4gIERpc2NvcmRWb2ljZVN0YXRlLFxuICBEaXNjb3JkV2ViaG9vayxcbiAgRGlzY29yZFdlbGNvbWVTY3JlZW4sXG4gIEVkaXRBcHBsaWNhdGlvbixcbiAgRWRpdEF1dG9Nb2RlcmF0aW9uUnVsZU9wdGlvbnMsXG4gIEVkaXRCb3RNZW1iZXJPcHRpb25zLFxuICBFZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXNPcHRpb25zLFxuICBFZGl0R3VpbGRPbmJvYXJkaW5nLFxuICBFZGl0R3VpbGRSb2xlLFxuICBFZGl0R3VpbGRTdGlja2VyT3B0aW9ucyxcbiAgRWRpdE1lc3NhZ2UsXG4gIEVkaXRPd25Wb2ljZVN0YXRlLFxuICBFZGl0U2NoZWR1bGVkRXZlbnQsXG4gIEVkaXRVc2VyVm9pY2VTdGF0ZSxcbiAgRWRpdFdlYmhvb2tNZXNzYWdlT3B0aW9ucyxcbiAgRXhlY3V0ZVdlYmhvb2ssXG4gIEZpbGVDb250ZW50LFxuICBHZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uT3B0aW9ucyxcbiAgR2V0QmFucyxcbiAgR2V0Q2hhbm5lbFBpbnNPcHRpb25zLFxuICBHZXRFbnRpdGxlbWVudHMsXG4gIEdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHNPcHRpb25zLFxuICBHZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHNPcHRpb25zLFxuICBHZXRHdWlsZEF1ZGl0TG9nLFxuICBHZXRHdWlsZFBydW5lQ291bnRRdWVyeSxcbiAgR2V0SW52aXRlLFxuICBHZXRNZXNzYWdlc09wdGlvbnMsXG4gIEdldFBvbGxBbnN3ZXJWb3RlcyxcbiAgR2V0UmVhY3Rpb25zLFxuICBHZXRTY2hlZHVsZWRFdmVudHMsXG4gIEdldFNjaGVkdWxlZEV2ZW50VXNlcnMsXG4gIEdldFRocmVhZE1lbWJlcixcbiAgR2V0VXNlckd1aWxkcyxcbiAgR2V0V2ViaG9va01lc3NhZ2VPcHRpb25zLFxuICBHdWlsZEZlYXR1cmVzLFxuICBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSxcbiAgSW50ZXJhY3Rpb25DYWxsYmFja09wdGlvbnMsXG4gIEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIExpbmtDaGFubmVsVG9Mb2JieSxcbiAgTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgTGlzdEd1aWxkTWVtYmVycyxcbiAgTGlzdFNrdVN1YnNjcmlwdGlvbnNPcHRpb25zLFxuICBMaXN0VGhyZWFkTWVtYmVycyxcbiAgTW9kaWZ5QXBwbGljYXRpb25FbW9qaSxcbiAgTW9kaWZ5Q2hhbm5lbCxcbiAgTW9kaWZ5R3VpbGQsXG4gIE1vZGlmeUd1aWxkQ2hhbm5lbFBvc2l0aW9ucyxcbiAgTW9kaWZ5R3VpbGRFbW9qaSxcbiAgTW9kaWZ5R3VpbGRJbmNpZGVudEFjdGlvbnMsXG4gIE1vZGlmeUd1aWxkTWVtYmVyLFxuICBNb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZCxcbiAgTW9kaWZ5R3VpbGRUZW1wbGF0ZSxcbiAgTW9kaWZ5R3VpbGRXZWxjb21lU2NyZWVuLFxuICBNb2RpZnlMb2JieSxcbiAgTW9kaWZ5Um9sZVBvc2l0aW9ucyxcbiAgTW9kaWZ5V2ViaG9vayxcbiAgU2NoZWR1bGVkRXZlbnRFbnRpdHlUeXBlLFxuICBTY2hlZHVsZWRFdmVudFN0YXR1cyxcbiAgU2VhcmNoTWVtYmVycyxcbiAgU2VuZFNvdW5kYm9hcmRTb3VuZCxcbiAgU3RhcnRUaHJlYWRXaXRoTWVzc2FnZSxcbiAgU3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSxcbiAgVXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kT3B0aW9ucyxcbiAgVXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRPcHRpb25zLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB0eXBlIHsgbG9nZ2VyIH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IEludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuaW1wb3J0IHR5cGUgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5pbXBvcnQgdHlwZSB7IFJlc3RSb3V0ZXMgfSBmcm9tICcuL3R5cGluZ3Mvcm91dGVzLmpzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucyB7XG4gIC8qKiBUaGUgYm90IHRva2VuIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBtYWtlIHJlcXVlc3RzLiAqL1xuICB0b2tlbjogc3RyaW5nXG4gIC8qKlxuICAgKiBGb3Igb2xkIGJvdHMgdGhhdCBoYXZlIGEgZGlmZmVyZW50IGJvdCBpZCBhbmQgYXBwbGljYXRpb24gaWQuXG4gICAqIEBkZWZhdWx0IGJvdCBpZCBmcm9tIHRva2VuXG4gICAqL1xuICBhcHBsaWNhdGlvbklkPzogQmlnU3RyaW5nXG4gIC8qKiBDb25maWd1cmF0aW9uIHdoZW4gdXNpbmcgYSBwcm94eS4gKi9cbiAgcHJveHk/OiB7XG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIHRvIGNvbm5lY3QgdG8uIElmIHlvdSBjcmVhdGUgYSBwcm94eSByZXN0LCB0aGF0IHVybCB3b3VsZCBnbyBoZXJlLlxuICAgICAqIElUIFNIT1VMRCBOT1QgRU5EIFdJVEggQSAvXG4gICAgICogQGRlZmF1bHQgaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGlcbiAgICAgKi9cbiAgICBiYXNlVXJsOiBzdHJpbmdcbiAgICAvKiogVGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIHZhbHVlIHRvIGF0dGFjaCB3aGVuIHNlbmRpbmcgcmVxdWVzdHMgdG8gdGhlIHByb3h5LiAqL1xuICAgIGF1dGhvcml6YXRpb24/OiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgYXV0aG9yaXphdGlvbiBoZWFkZXIgbmFtZSB0byB1c2Ugd2hlbiBzZW5kaW5nIHJlcXVlc3RzIHRvIHRoZSBwcm94eVxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiB0aGUgaGVhZGVyIG5hbWUgaXMgc2V0IHRvIGBhdXRob3JpemF0aW9uYCwgaXQgd2lsbCBvdmVycmlkZSBhbnkgYXV0aG9yaXphdGlvbiB0aGF0IGlzIGdpdmVuIGV2ZW4gaWZcbiAgICAgKiB0aGUgcmVxdWVzdHMgdXNlcyBPQXV0aDIgQmVhcmVyIHRva2VucyAvIEJhc2ljIHRva2Vuc1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJhdXRob3JpemF0aW9uXCIgLy8gRm9yIGNvbXBhdGliaWxpdHkgcHVycG9zZXNcbiAgICAgKi9cbiAgICBhdXRob3JpemF0aW9uSGVhZGVyPzogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVuZHBvaW50IHRvIHVzZSBpbiB0aGUgcmVzdCBwcm94eSB0byB1cGRhdGUgdGhlIGJlYXJlciB0b2tlbnNcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogU2hvdWxkIG5vdCBpbmNsdWRlIGEgYC9gIGluIHRoZSBzdGFydFxuICAgICAqXG4gICAgICogVGhpcyB2YWx1ZSBpcyBhY3R1YWxseSByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byB1c2UgYHVwZGF0ZVRva2VuUXVldWVzYFxuICAgICAqL1xuICAgIHVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQ/OiBzdHJpbmdcbiAgfVxuICAvKipcbiAgICogVGhlIGFwaSB2ZXJzaW9ucyB3aGljaCBjYW4gYmUgdXNlZCB0byBtYWtlIHJlcXVlc3RzLlxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgdmVyc2lvbj86IEFwaVZlcnNpb25zXG4gIC8qKlxuICAgKiBUaGUgbG9nZ2VyIHRoYXQgdGhlIHJlc3QgbWFuYWdlciB3aWxsIHVzZVxuICAgKiBAZGVmYXVsdCBsb2dnZXIgLy8gVGhlIGxvZ2dlciBleHBvcnRlZCBieSBgQGRpc2NvcmRlbm8vdXRpbHNgXG4gICAqL1xuICBsb2dnZXI/OiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz5cbiAgLyoqIEV2ZW50cyBmb3IgdGhlIHJlc3QgbWFuYWdlciAqL1xuICBldmVudHM/OiBQYXJ0aWFsPFJlc3RNYW5hZ2VyRXZlbnRzPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RNYW5hZ2VyIHtcbiAgLyoqIFRoZSBib3QgdG9rZW4gd2hpY2ggd2lsbCBiZSB1c2VkIHRvIG1ha2UgcmVxdWVzdHMuICovXG4gIHRva2VuOiBzdHJpbmdcbiAgLyoqIFRoZSBhcHBsaWNhdGlvbiBpZC4gTm9ybWFsbHkgdGhpcyBpcyBub3QgcmVxdWlyZWQgZm9yIHJlY2VudCBib3RzIGJ1dCBvbGQgYm90J3MgYXBwbGljYXRpb24gaWQgaXMgc29tZXRpbWVzIGRpZmZlcmVudCBmcm9tIHRoZSBib3QgaWQgc28gaXQgaXMgcmVxdWlyZWQgZm9yIHRob3NlIGJvdHMuICovXG4gIGFwcGxpY2F0aW9uSWQ6IGJpZ2ludFxuICAvKiogVGhlIGFwaSB2ZXJzaW9uIHRvIHVzZSB3aGVuIG1ha2luZyByZXF1ZXN0cy4gT25seSB0aGUgbGF0ZXN0IHN1cHBvcnRlZCB2ZXJzaW9uIHdpbGwgYmUgdGVzdGVkLiAqL1xuICB2ZXJzaW9uOiBBcGlWZXJzaW9uc1xuICAvKipcbiAgICogVGhlIGJhc2UgdXJsIHRvIGNvbm5lY3QgdG8uIElmIHlvdSBjcmVhdGUgYSBwcm94eSByZXN0LCB0aGF0IHVybCB3b3VsZCBnbyBoZXJlLlxuICAgKiBJVCBTSE9VTEQgTk9UIEVORCBXSVRIIEEgL1xuICAgKiBAZGVmYXVsdCBodHRwczovL2Rpc2NvcmQuY29tL2FwaVxuICAgKi9cbiAgYmFzZVVybDogc3RyaW5nXG4gIC8qKlxuICAgKiBgdHJ1ZWAgaWYgdGhlIGBiYXNlVXJsYCBkb2VzIG5vdCBzdGFydCB3aXRoIGBodHRwczovL2Rpc2NvcmQuY29tL2FwaWAuXG4gICAqXG4gICAqIE1vc3RseSB1c2VkIG9ubHkgZm9yIGludGVybiBmdW5jdGlvbnMuXG4gICAqL1xuICBpc1Byb3hpZWQ6IGJvb2xlYW5cbiAgLyoqIFRoZSBhdXRob3JpemF0aW9uIGhlYWRlciB2YWx1ZSB0byBhdHRhY2ggd2hlbiBzZW5kaW5nIHJlcXVlc3RzIHRvIHRoZSBwcm94eS4gKi9cbiAgYXV0aG9yaXphdGlvbj86IHN0cmluZ1xuICAvKiogVGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIG5hbWUgdG8gYXR0YWNoIHdoZW4gc2VuZGluZyByZXF1ZXN0cyB0byB0aGUgcHJveHkgKi9cbiAgYXV0aG9yaXphdGlvbkhlYWRlcjogc3RyaW5nXG4gIC8qKiBUaGUgZW5kcG9pbnQgdG8gdXNlIGZvciBgdXBkYXRlVG9rZW5RdWV1ZXNgIHdoZW4gd29ya2luZyB3aXRoIGEgcmVzdCBwcm94eSAqL1xuICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50Pzogc3RyaW5nXG4gIC8qKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZXMgYSByZXF1ZXN0IHNob3VsZCBiZSByZXRyaWVkLiBEZWZhdWx0cyB0byBJbmZpbml0eSAqL1xuICBtYXhSZXRyeUNvdW50OiBudW1iZXJcbiAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSBtYW5hZ2VyIGlzIHJhdGUgbGltaXRlZCBnbG9iYWxseSBhY3Jvc3MgYWxsIHJlcXVlc3RzLiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgZ2xvYmFsbHlSYXRlTGltaXRlZDogYm9vbGVhblxuICAvKiogV2hldGhlciBvciBub3QgdGhlIHJhdGUgbGltaXRlZCBwYXRocyBhcmUgYmVpbmcgcHJvY2Vzc2VkIHRvIGFsbG93IHJlcXVlc3RzIHRvIGJlIG1hZGUgb25jZSB0aW1lIGlzIHVwLiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgcHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHM6IGJvb2xlYW5cbiAgLyoqIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBkZWxldGluZyB0aGlzIHF1ZXVlIGlmIGl0IGlzIGVtcHR5LiBEZWZhdWx0cyB0byA2MDAwMChvbmUgbWludXRlKS4gKi9cbiAgZGVsZXRlUXVldWVEZWxheTogbnVtYmVyXG4gIC8qKiBUaGUgcXVldWVzIHRoYXQgaG9sZCBhbGwgdGhlIHJlcXVlc3RzIHRvIGJlIHByb2Nlc3NlZC4gKi9cbiAgcXVldWVzOiBNYXA8c3RyaW5nLCBRdWV1ZT5cbiAgLyoqIFRoZSBwYXRocyB0aGF0IGFyZSBjdXJyZW50bHkgcmF0ZSBsaW1pdGVkLiAqL1xuICByYXRlTGltaXRlZFBhdGhzOiBNYXA8c3RyaW5nLCBSZXN0UmF0ZUxpbWl0ZWRQYXRoPlxuICAvKiogVGhlIGJ1Y2tldCBmb3IgaGFuZGxpbmcgYW55IGludmFsaWQgcmVxdWVzdHMuICAqL1xuICBpbnZhbGlkQnVja2V0OiBJbnZhbGlkUmVxdWVzdEJ1Y2tldFxuICAvKiogVGhlIHJvdXRlcyB0aGF0IGFyZSBhdmFpbGFibGUgZm9yIHRoaXMgbWFuYWdlci4gKi9cbiAgcm91dGVzOiBSZXN0Um91dGVzXG4gIC8qKiBUaGUgbG9nZ2VyIHRvIHVzZSBmb3IgdGhlIHJlc3QgbWFuYWdlciAqL1xuICBsb2dnZXI6IFBpY2s8dHlwZW9mIGxvZ2dlciwgJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicgfCAnZmF0YWwnPlxuICAvKiogRXZlbnRzIGZvciB0aGUgcmVzdCBtYW5hZ2VyICovXG4gIGV2ZW50czogUmVzdE1hbmFnZXJFdmVudHNcbiAgLyoqIEFsbG93cyB0aGUgdXNlciB0byBpbmplY3QgY3VzdG9tIGhlYWRlcnMgdGhhdCB3aWxsIGJlIHNlbnQgd2l0aCBldmVyeSByZXF1ZXN0LiAqL1xuICBjcmVhdGVCYXNlSGVhZGVyczogKCkgPT4gUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAvKiogV2hldGhlciBvciBub3QgdGhlIHJlc3QgbWFuYWdlciBzaG91bGQga2VlcCBvYmplY3RzIGluIHJhdyBzbmFrZSBjYXNlIGZyb20gZGlzY29yZC4gKi9cbiAgcHJlZmVyU25ha2VDYXNlOiAoZW5hYmxlZDogYm9vbGVhbikgPT4gUmVzdE1hbmFnZXJcbiAgLyoqIENoZWNrIHRoZSByYXRlIGxpbWl0cyBmb3IgYSB1cmwgb3IgYSBidWNrZXQuICovXG4gIGNoZWNrUmF0ZUxpbWl0czogKHVybDogc3RyaW5nLCBpZGVudGlmaWVyOiBzdHJpbmcpID0+IG51bWJlciB8IGZhbHNlXG4gIC8qIFVwZGF0ZSB0aGUgcXVldWVzIGFuZCByYXRlbGltaXQgaW5mb3JtYXRpb24gdG8gYWRhcHQgdG8gdGhlIG5ldyB0b2tlbiAqL1xuICB1cGRhdGVUb2tlblF1ZXVlczogKG9sZFRva2VuOiBzdHJpbmcsIG5ld1Rva2VuOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFJlc2hhcGVzIGFuZCBtb2RpZmllcyB0aGUgb2JqIGFzIG5lZWRlZCB0byBtYWtlIGl0IHJlYWR5IGZvciBkaXNjb3JkcyBhcGkuICovXG4gIGNoYW5nZVRvRGlzY29yZEZvcm1hdDogKG9iajogYW55KSA9PiBhbnlcbiAgLyoqIENyZWF0ZXMgdGhlIHJlcXVlc3QgYm9keSBhbmQgaGVhZGVycyB0aGF0IGFyZSBuZWNlc3NhcnkgdG8gc2VuZCBhIHJlcXVlc3QuIFdpbGwgaGFuZGxlIGRpZmZlcmVudCB0eXBlcyBvZiBtZXRob2RzIGFuZCBldmVyeXRoaW5nIG5lY2Vzc2FyeSBmb3IgZGlzY29yZC4gKi9cbiAgY3JlYXRlUmVxdWVzdEJvZHk6IChtZXRob2Q6IFJlcXVlc3RNZXRob2RzLCBvcHRpb25zPzogQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zKSA9PiBSZXF1ZXN0Qm9keVxuICAvKiogVGhpcyB3aWxsIGNyZWF0ZSBhIGluZmluaXRlIGxvb3AgcnVubmluZyBpbiAxIHNlY29uZHMgdXNpbmcgdGFpbCByZWN1cnNpb24gdG8ga2VlcCByYXRlIGxpbWl0cyBjbGVhbi4gV2hlbiBhIHJhdGUgbGltaXQgcmVzZXRzLCB0aGlzIHdpbGwgcmVtb3ZlIGl0IHNvIHRoZSBxdWV1ZSBjYW4gcHJvY2VlZC4gKi9cbiAgcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHM6ICgpID0+IHZvaWRcbiAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICBwcm9jZXNzSGVhZGVyczogKHVybDogc3RyaW5nLCBoZWFkZXJzOiBIZWFkZXJzLCBpZGVudGlmaWVyOiBzdHJpbmcpID0+IHN0cmluZyB8IHVuZGVmaW5lZFxuICAvKiogU2VuZHMgYSByZXF1ZXN0IHRvIHRoZSBhcGkuICovXG4gIHNlbmRSZXF1ZXN0OiAob3B0aW9uczogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBTcGxpdCBhIHVybCB0byBzZXBhcmF0ZSByYXRlIGxpbWl0IGJ1Y2tldHMgYmFzZWQgb24gbWFqb3IvbWlub3IgcGFyYW1ldGVycy4gKi9cbiAgc2ltcGxpZnlVcmw6ICh1cmw6IHN0cmluZywgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kcykgPT4gc3RyaW5nXG4gIC8qKiBNYWtlIGEgcmVxdWVzdCB0byBiZSBzZW50IHRvIHRoZSBhcGkuICovXG4gIG1ha2VSZXF1ZXN0OiA8VCA9IHVua25vd24+KG1ldGhvZDogUmVxdWVzdE1ldGhvZHMsIHVybDogc3RyaW5nLCBvcHRpb25zPzogTWFrZVJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFQ+XG4gIC8qKiBUYWtlcyBhIHJlcXVlc3QgYW5kIHByb2Nlc3NlcyBpdCBpbnRvIGEgcXVldWUuICovXG4gIHByb2Nlc3NSZXF1ZXN0OiAocmVxdWVzdDogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBNYWtlIGEgZ2V0IHJlcXVlc3QgdG8gdGhlIGFwaSAqL1xuICBnZXQ6IDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxUPj5cbiAgLyoqIE1ha2UgYSBwb3N0IHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgcG9zdDogPFQgPSB2b2lkPih1cmw6IHN0cmluZywgb3B0aW9ucz86IE1ha2VSZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxUPj5cbiAgLyoqIE1ha2UgYSBwdXQgcmVxdWVzdCB0byB0aGUgYXBpLiAqL1xuICBwdXQ6IDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBNYWtlUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8VD4+XG4gIC8qKiBNYWtlIGEgZGVsZXRlIHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgZGVsZXRlOiAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogTWFrZSBhIHBhdGNoIHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgcGF0Y2g6IDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBNYWtlUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8VD4+XG4gIC8qKlxuICAgKiBBZGRzIGEgcmVhY3Rpb24gdG8gYSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIHRvIGFkZCBhIHJlYWN0aW9uIHRvIGlzIGluLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGFkZCBhIHJlYWN0aW9uIHRvLlxuICAgKiBAcGFyYW0gcmVhY3Rpb24gLSBUaGUgcmVhY3Rpb24gdG8gYWRkIHRvIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJuc1xuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBub2JvZHkgZWxzZSBoYXMgcmVhY3RlZCB0byB0aGUgbWVzc2FnZTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYEFERF9SRUFDVElPTlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgUmVhY3Rpb24gQWRkXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNjcmVhdGUtcmVhY3Rpb259XG4gICAqL1xuICBhZGRSZWFjdGlvbjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgcmVhY3Rpb246IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogQWRkcyBtdWx0aXBsZSBhIHJlYWN0aW9uIHRvIGEgbWVzc2FnZS5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBgYWRkUmVhY3Rpb24oKWAgaGVscGVyIGJlaGluZCB0aGUgc2NlbmVzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIHRvIGFkZCByZWFjdGlvbnMgdG8gaXMgaW4uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gYWRkIHRoZSByZWFjdGlvbnMgdG8uXG4gICAqIEBwYXJhbSByZWFjdGlvbnMgLSBUaGUgcmVhY3Rpb25zIHRvIGFkZCB0byB0aGUgbWVzc2FnZS5cbiAgICogQHBhcmFtIG9yZGVyZWQgLSBXaGV0aGVyIHRoZSByZWFjdGlvbnMgbXVzdCBiZSBhZGRlZCBpbiBvcmRlciBvciBub3QuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIElmIG5vYm9keSBlbHNlIGhhcyByZWFjdGVkIHRvIHRoZSBtZXNzYWdlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgQUREX1JFQUNUSU9OU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBSZWFjdGlvbiBBZGRfIGdhdGV3YXkgZXZlbnQgZm9yIGV2ZXJ5IHJlYWN0aW9uIGFkZGVkLlxuICAgKi9cbiAgYWRkUmVhY3Rpb25zOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCByZWFjdGlvbnM6IHN0cmluZ1tdLCBvcmRlcmVkPzogYm9vbGVhbikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogQWRkcyBhIHJvbGUgdG8gYSBtZW1iZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgbWVtYmVyIHRvIGFkZCB0aGUgcm9sZSB0byBpcyBpbi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gYWRkIHRoZSByb2xlIHRvLlxuICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIGFkZCB0byB0aGUgbWVtYmVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjYWRkLWd1aWxkLW1lbWJlci1yb2xlfVxuICAgKi9cbiAgYWRkUm9sZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEFkZHMgYSBtZW1iZXIgdG8gYSB0aHJlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRocmVhZCB0byBhZGQgdGhlIG1lbWJlciB0by5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gYWRkIHRvIHRoZSB0aHJlYWQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBhYmlsaXR5IHRvIHNlbmQgbWVzc2FnZXMgaW4gdGhlIHRocmVhZC5cbiAgICogUmVxdWlyZXMgdGhlIHRocmVhZCBub3QgYmUgYXJjaGl2ZWQuXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBNZW1iZXJzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjYWRkLXRocmVhZC1tZW1iZXJ9XG4gICAqL1xuICBhZGRUaHJlYWRNZW1iZXI6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEFkZHMgYSByZWNpcGllbnQgdG8gYSBncm91cCBETS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgZ3JvdXAgZG0gdG8gYWRkIHRoZSB1c2VyIHRvLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIHVzZXIgdG8gYWRkIHRvIHRoZSBncm91cCBkbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgYWRkaW5nIHRoZSB1c2VyXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4gd2l0aCB0aGUgYGdkbS5qb2luYCBzY29wZVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNncm91cC1kbS1hZGQtcmVjaXBpZW50fVxuICAgKi9cbiAgYWRkRG1SZWNpcGllbnQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEFkZERtUmVjaXBpZW50T3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogQWRkcyBhIG1lbWJlciB0byBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIGFkZCB0aGUgbWVtYmVyIHRvLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIG1lbWJlciB0byBhZGQgdG8gdGhlIHRocmVhZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGFkZCBvZiBhIGd1aWxkIG1lbWJlclxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYm90IHRvIGJlIGluIHRoZSBzcGVjaWZpZWQgc2VydmVyXG4gICAqIFJlcXVpcmVzIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4gd2l0aCB0aGUgYGd1aWxkcy5qb2luYCBzY29wZVxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgQWRkXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjYWRkLWd1aWxkLW1lbWJlcn1cbiAgICovXG4gIGFkZEd1aWxkTWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQWRkR3VpbGRNZW1iZXJPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGF1dG9tb2QgcnVsZSBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gY3JlYXRlIHRoZSBydWxlIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHJ1bGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYW4gX0F1dG8gTW9kZXJhdGlvbiBSdWxlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNjcmVhdGUtYXV0by1tb2RlcmF0aW9uLXJ1bGV9XG4gICAqL1xuICBjcmVhdGVBdXRvbW9kUnVsZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlQXV0b01vZGVyYXRpb25SdWxlT3B0aW9ucywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNoYW5uZWwgd2l0aGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIGNoYW5uZWwgd2l0aGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGNoYW5uZWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRDaGFubmVsfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfQ0hBTk5FTFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIElmIHNldHRpbmcgcGVybWlzc2lvbiBvdmVyd3JpdGVzLCBvbmx5IHRoZSBwZXJtaXNzaW9ucyB0aGUgYm90IHVzZXIgaGFzIGluIHRoZSBndWlsZCBjYW4gYmUgYWxsb3dlZCBvciBkZW5pZWQuXG4gICAqXG4gICAqIFNldHRpbmcgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24gaXMgb25seSBwb3NzaWJsZSBmb3IgZ3VpbGQgYWRtaW5pc3RyYXRvcnMuXG4gICAqXG4gICAqIEZpcmVzIGEgX0NoYW5uZWwgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjY3JlYXRlLWd1aWxkLWNoYW5uZWx9XG4gICAqL1xuICBjcmVhdGVDaGFubmVsOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVHdWlsZENoYW5uZWwsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtb2ppIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBpbiB3aGljaCB0byBjcmVhdGUgdGhlIGVtb2ppLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGVtb2ppLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkRW1vaml9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRW1vamlzIGhhdmUgYSBtYXhpbXVtIGZpbGUgc2l6ZSBvZiAyNTYga2lsb2JpdHMuIEF0dGVtcHRpbmcgdG8gdXBsb2FkIGEgbGFyZ2VyIGVtb2ppIHdpbGwgY2F1c2UgdGhlIHJvdXRlIHRvIHJldHVybiA0MDAgQmFkIFJlcXVlc3QuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIEVtb2ppcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNjcmVhdGUtZ3VpbGQtZW1vaml9XG4gICAqL1xuICBjcmVhdGVFbW9qaTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlR3VpbGRFbW9qaSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtb2ppIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgZW1vamkuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkRW1vaml9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjY3JlYXRlLWFwcGxpY2F0aW9uLWVtb2ppfVxuICAgKi9cbiAgY3JlYXRlQXBwbGljYXRpb25FbW9qaTogKG9wdGlvbnM6IENyZWF0ZUFwcGxpY2F0aW9uRW1vamkpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVtb2ppPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgdGhyZWFkIGluIGEgZm9ydW0gY2hhbm5lbCBvciBtZWRpYSBjaGFubmVsLCBhbmQgc2VuZHMgYSBtZXNzYWdlIHdpdGhpbiB0aGUgY3JlYXRlZCB0aHJlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGZvcnVtIGNoYW5uZWwgdG8gY3JlYXRlIHRoZSB0aHJlYWQgd2l0aGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHRocmVhZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9IHdpdGggYSBuZXN0ZWQge0BsaW5rIERpc2NvcmRDaGFubmVsfSBvYmplY3QuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQ1JFQVRFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjc3RhcnQtdGhyZWFkLWluLWZvcnVtLW9yLW1lZGlhLWNoYW5uZWx9XG4gICAqL1xuICBjcmVhdGVGb3J1bVRocmVhZDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVGb3J1bVBvc3RXaXRoTWVzc2FnZSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXBwbGljYXRpb24gY29tbWFuZCBhY2Nlc3NpYmxlIGdsb2JhbGx5OyBhY3Jvc3MgZGlmZmVyZW50IGd1aWxkcyBhbmQgY2hhbm5lbHMuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gY3JlYXRlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGVuZHBvaW50XG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIENyZWF0aW5nIGEgY29tbWFuZCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgY29tbWFuZCBmb3IgeW91ciBhcHBsaWNhdGlvbiB3aWxsIG92ZXJ3cml0ZSB0aGUgb2xkIGNvbW1hbmQuXG4gICAqIOKaoO+4jyBHbG9iYWwgY29tbWFuZHMgb25jZSBjcmVhdGVkIGFyZSBjYWNoZWQgZm9yIHBlcmlvZHMgb2YgX19hbiBob3VyX18sIHNvIGNoYW5nZXMgbWFkZSB0byBleGlzdGluZyBjb21tYW5kcyB3aWxsIHRha2UgYW4gaG91ciB0byBzdXJmYWNlLlxuICAgKiDimqDvuI8gWW91IGNhbiBvbmx5IGNyZWF0ZSB1cCB0byAyMDAgX25ld18gY29tbWFuZHMgZGFpbHkuXG4gICAqXG4gICAqIFdoZW4gdXNpbmcgdGhlIGJlYXJlciB0b2tlbiB0aGUgdG9rZW4gbmVlZHMgdGhlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMudXBkYXRlYCBzY29wZSBhbmQgbXVzdCBiZSBhIGBDbGllbnQgZ3JhbnRgIHRva2VuLlxuICAgKiAgWW91IHdpbGwgYmUgYWJsZSB0byB1cGRhdGUgb25seSB5b3VyIG93biBhcHBsaWNhdGlvbiBjb21tYW5kc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjY3JlYXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoXG4gICAgY29tbWFuZDogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kLFxuICAgIG9wdGlvbnM/OiBDcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRPcHRpb25zLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGFwcGxpY2F0aW9uIGNvbW1hbmQgb25seSBhY2Nlc3NpYmxlIGluIGEgc3BlY2lmaWMgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gY3JlYXRlLlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gY3JlYXRlIHRoZSBjb21tYW5kIGZvci5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKaoO+4jyBDcmVhdGluZyBhIGNvbW1hbmQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIGNvbW1hbmQgZm9yIHlvdXIgYXBwbGljYXRpb24gd2lsbCBvdmVyd3JpdGUgdGhlIG9sZCBjb21tYW5kLlxuICAgKiDimqDvuI8gWW91IGNhbiBvbmx5IGNyZWF0ZSB1cCB0byAyMDAgX25ld18gY29tbWFuZHMgZGFpbHkuXG4gICAqXG4gICAqIFdoZW4gdXNpbmcgdGhlIGJlYXJlciB0b2tlbiB0aGUgdG9rZW4gbmVlZHMgdGhlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMudXBkYXRlYCBzY29wZSBhbmQgbXVzdCBiZSBhIGBDbGllbnQgZ3JhbnRgIHRva2VuLlxuICAgKiAgWW91IHdpbGwgYmUgYWJsZSB0byB1cGRhdGUgb25seSB5b3VyIG93biBhcHBsaWNhdGlvbiBjb21tYW5kc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjY3JlYXRlLWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZDogKFxuICAgIGNvbW1hbmQ6IENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9ucz86IENyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PlxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHN0aWNrZXIgZm9yIHRoZSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJuIEEge0BsaW5rIERpc2NvcmRTdGlja2VyfVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRmlyZXMgYSBHdWlsZCBTdGlja2VycyBVcGRhdGUgR2F0ZXdheSBldmVudC5cbiAgICogRXZlcnkgZ3VpbGRzIGhhcyBmaXZlIGZyZWUgc3RpY2tlciBzbG90cyBieSBkZWZhdWx0LCBhbmQgZWFjaCBCb29zdCBsZXZlbCB3aWxsIGdyYW50IGFjY2VzcyB0byBtb3JlIHNsb3RzLlxuICAgKiBMb3R0aWUgc3RpY2tlcnMgY2FuIG9ubHkgYmUgdXBsb2FkZWQgb24gZ3VpbGRzIHRoYXQgaGF2ZSBlaXRoZXIgdGhlIGBWRVJJRklFRGAgYW5kL29yIHRoZSBgUEFSVE5FUkVEYCBndWlsZCBmZWF0dXJlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RpY2tlciNjcmVhdGUtZ3VpbGQtc3RpY2tlcn1cbiAgICovXG4gIGNyZWF0ZUd1aWxkU3RpY2tlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlR3VpbGRTdGlja2VyT3B0aW9ucywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGlja2VyPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHRlbXBsYXRlIGZyb20uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkVGVtcGxhdGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjY3JlYXRlLWd1aWxkLXRlbXBsYXRlfVxuICAgKi9cbiAgY3JlYXRlR3VpbGRUZW1wbGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlVGVtcGxhdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW52aXRlIHRvIGEgY2hhbm5lbCBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGNyZWF0ZSB0aGUgaW52aXRlIHRvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGludml0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZEludml0ZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQ1JFQVRFX0lOU1RBTlRfSU5WSVRFYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfSW52aXRlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHByaXZhdGVSZW1hcmtzXG4gICAqIFRoZSByZXF1ZXN0IGJvZHkgaXMgbm90IG9wdGlvbmFsLCBhbmQgYW4gZW1wdHkgSlNPTiBvYmplY3QgbXVzdCBiZSBzZW50IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhbnkgZmllbGRzIGFyZSBiZWluZyB0cmFuc21pdHRlZC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjY3JlYXRlLWNoYW5uZWwtaW52aXRlfVxuICAgKi9cbiAgY3JlYXRlSW52aXRlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBDcmVhdGVDaGFubmVsSW52aXRlLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludml0ZT4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcm9sZSBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gY3JlYXRlIHRoZSByb2xlIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHJvbGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRSb2xlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFJvbGUgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjY3JlYXRlLWd1aWxkLXJvbGV9XG4gICAqL1xuICBjcmVhdGVSb2xlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVHdWlsZFJvbGUsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkUm9sZT4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc2NoZWR1bGVkIGV2ZW50IGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHNjaGVkdWxlZCBldmVudCBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRTY2hlZHVsZWRFdmVudH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VWRU5UU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQSBndWlsZCBjYW4gb25seSBoYXZlIGEgbWF4aW11bSBvZiAxMDAgZXZlbnRzIHdpdGggYSBzdGF0dXMgb2Yge0BsaW5rIFNjaGVkdWxlZEV2ZW50U3RhdHVzfS5BY3RpdmUgb3Ige0BsaW5rIFNjaGVkdWxlZEV2ZW50U3RhdHVzfS5TY2hlZHVsZWQgKGluY2x1c2l2ZSkuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFNjaGVkdWxlZCBFdmVudCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjY3JlYXRlLWd1aWxkLXNjaGVkdWxlZC1ldmVudH1cbiAgICovXG4gIGNyZWF0ZVNjaGVkdWxlZEV2ZW50OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVTY2hlZHVsZWRFdmVudCwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTY2hlZHVsZWRFdmVudD4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc3RhZ2UgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGEgc3RhZ2UgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBzdGFnZSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZFN0YWdlSW5zdGFuY2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgdXNlciB0byBiZSBhIG1vZGVyYXRvciBvZiB0aGUgc3RhZ2UgY2hhbm5lbC5cbiAgICpcbiAgICogRmlyZXMgYSBfU3RhZ2UgSW5zdGFuY2UgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RhZ2UtaW5zdGFuY2UjY3JlYXRlLXN0YWdlLWluc3RhbmNlfVxuICAgKi9cbiAgY3JlYXRlU3RhZ2VJbnN0YW5jZTogKG9wdGlvbnM6IENyZWF0ZVN0YWdlSW5zdGFuY2UsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgd2ViaG9vay5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBjcmVhdGUgdGhlIHdlYmhvb2sgaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgd2ViaG9vay5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICog4pqg77iPIFRoZSB3ZWJob29rIG5hbWUgbXVzdCBub3QgY29udGFpbiB0aGUgc3Vic3RyaW5ncyAnY2x5ZGUnLCBvciAnZGlzY29yZCcgKGNhc2UtaW5zZW5zaXRpdmUpLlxuICAgKlxuICAgKiBGaXJlcyBhIF9XZWJob29rcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2NyZWF0ZS13ZWJob29rfVxuICAgKi9cbiAgY3JlYXRlV2ViaG9vazogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVXZWJob29rLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PlxuICAvKipcbiAgICogRGVsZXRlcyBhbiBhdXRvbW9kIHJ1bGUuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIHJ1bGUgZnJvbS5cbiAgICogQHBhcmFtIHJ1bGVJZCAtIFRoZSBJRCBvZiB0aGUgYXV0b21vZCBydWxlIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYW4gX0F1dG8gTW9kZXJhdGlvbiBSdWxlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNkZWxldGUtYXV0by1tb2RlcmF0aW9uLXJ1bGV9XG4gICAqL1xuICBkZWxldGVBdXRvbW9kUnVsZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcnVsZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIGNoYW5uZWwgZnJvbSB3aXRoaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgbm90aGluZ1xuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGb3IgY29tbXVuaXR5IGd1aWxkcywgdGhlIF9SdWxlc18sIF9HdWlkZWxpbmVzXyBhbmQgX0NvbW11bml0eSBVcGRhdGVfIGNoYW5uZWxzIGNhbm5vdCBiZSBkZWxldGVkLlxuICAgKlxuICAgKiBJZiB0aGUgY2hhbm5lbCBpcyBhIHRocmVhZDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9USFJFQURTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiAtIEZpcmVzIGEgX1RocmVhZCBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIE90aGVyd2lzZTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogLSDimqDvuI8gRGVsZXRpbmcgYSBjYXRlZ29yeSBjaGFubmVsIGRvZXMgbm90IGRlbGV0ZSBpdHMgY2hpbGQgY2hhbm5lbHMuXG4gICAqICAgSW5zdGVhZCwgdGhleSB3aWxsIGhhdmUgdGhlaXIgYHBhcmVudF9pZGAgcHJvcGVydHkgcmVtb3ZlZCwgYW5kIGEgYENoYW5uZWwgVXBkYXRlYCBnYXRld2F5IGV2ZW50IHdpbGwgZmlyZSBmb3IgZWFjaCBvZiB0aGVtLlxuICAgKlxuICAgKiAtIEZpcmVzIGEgX0NoYW5uZWwgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGVjbG9zZS1jaGFubmVsfVxuICAgKi9cbiAgZGVsZXRlQ2hhbm5lbDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBwZXJtaXNzaW9uIG92ZXJyaWRlIGZvciBhIHVzZXIgb3Igcm9sZSBpbiBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZGVsZXRlIHRoZSBwZXJtaXNzaW9uIG92ZXJyaWRlIG9mLlxuICAgKiBAcGFyYW0gb3ZlcndyaXRlSWQgLSBUaGUgSUQgb2YgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGUgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLWNoYW5uZWwtcGVybWlzc2lvbn1cbiAgICovXG4gIGRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGU6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3ZlcndyaXRlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGVtb2ppIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGZyb20gd2hpY2ggdG8gZGVsZXRlIHRoZSBlbW9qaS5cbiAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRm9yIGVtb2ppcyBjcmVhdGVkIGJ5IHRoZSBjdXJyZW50IHVzZXIsIHJlcXVpcmVzIGVpdGhlciB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRm9yIG90aGVyIGVtb2ppcywgcmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIEVtb2ppcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNkZWxldGUtZ3VpbGQtZW1vaml9XG4gICAqL1xuICBkZWxldGVFbW9qaTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgaWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGVtb2ppIGZyb20gdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhlIGVtb2ppIHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2Vtb2ppI2RlbGV0ZS1hcHBsaWNhdGlvbi1lbW9qaX1cbiAgICovXG4gIGRlbGV0ZUFwcGxpY2F0aW9uRW1vamk6IChpZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgZm9sbG93LXVwIG1lc3NhZ2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZGVsZXRlTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0IG5lZWRpbmcgdG8gc2VlIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIGluLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZGVsZXRlLWZvbGxvd3VwLW1lc3NhZ2V9XG4gICAqL1xuICBkZWxldGVGb2xsb3d1cE1lc3NhZ2U6ICh0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIHJlZ2lzdGVyZWQgZ2xvYmFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZGVsZXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gYXBwbGljYXRpb24gY29tbWFuZCByZWdpc3RlcmVkIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIGNvbW1hbmQgZnJvbS5cbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBkZWxldGUgZnJvbSB0aGUgZ3VpbGQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNkZWxldGUtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcsIGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlIGEgbmV3IHN0aWNrZXIgZm9yIHRoZSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJuIEEge0BsaW5rIERpc2NvcmRTdGlja2VyfVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGb3Igc3RpY2tlcnMgY3JlYXRlZCBieSB0aGUgY3VycmVudCB1c2VyLCByZXF1aXJlcyBlaXRoZXIgdGhlIGBDUkVBVEVfR1VJTERfRVhQUkVTU0lPTlNgIG9yIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqIEZvciBvdGhlciBzdGlja2VycywgcmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqIEZpcmVzIGEgR3VpbGQgU3RpY2tlcnMgVXBkYXRlIEdhdGV3YXkgZXZlbnQuXG4gICAqIEV2ZXJ5IGd1aWxkcyBoYXMgZml2ZSBmcmVlIHN0aWNrZXIgc2xvdHMgYnkgZGVmYXVsdCwgYW5kIGVhY2ggQm9vc3QgbGV2ZWwgd2lsbCBncmFudCBhY2Nlc3MgdG8gbW9yZSBzbG90cy5cbiAgICogTG90dGllIHN0aWNrZXJzIGNhbiBvbmx5IGJlIHVwbG9hZGVkIG9uIGd1aWxkcyB0aGF0IGhhdmUgZWl0aGVyIHRoZSBgVkVSSUZJRURgIGFuZC9vciB0aGUgYFBBUlRORVJFRGAgZ3VpbGQgZmVhdHVyZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0aWNrZXIjZGVsZXRlLWd1aWxkLXN0aWNrZXJ9XG4gICAqL1xuICBkZWxldGVHdWlsZFN0aWNrZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHN0aWNrZXJJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB0ZW1wbGF0ZSBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIHRlbXBsYXRlIGZyb20uXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZUNvZGUgLSBUaGUgY29kZSBvZiB0aGUgdGVtcGxhdGUgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjZGVsZXRlLWd1aWxkLXRlbXBsYXRlfVxuICAgKi9cbiAgZGVsZXRlR3VpbGRUZW1wbGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdGVtcGxhdGVDb2RlOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gaW50ZWdyYXRpb24gYXR0YWNoZWQgdG8gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGZyb20gd2hpY2ggdG8gZGVsZXRlIHRoZSBpbnRlZ3JhdGlvbi5cbiAgICogQHBhcmFtIGludGVncmF0aW9uSWQgLSBUaGUgSUQgb2YgdGhlIGludGVncmF0aW9uIHRvIGRlbGV0ZSBmcm9tIHRoZSBndWlsZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRGVsZXRlcyBhbGwgd2ViaG9va3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnRlZ3JhdGlvbiwgYW5kIGtpY2tzIHRoZSBhc3NvY2lhdGVkIGJvdCBpZiB0aGVyZSBpcyBvbmUuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIEludGVncmF0aW9ucyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqIEZpcmVzIGEgX0ludGVncmF0aW9uIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2RlbGV0ZS1ndWlsZC1pbnRlZ3JhdGlvbn1cbiAgICovXG4gIGRlbGV0ZUludGVncmF0aW9uOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBpbnRlZ3JhdGlvbklkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhbiBpbnZpdGUgdG8gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gaW52aXRlQ29kZSAtIFRoZSBpbnZpdGUgY29kZSBvZiB0aGUgaW52aXRlIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYW4gX0ludml0ZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZS1jaGFubmVsLWludml0ZX1cbiAgICovXG4gIGRlbGV0ZUludml0ZTogKGludml0ZUNvZGU6IHN0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgbWVzc2FnZSBmcm9tIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBkZWxldGUgdGhlIG1lc3NhZ2UgZnJvbS5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUgZnJvbSB0aGUgY2hhbm5lbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiBub3QgZGVsZXRpbmcgb3duIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGUtbWVzc2FnZX1cbiAgICovXG4gIGRlbGV0ZU1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBtdWx0aXBsZSBtZXNzYWdlcyBmcm9tIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBkZWxldGUgdGhlIG1lc3NhZ2VzIGZyb20uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWRzIC0gVGhlIElEcyBvZiB0aGUgbWVzc2FnZXMgdG8gZGVsZXRlIGZyb20gdGhlIGNoYW5uZWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIOKaoO+4jyBNZXNzYWdlcyBvbGRlciB0aGFuIDIgd2Vla3Mgb2xkIGNhbm5vdCBiZSBkZWxldGVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZSBCdWxrXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNidWxrLWRlbGV0ZS1tZXNzYWdlc31cbiAgICovXG4gIGRlbGV0ZU1lc3NhZ2VzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZHM6IEJpZ1N0cmluZ1tdLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGluaXRpYWwgbWVzc2FnZSByZXNwb25zZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVbmxpa2UgYGRlbGV0ZU1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dCBuZWVkaW5nIHRvIHNlZSB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyBpbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2RlbGV0ZS1vcmlnaW5hbC1pbnRlcmFjdGlvbi1yZXNwb25zZX1cbiAgICovXG4gIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZTogKHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSByZWFjdGlvbiBhZGRlZCBieSB0aGUgYm90IHVzZXIgZnJvbSBhIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlIHRoZSByZWFjdGlvbiBmcm9tIGlzIGluLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSB0aGUgcmVhY3Rpb24gZnJvbS5cbiAgICogQHBhcmFtIHJlYWN0aW9uIC0gVGhlIHJlYWN0aW9uIHRvIGRlbGV0ZSBmcm9tIHRoZSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFJlYWN0aW9uIFJlbW92ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLW93bi1yZWFjdGlvbn1cbiAgICovXG4gIGRlbGV0ZU93blJlYWN0aW9uOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCByZWFjdGlvbjogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGFsbCByZWFjdGlvbnMgZm9yIGFsbCBlbW9qaXMgZnJvbSBhIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlIHRoZSByZWFjdGlvbnMgZnJvbSBpcyBpbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9ucyBmcm9tLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBSZWFjdGlvbiBSZW1vdmUgQWxsXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGUtYWxsLXJlYWN0aW9uc31cbiAgICovXG4gIGRlbGV0ZVJlYWN0aW9uc0FsbDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhbGwgcmVhY3Rpb25zIGZvciBhbiBlbW9qaSBmcm9tIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9ucyBmcm9tIGlzIGluLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSB0aGUgcmVhY3Rpb25zIGZyb20uXG4gICAqIEBwYXJhbSByZWFjdGlvbiAtIFRoZSByZWFjdGlvbiB0byByZW1vdmUgZnJvbSB0aGUgbWVzc2FnZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgUmVhY3Rpb24gUmVtb3ZlIEVtb2ppXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGUtYWxsLXJlYWN0aW9ucy1mb3ItZW1vaml9XG4gICAqL1xuICBkZWxldGVSZWFjdGlvbnNFbW9qaTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgcmVhY3Rpb246IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHJvbGUgZnJvbSBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZGVsZXRlIHRoZSByb2xlIGZyb20uXG4gICAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBSb2xlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2RlbGV0ZS1ndWlsZC1yb2xlfVxuICAgKi9cbiAgZGVsZXRlUm9sZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcm9sZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHNjaGVkdWxlZCBldmVudCBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIHNjaGVkdWxlZCBldmVudCBmcm9tLlxuICAgKiBAcGFyYW0gZXZlbnRJZCAtIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRVZFTlRTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBTY2hlZHVsZWQgRXZlbnQgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I2RlbGV0ZS1ndWlsZC1zY2hlZHVsZWQtZXZlbnR9XG4gICAqL1xuICBkZWxldGVTY2hlZHVsZWRFdmVudDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgZXZlbnRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBzdGFnZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggYSBzdGFnZSBjaGFubmVsLCBpZiBvbmUgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBzdGFnZSBjaGFubmVsIHRoZSBzdGFnZSBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIHVzZXIgdG8gYmUgYSBtb2RlcmF0b3Igb2YgdGhlIHN0YWdlIGNoYW5uZWwuXG4gICAqXG4gICAqIEZpcmVzIGEgX1N0YWdlIEluc3RhbmNlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0YWdlLWluc3RhbmNlI2RlbGV0ZS1zdGFnZS1pbnN0YW5jZX1cbiAgICovXG4gIGRlbGV0ZVN0YWdlSW5zdGFuY2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgdXNlcidzIHJlYWN0aW9uIGZyb20gYSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSB0aGUgcmVhY3Rpb24gZnJvbSBpcyBpbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9uIGZyb20uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgd2hvc2UgcmVhY3Rpb24gdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0gcmVhY3Rpb24gLSBUaGUgcmVhY3Rpb24gdG8gZGVsZXRlIGZyb20gdGhlIG1lc3NhZ2UuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFJlYWN0aW9uIFJlbW92ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLXVzZXItcmVhY3Rpb259XG4gICAqL1xuICBkZWxldGVVc2VyUmVhY3Rpb246IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCByZWFjdGlvbjogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgd2ViaG9vay5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9XZWJob29rcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2RlbGV0ZS13ZWJob29rfVxuICAgKi9cbiAgZGVsZXRlV2ViaG9vazogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB3ZWJob29rIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZGVsZXRlIHRoZSBtZXNzYWdlIGJlbG9uZ2luZyB0by5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gbWFuYWdlIHRoZSB3ZWJob29rLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGRlbGV0aW9uIG9mIHRoZSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZGVsZXRlLXdlYmhvb2t9XG4gICAqL1xuICBkZWxldGVXZWJob29rTWVzc2FnZTogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IERlbGV0ZVdlYmhvb2tNZXNzYWdlT3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHdlYmhvb2sgbWVzc2FnZSB1c2luZyB0aGUgd2ViaG9vayB0b2tlbiwgdGhlcmVieSBieXBhc3NpbmcgdGhlIG5lZWQgZm9yIGF1dGhlbnRpY2F0aW9uICsgcGVybWlzc2lvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZGVsZXRlIHRoZSBtZXNzYWdlIGJlbG9uZ2luZyB0by5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZGVsZXRlIHRoZSB3ZWJob29rLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZGVsZXRlLXdlYmhvb2std2l0aC10b2tlbn1cbiAgICovXG4gIGRlbGV0ZVdlYmhvb2tXaXRoVG9rZW46ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRWRpdHMgdGhlIHBlcm1pc3Npb25zIGZvciBhIGd1aWxkIGFwcGxpY2F0aW9uIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgY29tbWFuZCBpcyByZWdpc3RlcmVkIGluLlxuICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGVkaXQgdGhlIHBlcm1pc3Npb25zIG9mLlxuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBUaGUgYmVhcmVyIHRva2VuIHRvIHVzZSB0byBtYWtlIHRoZSByZXF1ZXN0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgY29tbWFuZCBwZXJtaXNzaW9ucy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnN9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYmVhcmVyIHRva2VuIHJlcXVpcmVzIHRoZSBgYXBwbGljYXRpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zLnVwZGF0ZWAgc2NvcGUgdG8gYmUgZW5hYmxlZCwgYW5kIHRvIGhhdmUgYWNjZXNzIHRvIHRoZSBndWlsZCB3aG9zZSBJRCBoYXMgYmVlbiBwcm92aWRlZCBpbiB0aGUgcGFyYW1ldGVycy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2VkaXQtYXBwbGljYXRpb24tY29tbWFuZC1wZXJtaXNzaW9uc31cbiAgICovXG4gIGVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uczogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBjb21tYW5kSWQ6IEJpZ1N0cmluZyxcbiAgICBiZWFyZXJUb2tlbjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz5bXSxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPj5cbiAgLyoqXG4gICAqIEVkaXRzIGFuIGF1dG9tb2QgcnVsZS5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHJ1bGUgaW4uXG4gICAqIEBwYXJhbSBydWxlSWQgLSBUaGUgSUQgb2YgdGhlIHJ1bGUgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHJ1bGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfQXV0byBNb2RlcmF0aW9uIFJ1bGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvYXV0by1tb2RlcmF0aW9uI21vZGlmeS1hdXRvLW1vZGVyYXRpb24tcnVsZX1cbiAgICovXG4gIGVkaXRBdXRvbW9kUnVsZTogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBydWxlSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBQYXJ0aWFsPEVkaXRBdXRvTW9kZXJhdGlvblJ1bGVPcHRpb25zPixcbiAgICByZWFzb24/OiBzdHJpbmcsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPj5cbiAgLyoqXG4gICAqIE1vZGlmaWVzIHRoZSBib3QncyB1c2VybmFtZSwgYXZhdGFyIG9yIGJhbm5lci5cbiAgICogTk9URTogdXNlcm5hbWU6IGlmIGNoYW5nZWQgbWF5IGNhdXNlIHRoZSBib3QncyBkaXNjcmltaW5hdG9yIHRvIGJlIHJhbmRvbWl6ZWQuXG4gICAqL1xuICBlZGl0Qm90UHJvZmlsZTogKG9wdGlvbnM6IHsgdXNlcm5hbWU/OiBzdHJpbmc7IGJvdEF2YXRhclVSTD86IHN0cmluZyB8IG51bGw7IGJvdEJhbm5lclVSTD86IHN0cmluZyB8IG51bGwgfSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVXNlcj4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIGNoYW5uZWwncyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgY2hhbm5lbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIGVkaXRpbmcgYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3JvdXBEbTpcbiAgICogLSBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogSWYgZWRpdGluZyBhIHRocmVhZCBjaGFubmVsOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1RIUkVBRFNgIHBlcm1pc3Npb24gX191bmxlc3NfXyBpZiBzZXR0aW5nIHRoZSBgYXJjaGl2ZWRgIHByb3BlcnR5IHRvIGBmYWxzZWAgd2hlbiB0aGUgYGxvY2tlZGAgcHJvcGVydHkgaXMgYWxzbyBgZmFsc2VgLCBpbiB3aGljaCBjYXNlIG9ubHkgdGhlIGBTRU5EX01FU1NBR0VTYCBwZXJtaXNzaW9uIGlzIHJlcXVpcmVkLlxuICAgKlxuICAgKiAtIEZpcmVzIGEgX1RocmVhZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIElmIGVkaXRpbmcgYSBndWlsZCBjaGFubmVsOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiAtIElmIG1vZGlmeWluZyBwZXJtaXNzaW9uIG92ZXJyaWRlczpcbiAgICogICAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiAgIC0gT25seSBwZXJtaXNzaW9ucyB0aGUgYm90IHVzZXIgaGFzIGluIHRoZSBndWlsZCBvciBwYXJlbnQgY2hhbm5lbCBjYW4gYmUgYWxsb3dlZC9kZW5pZWQgX191bmxlc3NfXyB0aGUgYm90IHVzZXIgaGFzIGEgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbiBvdmVycmlkZSBpbiB0aGUgY2hhbm5lbC5cbiAgICpcbiAgICogLSBJZiBtb2RpZnlpbmcgYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGRDYXRlZ29yeTpcbiAgICogICAgIC0gRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQgZm9yIGVhY2ggY2hpbGQgY2hhbm5lbCBpbXBhY3RlZCBpbiB0aGlzIGNoYW5nZS5cbiAgICogLSBPdGhlcndpc2U6XG4gICAqICAgICAtIEZpcmVzIGEgX0NoYW5uZWwgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKi9cbiAgZWRpdENoYW5uZWw6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5Q2hhbm5lbCwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBwZXJtaXNzaW9uIG92ZXJyaWRlcyBmb3IgYSB1c2VyIG9yIHJvbGUgaW4gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGVkaXQgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGVzIG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwZXJtaXNzaW9uIG92ZXJyaWRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBPbmx5IHBlcm1pc3Npb25zIHRoZSBib3QgdXNlciBoYXMgaW4gdGhlIGd1aWxkIG9yIHBhcmVudCBjaGFubmVsIGNhbiBiZSBhbGxvd2VkL2RlbmllZCBfX3VubGVzc19fIHRoZSBib3QgdXNlciBoYXMgYSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uIG92ZXJyaWRlIGluIHRoZSBjaGFubmVsLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZWRpdC1jaGFubmVsLXBlcm1pc3Npb25zfVxuICAgKi9cbiAgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlc09wdGlvbnMsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRWRpdHMgdGhlIHBvc2l0aW9ucyBvZiBhIHNldCBvZiBjaGFubmVscyBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgaW4gd2hpY2ggdG8gZWRpdCB0aGUgcG9zaXRpb25zIG9mIHRoZSBjaGFubmVscy5cbiAgICogQHBhcmFtIGNoYW5uZWxQb3NpdGlvbnMgLSBBIHNldCBvZiBvYmplY3RzIGRlZmluaW5nIHRoZSB1cGRhdGVkIHBvc2l0aW9ucyBvZiB0aGUgY2hhbm5lbHMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudCBmb3IgZXZlcnkgY2hhbm5lbCBpbXBhY3RlZCBpbiB0aGlzIGNoYW5nZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC1jaGFubmVsLXBvc2l0aW9uc31cbiAgICovXG4gIGVkaXRDaGFubmVsUG9zaXRpb25zOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBjaGFubmVsUG9zaXRpb25zOiBNb2RpZnlHdWlsZENoYW5uZWxQb3NpdGlvbnNbXSkgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRWRpdHMgYW4gZW1vamkuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBpbiB3aGljaCB0byBlZGl0IHRoZSBlbW9qaS5cbiAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgZW1vamkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIHVwZGF0ZWQge0BsaW5rIERpc2NvcmRFbW9qaX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZvciBlbW9qaXMgY3JlYXRlZCBieSB0aGUgY3VycmVudCB1c2VyLCByZXF1aXJlcyBlaXRoZXIgdGhlIGBDUkVBVEVfR1VJTERfRVhQUkVTU0lPTlNgIG9yIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqIEZvciBvdGhlciBlbW9qaXMsIHJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIGBHdWlsZCBFbW9qaXMgVXBkYXRlYCBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjbW9kaWZ5LWd1aWxkLWVtb2ppfVxuICAgKi9cbiAgZWRpdEVtb2ppOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBpZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlHdWlsZEVtb2ppLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVtb2ppPj5cbiAgLyoqXG4gICAqIEVkaXRzIGFuIGFwcGxpY2F0aW9uIGVtb2ppLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhlIGVtb2ppIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBlbW9qaS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIHVwZGF0ZWQge0BsaW5rIERpc2NvcmRFbW9qaX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNtb2RpZnktYXBwbGljYXRpb24tZW1vaml9XG4gICAqL1xuICBlZGl0QXBwbGljYXRpb25FbW9qaTogKGlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUFwcGxpY2F0aW9uRW1vamkpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVtb2ppPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgZm9sbG93LXVwIG1lc3NhZ2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVbmxpa2UgYGVkaXRNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQgbmVlZGluZyB0byBzZWUgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgaXMgaW4uXG4gICAqXG4gICAqIERvZXMgbm90IHN1cHBvcnQgZXBoZW1lcmFsIGZvbGxvdy11cCBtZXNzYWdlcyBkdWUgdG8gdGhlc2UgYmVpbmcgc3RhdGVsZXNzLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZWRpdC1mb2xsb3d1cC1tZXNzYWdlfVxuICAgKi9cbiAgZWRpdEZvbGxvd3VwTWVzc2FnZTogKHRva2VuOiBzdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIGdsb2JhbCBhcHBsaWNhdGlvbiBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBjb21tYW5kLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2VkaXQtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgZ3VpbGQncyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBndWlsZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkR3VpbGR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgYXR0ZW1wdGluZyB0byBhZGQgb3IgcmVtb3ZlIHRoZSB7QGxpbmsgR3VpbGRGZWF0dXJlc30uQ29tbXVuaXR5IGZlYXR1cmU6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBBRE1JTklTVFJBVE9SYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGR9XG4gICAqL1xuICBlZGl0R3VpbGQ6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkPj5cbiAgLyoqXG4gICAqIEVkaXRzIGFuIGFwcGxpY2F0aW9uIGNvbW1hbmQgcmVnaXN0ZXJlZCBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCBpbi5cbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgY29tbWFuZC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZH0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNlZGl0LWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQ6IChcbiAgICBjb21tYW5kSWQ6IEJpZ1N0cmluZyxcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+XG4gIC8qKlxuICAgKiBFZGl0IHRoZSBnaXZlbiBzdGlja2VyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm4gQSB7QGxpbmsgRGlzY29yZFN0aWNrZXJ9XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZvciBzdGlja2VycyBjcmVhdGVkIGJ5IHRoZSBjdXJyZW50IHVzZXIsIHJlcXVpcmVzIGVpdGhlciB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRm9yIG90aGVyIHN0aWNrZXJzLCByZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRmlyZXMgYSBHdWlsZCBTdGlja2VycyBVcGRhdGUgR2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0aWNrZXIjbW9kaWZ5LWd1aWxkLXN0aWNrZXJ9XG4gICAqL1xuICBlZGl0R3VpbGRTdGlja2VyOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIHN0aWNrZXJJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM6IEF0TGVhc3RPbmU8RWRpdEd1aWxkU3RpY2tlck9wdGlvbnM+LFxuICAgIHJlYXNvbj86IHN0cmluZyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGlja2VyPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgdGVtcGxhdGUncyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgYSB0ZW1wbGF0ZSBvZi5cbiAgICogQHBhcmFtIHRlbXBsYXRlQ29kZSAtIFRoZSBjb2RlIG9mIHRoZSB0ZW1wbGF0ZSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRUZW1wbGF0ZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNtb2RpZnktZ3VpbGQtdGVtcGxhdGV9XG4gICAqL1xuICBlZGl0R3VpbGRUZW1wbGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdGVtcGxhdGVDb2RlOiBzdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkVGVtcGxhdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBlZGl0IHRoZSBtZXNzYWdlIGluLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEcyBvZiB0aGUgbWVzc2FnZSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiBlZGl0aW5nIGFub3RoZXIgdXNlcidzIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqIC0gT25seSB0aGUge0BsaW5rIEVkaXRNZXNzYWdlLmZsYWdzIHwgZmxhZ3N9IHByb3BlcnR5IG9mIHRoZSBvcHRpb25zIG9iamVjdCBwYXJhbWV0ZXIgY2FuIGJlIGVkaXRlZC5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2VkaXQtbWVzc2FnZX1cbiAgICovXG4gIGVkaXRNZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBFZGl0TWVzc2FnZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgaW5pdGlhbCBtZXNzYWdlIHJlc3BvbnNlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSByZXNwb25zZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVbmxpa2UgYGVkaXRNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQgbmVlZGluZyB0byBzZWUgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgaXMgaW4uXG4gICAqXG4gICAqIERvZXMgbm90IHN1cHBvcnQgZXBoZW1lcmFsIGZvbGxvdy11cCBtZXNzYWdlcyBkdWUgdG8gdGhlc2UgYmVpbmcgc3RhdGVsZXNzLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZWRpdC1vcmlnaW5hbC1pbnRlcmFjdGlvbi1yZXNwb25zZX1cbiAgICovXG4gIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2U6ICh0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgdm9pY2Ugc3RhdGUgb2YgdGhlIGJvdCB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgaW4gd2hpY2ggdG8gZWRpdCB0aGUgdm9pY2Ugc3RhdGUgb2YgdGhlIGJvdCB1c2VyLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgdm9pY2Ugc3RhdGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSB7QGxpbmsgRWRpdE93blZvaWNlU3RhdGUuY2hhbm5lbElkIHwgY2hhbm5lbElkfSBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9ucyBvYmplY3QgcGFyYW1ldGVyIG11c3QgcG9pbnQgdG8gYSBzdGFnZSBjaGFubmVsLCBhbmQgdGhlIGJvdCB1c2VyIG11c3QgYWxyZWFkeSBoYXZlIGpvaW5lZCBpdC5cbiAgICpcbiAgICogSWYgYXR0ZW1wdGluZyB0byB1bm11dGUgb25lc2VsZjpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1VVEVfTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgYXR0ZW1wdGluZyB0byByZXF1ZXN0IHRvIHNwZWFrOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgUkVRVUVTVF9UT19TUEVBS2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3ZvaWNlI21vZGlmeS1jdXJyZW50LXVzZXItdm9pY2Utc3RhdGV9XG4gICAqL1xuICBlZGl0T3duVm9pY2VTdGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogRWRpdE93blZvaWNlU3RhdGUpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEVkaXRzIGEgcm9sZSBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgcm9sZSBpbi5cbiAgICogQHBhcmFtIHJvbGVJZCAtIFRoZSBJRCBvZiB0aGUgcm9sZSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgcm9sZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkUm9sZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBSb2xlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC1yb2xlfVxuICAgKi9cbiAgZWRpdFJvbGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBFZGl0R3VpbGRSb2xlLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFJvbGU+PlxuICAvKipcbiAgICogRWRpdHMgdGhlIHBvc2l0aW9ucyBvZiBhIHNldCBvZiByb2xlcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHJvbGUgcG9zaXRpb25zIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgcm9sZSBwb3NpdGlvbnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkUm9sZX0gb2JqZWN0cyBhc3NvcnRlZCBieSByb2xlIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgUm9sZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQgZm9yIGV2ZXJ5IHJvbGUgaW1wYWN0ZWQgaW4gdGhpcyBjaGFuZ2UuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtcm9sZS1wb3NpdGlvbnN9XG4gICAqL1xuICBlZGl0Um9sZVBvc2l0aW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5Um9sZVBvc2l0aW9uc1tdLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFJvbGU+W10+XG4gIC8qKlxuICAgKiBFZGl0cyBhIHNjaGVkdWxlZCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHNjaGVkdWxlZCBldmVudCBpbi5cbiAgICogQHBhcmFtIGV2ZW50SWQgLSBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudCB0byBlZGl0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRTY2hlZHVsZWRFdmVudH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VWRU5UU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogVG8gc3RhcnQgb3IgZW5kIGFuIGV2ZW50LCBtb2RpZnkgdGhlIGV2ZW50J3MgYHN0YXR1c2AgcHJvcGVydHkuXG4gICAqXG4gICAqIFRoZSBgZW50aXR5X21ldGFkYXRhYCBwcm9wZXJ0eSBpcyBkaXNjYXJkZWQgZm9yIGV2ZW50cyB3aG9zZSBgZW50aXR5X3R5cGVgIGlzIG5vdCB7QGxpbmsgU2NoZWR1bGVkRXZlbnRFbnRpdHlUeXBlfS5FeHRlcm5hbC5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgU2NoZWR1bGVkIEV2ZW50IFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNtb2RpZnktZ3VpbGQtc2NoZWR1bGVkLWV2ZW50fVxuICAgKi9cbiAgZWRpdFNjaGVkdWxlZEV2ZW50OiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIGV2ZW50SWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBQYXJ0aWFsPEVkaXRTY2hlZHVsZWRFdmVudD4sXG4gICAgcmVhc29uPzogc3RyaW5nLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNjaGVkdWxlZEV2ZW50Pj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgc3RhZ2UgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHN0YWdlIGNoYW5uZWwgdGhlIHN0YWdlIGluc3RhbmNlIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICogQHBhcmFtIHRvcGljIC0gVG9waWMgb2YgdGhlIFN0YWdlIGluc3RhbmNlICgxLTEyMCBjaGFyYWN0ZXJzKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgdXBkYXRlZCB7QGxpbmsgRGlzY29yZFN0YWdlSW5zdGFuY2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgdXNlciB0byBiZSBhIG1vZGVyYXRvciBvZiB0aGUgc3RhZ2UgY2hhbm5lbC5cbiAgICpcbiAgICogRmlyZXMgYSBfU3RhZ2UgSW5zdGFuY2UgVXBkYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0YWdlLWluc3RhbmNlI21vZGlmeS1zdGFnZS1pbnN0YW5jZX1cbiAgICovXG4gIGVkaXRTdGFnZUluc3RhbmNlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHRvcGljOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgdm9pY2Ugc3RhdGUgb2YgYW5vdGhlciB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgaW4gd2hpY2ggdG8gZWRpdCB0aGUgdm9pY2Ugc3RhdGUgb2YgdGhlIGJvdCB1c2VyLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgdm9pY2Ugc3RhdGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSB7QGxpbmsgRWRpdE93blZvaWNlU3RhdGUuY2hhbm5lbElkIHwgY2hhbm5lbElkfSBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9ucyBvYmplY3QgcGFyYW1ldGVyIG11c3QgcG9pbnQgdG8gYSBzdGFnZSBjaGFubmVsLCBhbmQgdGhlIHVzZXIgbXVzdCBhbHJlYWR5IGhhdmUgam9pbmVkIGl0LlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgYE1VVEVfTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3ZvaWNlI21vZGlmeS11c2VyLXZvaWNlLXN0YXRlfVxuICAgKi9cbiAgZWRpdFVzZXJWb2ljZVN0YXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBFZGl0VXNlclZvaWNlU3RhdGUpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEVkaXQgdGhlIGN1cnJlbnQgdXNlciBhcHBsaWNhdGlvbiByb2xlIGNvbm5lY3Rpb24gZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGJlYXJlclRva2VuIC0gVGhlIGFjY2VzcyB0b2tlbiBvZiB0aGUgdXNlclxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBpZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZWRpdCB0aGUgcm9sZSBjb25uZWN0aW9uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gZWRpdFxuICAgKiBAcmV0dXJucyB7RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb259XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgcmVxdWlyZXMgdGhlIGByb2xlX2Nvbm5lY3Rpb25zLndyaXRlYCBzY29wZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3VzZXIjdXBkYXRlLXVzZXItYXBwbGljYXRpb24tcm9sZS1jb25uZWN0aW9ufVxuICAgKi9cbiAgZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uOiAoXG4gICAgYmVhcmVyVG9rZW46IHN0cmluZyxcbiAgICBhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogQ2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+LFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+PlxuICAvKipcbiAgICogRWRpdHMgYSB3ZWJob29rLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGVkaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfV2ViaG9va3MgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNlZGl0LXdlYmhvb2t9XG4gICAqL1xuICBlZGl0V2ViaG9vazogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlXZWJob29rLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PlxuICAvKipcbiAgICogRWRpdHMgYSB3ZWJob29rIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZWRpdCB0aGUgbWVzc2FnZSBvZi5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZWRpdCB0aGUgbWVzc2FnZS5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZWRpdC13ZWJob29rLW1lc3NhZ2V9XG4gICAqL1xuICBlZGl0V2ViaG9va01lc3NhZ2U6IChcbiAgICB3ZWJob29rSWQ6IEJpZ1N0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIG1lc3NhZ2VJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM6IEVkaXRXZWJob29rTWVzc2FnZU9wdGlvbnMsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIHdlYmhvb2sgdXNpbmcgdGhlIHdlYmhvb2sgdG9rZW4sIHRoZXJlYnkgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhdXRoZW50aWNhdGlvbiArIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGVkaXQuXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGVkaXQgdGhlIHdlYmhvb2suXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRXZWJob29rfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjbW9kaWZ5LXdlYmhvb2std2l0aC10b2tlbn1cbiAgICovXG4gIGVkaXRXZWJob29rV2l0aFRva2VuOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IE9taXQ8TW9kaWZ5V2ViaG9vaywgJ2NoYW5uZWxJZCc+KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgZ3VpbGQncyB3ZWxjb21lIHNjcmVlbi5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHdlbGNvbWUgc2NyZWVuIG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgd2VsY29tZSBzY3JlZW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZFdlbGNvbWVTY3JlZW59LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbW9kaWZ5LWd1aWxkLXdlbGNvbWUtc2NyZWVufVxuICAgKi9cbiAgZWRpdFdlbGNvbWVTY3JlZW46IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkV2VsY29tZVNjcmVlbiwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWxjb21lU2NyZWVuPj5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBzZXR0aW5ncyBvZiBhIGd1aWxkJ3Mgd2lkZ2V0LlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgc2V0dGluZ3Mgb2YgdGhlIHdpZGdldCBvZi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5nc30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtd2lkZ2V0fVxuICAgKi9cbiAgZWRpdFdpZGdldFNldHRpbmdzOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM6IENhbWVsaXplPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPixcbiAgICByZWFzb24/OiBzdHJpbmcsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4+XG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIHdlYmhvb2ssIGNhdXNpbmcgYSBtZXNzYWdlIHRvIGJlIHBvc3RlZCBpbiB0aGUgY2hhbm5lbCBjb25maWd1cmVkIGZvciB0aGUgd2ViaG9vay5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBleGVjdXRlLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBleGVjdXRlIHRoZSB3ZWJob29rLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSB3ZWJob29rLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LCBvciBgdW5kZWZpbmVkYCBpZiB0aGUge0BsaW5rIEV4ZWN1dGVXZWJob29rLndhaXQgfCB3YWl0fSBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9ucyBvYmplY3QgcGFyYW1ldGVyIGlzIHNldCB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB0aGUgd2ViaG9vayBjaGFubmVsIGlzIGEgZm9ydW0gY2hhbm5lbCwgeW91IG11c3QgcHJvdmlkZSBhIHZhbHVlIGZvciBlaXRoZXIgYHRocmVhZElkYCBvciBgdGhyZWFkTmFtZWAuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2V4ZWN1dGUtd2ViaG9va31cbiAgICovXG4gIGV4ZWN1dGVXZWJob29rOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IEV4ZWN1dGVXZWJob29rKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPiB8IHVuZGVmaW5lZD5cbiAgLyoqXG4gICAqIEZvbGxvd3MgYW4gYW5ub3VuY2VtZW50IGNoYW5uZWwsIGFsbG93aW5nIG1lc3NhZ2VzIHBvc3RlZCB3aXRoaW4gaXQgdG8gYmUgY3Jvc3MtcG9zdGVkIGludG8gdGhlIHRhcmdldCBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlQ2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBhbm5vdW5jZW1lbnQgY2hhbm5lbCB0byBmb2xsb3cuXG4gICAqIEBwYXJhbSB0YXJnZXRDaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRhcmdldCBjaGFubmVsIC0gdGhlIGNoYW5uZWwgdG8gY3Jvc3MtcG9zdCB0by5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEZvbGxvd2VkQ2hhbm5lbH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uIGluIHRoZSBfX3RhcmdldCBjaGFubmVsX18uXG4gICAqXG4gICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZm9sbG93LWFubm91bmNlbWVudC1jaGFubmVsfVxuICAgKi9cbiAgZm9sbG93QW5ub3VuY2VtZW50OiAoc291cmNlQ2hhbm5lbElkOiBCaWdTdHJpbmcsIHRhcmdldENoYW5uZWxJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEZvbGxvd2VkQ2hhbm5lbD4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGFsbCBhY3RpdmUgdGhyZWFkcyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgdGhyZWFkcyBvZi5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkc30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJldHVybnMgYm90aCBwdWJsaWMgYW5kIHByaXZhdGUgdGhyZWFkcy5cbiAgICpcbiAgICogVGhyZWFkcyBhcmUgb3JkZXJlZCBieSB0aGUgYGlkYCBwcm9wZXJ0eSBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbGlzdC1hY3RpdmUtZ3VpbGQtdGhyZWFkc31cbiAgICovXG4gIGdldEFjdGl2ZVRocmVhZHM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZExpc3RBY3RpdmVUaHJlYWRzPj5cbiAgLyoqIEdldCB0aGUgYXBwbGljYXRpb25zIGluZm8gKi9cbiAgZ2V0QXBwbGljYXRpb25JbmZvOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbj4+XG4gIC8qKlxuICAgKiBFZGl0IHByb3BlcnRpZXMgb2YgdGhlIGFwcCBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3RpbmcgYm90IHVzZXIuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIE9ubHkgcHJvcGVydGllcyB0aGF0IGFyZSBwYXNzZWQgd2lsbCBiZSB1cGRhdGVkLlxuICAgKi9cbiAgZWRpdEFwcGxpY2F0aW9uSW5mbzogKGJvZHk6IEVkaXRBcHBsaWNhdGlvbikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb24+PlxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGF1dGhlbnRpY2F0aW9uIGluZm8gZm9yIHRoZSBhdXRoZW50aWNhdGVkIHVzZXJcbiAgICpcbiAgICogQHBhcmFtIGJlYXJlclRva2VuIC0gQW55IE9BdXRoMiBkZXJpdmVkIGFjY2VzcyB0b2tlblxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9ufVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgdXNlciBvYmplY3QgaXMgbm90IGRlZmluZWQgaWYgdGhlIHNjb3BlcyBkbyBub3QgaW5jbHVkZSBgaWRlbnRpZnlgLlxuICAgKiBJbiB0aGUgdXNlciBvYmplY3QsIGlmIGRlZmluZWQsIHRoZSBlbWFpbCBpcyBub3QgaW5jbHVkZWQgaWYgdGhlIHNjb3BlcyBkbyBub3QgaW5jbHVkZSBgZW1haWxgXG4gICAqL1xuICBnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvOiAoYmVhcmVyVG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24+PlxuICAvKipcbiAgICogRXhjaGFuZ2UgdGhlIGluZm9ybWF0aW9uIHRvIGdldCBhIE9BdXRoMiBhY2Nlc3NUb2tlbiB0b2tlblxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50SWQgLSBBcHBsaWNhdGlvbidzIGNsaWVudCBpZFxuICAgKiBAcGFyYW0gY2xpZW50U2VjcmV0IC0gYXBwbGljYXRpb24ncyBjbGllbnQgc2VjcmV0XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gbWFrZSB0aGUgZXhjaGFuZ2Ugd2l0aCBkaXNjb3JkXG4gICAqL1xuICBleGNoYW5nZVRva2VuOiAoY2xpZW50SWQ6IEJpZ1N0cmluZywgY2xpZW50U2VjcmV0OiBzdHJpbmcsIG9wdGlvbnM6IENhbWVsaXplPERpc2NvcmRUb2tlbkV4Y2hhbmdlPikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4+XG4gIC8qKlxuICAgKiBSZXZva2UgYW4gYWNjZXNzX3Rva2VuXG4gICAqXG4gICAqIEBwYXJhbSBjbGllbnRJZCAtIEFwcGxpY2F0aW9uJ3MgY2xpZW50IGlkXG4gICAqIEBwYXJhbSBjbGllbnRTZWNyZXQgLSBhcHBsaWNhdGlvbidzIGNsaWVudCBzZWNyZXRcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byByZXZva2UgdGhlIGFjY2Vzc190b2tlblxuICAgKi9cbiAgcmV2b2tlVG9rZW46IChjbGllbnRJZDogQmlnU3RyaW5nLCBjbGllbnRTZWNyZXQ6IHN0cmluZywgb3B0aW9uczogQ2FtZWxpemU8RGlzY29yZFRva2VuUmV2b2NhdGlvbj4pID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHBlcm1pc3Npb25zIG9mIGEgZ3VpbGQgYXBwbGljYXRpb24gY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kIGlzIHJlZ2lzdGVyZWQgaW4uXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZ2V0IHRoZSBwZXJtaXNzaW9ucyBvZi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgT0F1dGgyIHJlbGF0ZWQgb3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIGVuZHBvaW50XG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZW4gc3BlY2lmeWluZyB0aGUgb3B0aW9ucyBvYmplY3QgdGhlIGFjY2VzcyB0b2tlbiBwYXNzZWQtaW4gcmVxdWlyZXMgdGhlIE9BdXRoMiBzY29wZSBgYXBwbGljYXRpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zLnVwZGF0ZWBcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1hcHBsaWNhdGlvbi1jb21tYW5kLXBlcm1pc3Npb25zfVxuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbjogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBjb21tYW5kSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zPzogR2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbk9wdGlvbnMsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwZXJtaXNzaW9ucyBvZiBhbGwgYXBwbGljYXRpb24gY29tbWFuZHMgcmVnaXN0ZXJlZCBpbiBhIGd1aWxkIGJ5IHRoZSBJRCBvZiB0aGUgZ3VpbGQgYW5kIG9wdGlvbmFsbHkgYW4gZXh0ZXJuYWwgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHBlcm1pc3Npb25zIG9iamVjdHMgb2YuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIE9BdXRoMiByZWxhdGVkIG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZW4gc3BlY2lmeWluZyB0aGUgb3B0aW9ucyBvYmplY3QgdGhlIGFjY2VzcyB0b2tlbiBwYXNzZWQtaW4gcmVxdWlyZXMgdGhlIE9BdXRoMiBzY29wZSBgYXBwbGljYXRpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zLnVwZGF0ZWBcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kLXBlcm1pc3Npb25zfVxuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM6IChcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9ucz86IEdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25PcHRpb25zLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+W10+XG4gIC8qKlxuICAgKiBHZXRzIGEgZ3VpbGQncyBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGF1ZGl0IGxvZyBvZi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQXVkaXRMb2d9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFZJRVdfQVVESVRfTE9HYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvYXVkaXQtbG9nI2dldC1ndWlsZC1hdWRpdC1sb2d9XG4gICAqL1xuICBnZXRBdWRpdExvZzogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldEd1aWxkQXVkaXRMb2cpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEF1ZGl0TG9nPj5cbiAgLyoqXG4gICAqIEdldHMgYW4gYXV0b21vZCBydWxlIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgcnVsZSBvZi5cbiAgICogQHBhcmFtIHJ1bGVJZCAtIFRoZSBJRCBvZiB0aGUgcnVsZSB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jZ2V0LWF1dG8tbW9kZXJhdGlvbi1ydWxlfVxuICAgKi9cbiAgZ2V0QXV0b21vZFJ1bGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJ1bGVJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBhdXRvbW9kIHJ1bGVzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBydWxlcyBmcm9tLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGV9IG9iamVjdHMgYXNzb3J0ZWQgYnkgcnVsZSBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jbGlzdC1hdXRvLW1vZGVyYXRpb24tcnVsZXMtZm9yLWd1aWxkfVxuICAgKi9cbiAgZ2V0QXV0b21vZFJ1bGVzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+W10+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB2b2ljZSByZWdpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRWb2ljZVJlZ2lvbn0gb2JqZWN0cyBhc3NvcnRlZCBieSB2b2ljZSByZWdpb24gSUQuXG4gICAqL1xuICBnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnM6ICgpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFZvaWNlUmVnaW9uPltdPlxuICAvKipcbiAgICogR2V0cyBhIGJhbiBieSB1c2VyIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBiYW4gZnJvbS5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBnZXQgdGhlIGJhbiBmb3IuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQmFufS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBCQU5fTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1iYW59XG4gICAqL1xuICBnZXRCYW46IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRCYW4+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBiYW5zIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIGJhbnMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIGxpc3Qgb2YgYmFucy5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkQmFufSBvYmplY3RzIGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQkFOX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFVzZXJzIGFyZSBvcmRlcmVkIGJ5IHRoZWlyIElEcyBpbiBfYXNjZW5kaW5nXyBvcmRlci5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1iYW5zfVxuICAgKi9cbiAgZ2V0QmFuczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldEJhbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEJhbj5bXT5cbiAgLyoqXG4gICAqIEdldHMgYSBjaGFubmVsIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIHRoZSBjaGFubmVsIGlzIGEgdGhyZWFkLCBhIHtAbGluayBEaXNjb3JkVGhyZWFkTWVtYmVyfSBvYmplY3QgaXMgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZ2V0LWNoYW5uZWx9XG4gICAqL1xuICBnZXRDaGFubmVsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBpbnZpdGVzIGZvciBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0IHRoZSBpbnZpdGVzIG9mLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRJbnZpdGVNZXRhZGF0YX0gb2JqZWN0cyBhc3NvcnRlZCBieSBpbnZpdGUgY29kZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfQ0hBTk5FTFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIE9ubHkgdXNhYmxlIGZvciBndWlsZCBjaGFubmVscy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZ2V0LWNoYW5uZWwtaW52aXRlc31cbiAgICovXG4gIGdldENoYW5uZWxJbnZpdGVzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludml0ZU1ldGFkYXRhPltdPlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBjaGFubmVscyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgY2hhbm5lbHMgb2YuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY2hhbm5lbCBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRXhjbHVkZXMgdGhyZWFkcy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1jaGFubmVsc31cbiAgICovXG4gIGdldENoYW5uZWxzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPltdPlxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2Ygd2ViaG9va3MgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB3aGljaCB0byBnZXQgdGhlIHdlYmhvb2tzIG9mLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRXZWJob29rfSBvYmplY3RzIGFzc29ydGVkIGJ5IHdlYmhvb2sgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNnZXQtY2hhbm5lbC13ZWJob29rc31cbiAgICovXG4gIGdldENoYW5uZWxXZWJob29rczogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPltdPlxuICAvKipcbiAgICogR2V0cyBvciBjcmVhdGVzIGEgRE0gY2hhbm5lbCB3aXRoIGEgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBjcmVhdGUgdGhlIERNIGNoYW5uZWwgd2l0aC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRDaGFubmVsfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3VzZXIjY3JlYXRlLWRtfVxuICAgKi9cbiAgZ2V0RG1DaGFubmVsOiAodXNlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGdyb3VwIERNIGNoYW5uZWwgd2l0aCBtdWx0aXBsZSB1c2Vycy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgY3JlYXRlIGEgbmV3IGdyb3VwIGRtXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBhY2Nlc3MgdG9rZW5zIHJlcXVpcmUgdG8gaGF2ZSB0aGUgYGdkbS5qb2luYCBzY29wZVxuICAgKlxuICAgKiBUaGlzIGVuZHBvaW50IGlzIGxpbWl0ZWQgdG8gMTAgYWN0aXZlIGdyb3VwIERNcy5cbiAgICpcbiAgICogRmlyZXMgYSBfQ2hhbm5lbCBjcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy91c2VyI2NyZWF0ZS1ncm91cC1kbX1cbiAgICovXG4gIGdldEdyb3VwRG1DaGFubmVsOiAob3B0aW9uczogQ3JlYXRlR3JvdXBEbU9wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAvKipcbiAgICogR2V0cyBhbiBlbW9qaSBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBmcm9tIHdoaWNoIHRvIGdldCB0aGUgZW1vamkuXG4gICAqIEBwYXJhbSBlbW9qaUlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkRW1vaml9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJbmNsdWRlcyB0aGUgYHVzZXJgIGZpZWxkIGlmIHRoZSBib3QgaGFzIHRoZSBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLFxuICAgKiBvciBpZiB0aGUgYm90IGNyZWF0ZWQgdGhlIGVtb2ppIGFuZCBoYXMgdGhlIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjZ2V0LWd1aWxkLWVtb2ppfVxuICAgKi9cbiAgZ2V0RW1vamk6IChndWlsZElkOiBCaWdTdHJpbmcsIGVtb2ppSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamk+PlxuICAvKipcbiAgICogR2V0cyBhbiBhcHBsaWNhdGlvbiBlbW9qaSBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBlbW9qaUlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkRW1vaml9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBBbHdheXMgaW5jbHVkZXMgdGhlIGB1c2VyYCBvYmplY3QgZm9yIHRoZSB0ZWFtIG1lbWJlciB0aGF0IHVwbG9hZGVkIHRoZSBlbW9qaSBmcm9tIHRoZSBhcHAncyBzZXR0aW5ncywgb3IgZm9yIHRoZSBib3QgdXNlciBpZiB1cGxvYWRlZCB1c2luZyB0aGUgQVBJLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjZ2V0LWFwcGxpY2F0aW9uLWVtb2ppfVxuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25FbW9qaTogKGVtb2ppSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamk+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBlbW9qaXMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB3aGljaCB0byBnZXQgdGhlIGVtb2ppcyBvZi5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkRW1vaml9IG9iamVjdHMgYXNzb3J0ZWQgYnkgZW1vamkgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEluY2x1ZGVzIGB1c2VyYCBmaWVsZHMgaWYgdGhlIGJvdCBoYXMgdGhlIGBDUkVBVEVfR1VJTERfRVhQUkVTU0lPTlNgIG9yIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNsaXN0LWd1aWxkLWVtb2ppc31cbiAgICovXG4gIGdldEVtb2ppczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamk+W10+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGVtb2ppcyBmb3IgYW4gYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBhcnJheSBvZiB7QGxpbmsgRGlzY29yZEVtb2ppfSBvYmplY3RzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBBbHdheXMgaW5jbHVkZXMgdGhlIGB1c2VyYCBvYmplY3QgZm9yIHRoZSB0ZWFtIG1lbWJlciB0aGF0IHVwbG9hZGVkIHRoZSBlbW9qaSBmcm9tIHRoZSBhcHAncyBzZXR0aW5ncywgb3IgZm9yIHRoZSBib3QgdXNlciBpZiB1cGxvYWRlZCB1c2luZyB0aGUgQVBJLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjbGlzdC1hcHBsaWNhdGlvbi1lbW9qaXN9XG4gICAqL1xuICBnZXRBcHBsaWNhdGlvbkVtb2ppczogKCkgPT4gUHJvbWlzZTx7IGl0ZW1zOiBDYW1lbGl6ZTxEaXNjb3JkRW1vamk+W10gfT5cbiAgLyoqXG4gICAqIEdldHMgYSBmb2xsb3ctdXAgbWVzc2FnZSB0byBhbiBpbnRlcmFjdGlvbiBieSB0aGUgSUQgb2YgdGhlIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZ2V0TWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAqXG4gICAqIERvZXMgbm90IHN1cHBvcnQgZXBoZW1lcmFsIGZvbGxvdy11cCBtZXNzYWdlcyBkdWUgdG8gdGhlc2UgYmVpbmcgc3RhdGVsZXNzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2dldC1mb2xsb3d1cC1tZXNzYWdlfVxuICAgKi9cbiAgZ2V0Rm9sbG93dXBNZXNzYWdlOiAodG9rZW46IHN0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKiogR2V0IHRoZSBib3RzIEdhdGV3YXkgbWV0YWRhdGEgdGhhdCBjYW4gaGVscCBkdXJpbmcgdGhlIG9wZXJhdGlvbiBvZiBsYXJnZSBvciBzaGFyZGVkIGJvdHMuICovXG4gIGdldEdhdGV3YXlCb3Q6ICgpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEdldEdhdGV3YXlCb3Q+PlxuICAvKipcbiAgICogR2V0cyBhIGdsb2JhbCBhcHBsaWNhdGlvbiBjb21tYW5kIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZDogKGNvbW1hbmRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiB5b3VyIGJvdCdzIGdsb2JhbCBhcHBsaWNhdGlvbiBjb21tYW5kcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIGdsb2JhbCBhcHBsaWNhdGlvbiBjb21tYW5kc1xuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmR9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY29tbWFuZCBJRC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2dldC1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZHN9XG4gICAqL1xuICBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzOiAob3B0aW9ucz86IEdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHNPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+W10+XG4gIC8qKlxuICAgKiBHZXRzIGEgZ3VpbGQgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIGd1aWxkLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEd1aWxkfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZH1cbiAgICovXG4gIGdldEd1aWxkOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogeyBjb3VudHM/OiBib29sZWFuIH0pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkPj5cbiAgLyoqXG4gICAqIEdldCB0aGUgdXNlciBndWlsZHMuXG4gICAqXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gb2YgdGhlIHVzZXIsIGlmIHVuc3BlY2lmaWVkIHRoZSBib3QgdG9rZW4gaXMgdXNlZCBpbnN0ZWFkXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgZ3VpbGQuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHBhcnRpYWwge0BsaW5rIERpc2NvcmRHdWlsZH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIHVzZWQgd2l0aCBhbiBhY2Nlc3MgdG9rZW4sIHRoZSB0b2tlbiBuZWVkcyB0byBoYXZlIHRoZSBgZ3VpbGRzYCBzY29wZVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvdXNlciNnZXQtY3VycmVudC11c2VyLWd1aWxkc31cbiAgICovXG4gIGdldEd1aWxkczogKGJlYXJlclRva2VuPzogc3RyaW5nLCBvcHRpb25zPzogR2V0VXNlckd1aWxkcykgPT4gUHJvbWlzZTxQYXJ0aWFsPENhbWVsaXplPERpc2NvcmRHdWlsZD4+W10+XG4gIC8qKlxuICAgKiBHZXRzIGEgZ3VpbGQgYXBwbGljYXRpb24gY29tbWFuZCBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgY29tbWFuZCBpcyByZWdpc3RlcmVkIGluLlxuICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZDogKGNvbW1hbmRJZDogQmlnU3RyaW5nLCBndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGFwcGxpY2F0aW9uIGNvbW1hbmRzIHJlZ2lzdGVyZWQgYnkgeW91ciBib3QgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kcyBhcmUgcmVnaXN0ZXJlZCBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIGd1aWxkIGFwcGxpY2F0aW9uIGNvbW1hbmRzXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjb21tYW5kIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kc3N9XG4gICAqL1xuICBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHNPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+W10+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwcmV2aWV3IG9mIGEgZ3VpbGQgYnkgYSBndWlsZCdzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBwcmV2aWV3IG9mLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEd1aWxkUHJldmlld30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIHRoZSBib3QgdXNlciBpcyBub3QgaW4gdGhlIGd1aWxkLCB0aGUgZ3VpbGQgbXVzdCBiZSBkaXNjb3ZlcmFibGUuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtcHJldmlld31cbiAgICovXG4gIGdldEd1aWxkUHJldmlldzogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGRQcmV2aWV3Pj5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdGlja2VyIG9iamVjdCBmb3IgdGhlIGdpdmVuIGd1aWxkIGFuZCBzdGlja2VyIElEcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXRcbiAgICogQHBhcmFtIHN0aWNrZXJJZCBUaGUgSUQgb2YgdGhlIHN0aWNrZXIgdG8gZ2V0XG4gICAqIEByZXR1cm4gQSB7QGxpbmsgRGlzY29yZFN0aWNrZXJ9XG4gICAqXG4gICAqIEByZW1hcmtzIEluY2x1ZGVzIHRoZSB1c2VyIGZpZWxkIGlmIHRoZSBib3QgaGFzIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBvciBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RpY2tlciNnZXQtZ3VpbGQtc3RpY2tlcn1cbiAgICovXG4gIGdldEd1aWxkU3RpY2tlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgc3RpY2tlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0aWNrZXI+PlxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBzdGlja2VyIG9iamVjdHMgZm9yIHRoZSBnaXZlbiBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXRcbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkU3RpY2tlcn0gb2JqZWN0cyBhc3NvcnRlZCBieSBzdGlja2VyIElELlxuICAgKlxuICAgKiBAcmVtYXJrcyBJbmNsdWRlcyB1c2VyIGZpZWxkcyBpZiB0aGUgYm90IGhhcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0aWNrZXIjbGlzdC1ndWlsZC1zdGlja2Vyc31cbiAgICovXG4gIGdldEd1aWxkU3RpY2tlcnM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0aWNrZXI+W10+XG4gIC8qKlxuICAgKiBHZXRzIGEgdGVtcGxhdGUgYnkgaXRzIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZUNvZGUgLSBUaGUgY29kZSBvZiB0aGUgdGVtcGxhdGUgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFRlbXBsYXRlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNnZXQtZ3VpbGQtdGVtcGxhdGV9XG4gICAqL1xuICBnZXRHdWlsZFRlbXBsYXRlOiAodGVtcGxhdGVDb2RlOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgdGVtcGxhdGVzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIHRlbXBsYXRlcyBmb3IuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFRlbXBsYXRlfSBvYmplY3RzIGFzc29ydGVkIGJ5IHRlbXBsYXRlIGNvZGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjZ2V0LWd1aWxkLXRlbXBsYXRlc31cbiAgICovXG4gIGdldEd1aWxkVGVtcGxhdGVzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT5bXT5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2Ygd2ViaG9va3MgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2Ygd2ViaG9va3MgZm9yLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRXZWJob29rfSBvYmplY3RzIGFzc29ydGVkIGJ5IHdlYmhvb2sgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNnZXQtZ3VpbGQtd2ViaG9va3N9XG4gICAqL1xuICBnZXRHdWlsZFdlYmhvb2tzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPltdPlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBpbnRlZ3JhdGlvbnMgYXR0YWNoZWQgdG8gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiBpbnRlZ3JhdGlvbnMgZnJvbS5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkSW50ZWdyYXRpb259IG9iamVjdHMgYXNzb3J0ZWQgYnkgaW50ZWdyYXRpb24gSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLWludGVncmF0aW9uc31cbiAgICovXG4gIGdldEludGVncmF0aW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkSW50ZWdyYXRpb24+W10+XG4gIC8qKlxuICAgKiBHZXRzIGFuIGludml0ZSB0byBhIGNoYW5uZWwgYnkgaXRzIGludml0ZSBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gaW52aXRlQ29kZSAtIFRoZSBpbnZpdGUgY29kZSBvZiB0aGUgaW52aXRlIHRvIGdldC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBpbnZpdGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkSW52aXRlTWV0YWRhdGF9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvaW52aXRlI2dldC1pbnZpdGV9XG4gICAqL1xuICBnZXRJbnZpdGU6IChpbnZpdGVDb2RlOiBzdHJpbmcsIG9wdGlvbnM/OiBHZXRJbnZpdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludml0ZU1ldGFkYXRhPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgaW52aXRlcyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgaW52aXRlcyBmcm9tLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRJbnZpdGVNZXRhZGF0YX0gb2JqZWN0cyBhc3NvcnRlZCBieSBpbnZpdGUgY29kZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9pbnZpdGUjZ2V0LWludml0ZXN9XG4gICAqL1xuICBnZXRJbnZpdGVzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRJbnZpdGVNZXRhZGF0YT5bXT5cbiAgLyoqXG4gICAqIEdldHMgYSBtZXNzYWdlIGZyb20gYSBjaGFubmVsIGJ5IHRoZSBJRCBvZiB0aGUgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBmcm9tIHdoaWNoIHRvIGdldCB0aGUgbWVzc2FnZS5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoYXQgdGhlIGJvdCB1c2VyIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0aGUgbWVzc2FnZSB3YXMgcG9zdGVkLlxuICAgKlxuICAgKiBJZiBnZXR0aW5nIGEgbWVzc2FnZSBmcm9tIGEgZ3VpbGQgY2hhbm5lbDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtY2hhbm5lbC1tZXNzYWdlfVxuICAgKi9cbiAgZ2V0TWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBHZXRzIG11bHRpcGxlIG1lc3NhZ2VzIGZyb20gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIGZyb20gd2hpY2ggdG8gZ2V0IHRoZSBtZXNzYWdlcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBtZXNzYWdlcy5cbiAgICogQHJldHVybnMgUmV0dXJucyBhbiBhcnJheSBvZiB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9IG9iamVjdHMgZnJvbSBuZXdlc3QgdG8gb2xkZXN0IG9uIHN1Y2Nlc3MuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoYXQgdGhlIGJvdCB1c2VyIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0aGUgbWVzc2FnZXMgd2VyZSBwb3N0ZWQuXG4gICAqXG4gICAqIElmIGdldHRpbmcgYSBtZXNzYWdlcyBmcm9tIGEgZ3VpbGQgY2hhbm5lbDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtY2hhbm5lbC1tZXNzYWdlc31cbiAgICovXG4gIGdldE1lc3NhZ2VzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRNZXNzYWdlc09wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+W10+XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RpY2tlciBwYWNrIGZvciB0aGUgZ2l2ZW4gSUQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc2NvcmRTdGlja2VyUGFja30gb2JqZWN0LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RpY2tlciNnZXQtc3RpY2tlci1wYWNrfVxuICAgKi9cbiAgZ2V0U3RpY2tlclBhY2s6IChzdGlja2VyUGFja0lkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0aWNrZXJQYWNrPj5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpc3Qgb2Ygc3RpY2tlciBwYWNrcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFN0aWNrZXJQYWNrfSBvYmplY3RzIGFzc29ydGVkIGJ5IHN0aWNrZXIgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9zdGlja2VyI2xpc3Qtc3RpY2tlci1wYWNrc31cbiAgICovXG4gIGdldFN0aWNrZXJQYWNrczogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RpY2tlclBhY2s+W10+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpbml0aWFsIG1lc3NhZ2UgcmVzcG9uc2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVW5saWtlIGBnZXRNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQ6XG4gICAqIC0gTmVlZGluZyB0byBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgdGhhdCB0aGUgbWVzc2FnZSBpcyBpbi4gKGBSRUFEX01FU1NBR0VTYCBwZXJtaXNzaW9uLilcbiAgICogLSBSZXF1aXJpbmcgdGhlIGBNRVNTQUdFX0NPTlRFTlRgIGludGVudC5cbiAgICpcbiAgICogRG9lcyBub3Qgc3VwcG9ydCBlcGhlbWVyYWwgZm9sbG93LXVwIG1lc3NhZ2VzIGR1ZSB0byB0aGVzZSBiZWluZyBzdGF0ZWxlc3MuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZ2V0LW9yaWdpbmFsLWludGVyYWN0aW9uLXJlc3BvbnNlfVxuICAgKi9cbiAgZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlOiAodG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgcGlucyBpbiBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0IHRoZSBwaW5zIGZvci5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBwaW5zLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBEaXNjb3JkR2V0Q2hhbm5lbFBpbnN9IG9iamVjdHNcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBWSUVXX0NIQU5ORUxgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIElmIHRoZSB1c2VyIGlzIG1pc3NpbmcgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbiBpbiB0aGUgY2hhbm5lbCwgdGhlbiBubyBwaW5zIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9tZXNzYWdlI2dldC1jaGFubmVsLXBpbnN9XG4gICAqL1xuICBnZXRDaGFubmVsUGluczogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0Q2hhbm5lbFBpbnNPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHZXRDaGFubmVsUGlucz4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwaW5uZWQgbWVzc2FnZXMgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIHBpbm5lZCBtZXNzYWdlcyBmb3IuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9IG9iamVjdHMgYXNzb3J0ZWQgYnkgbWVzc2FnZSBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhhdCB0aGUgYm90IHVzZXIgYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRoZSBtZXNzYWdlcyB3ZXJlIHBvc3RlZC5cbiAgICpcbiAgICogSWYgZ2V0dGluZyBhIG1lc3NhZ2UgZnJvbSBhIGd1aWxkIGNoYW5uZWw6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL21lc3NhZ2UjZ2V0LXBpbm5lZC1tZXNzYWdlcy1kZXByZWNhdGVkfVxuICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIGdldENoYW5uZWxQaW5zfSBpbnN0ZWFkLlxuICAgKi9cbiAgZ2V0UGlubmVkTWVzc2FnZXM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT5bXT5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgcHJpdmF0ZSBhcmNoaXZlZCB0aHJlYWRzIGZvciBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0IHRoZSBhcmNoaXZlZCB0aHJlYWRzIGZvci5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRocmVhZHMuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkc30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1RIUkVBRFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFJldHVybnMgdGhyZWFkcyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXN9Lkd1aWxkUHJpdmF0ZVRocmVhZC5cbiAgICpcbiAgICogVGhyZWFkcyBhcmUgb3JkZXJlZCBieSB0aGUgYGFyY2hpdmVfdGltZXN0YW1wYCBwcm9wZXJ0eSBpbmNsdWRlZCBpbiB0aGUgbWV0YWRhdGEgb2YgdGhlIG9iamVjdCBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNsaXN0LXByaXZhdGUtYXJjaGl2ZWQtdGhyZWFkc31cbiAgICovXG4gIGdldFByaXZhdGVBcmNoaXZlZFRocmVhZHM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IExpc3RBcmNoaXZlZFRocmVhZHMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBwcml2YXRlIGFyY2hpdmVkIHRocmVhZHMgdGhlIGJvdCBpcyBhIG1lbWJlciBvZiBmb3IgYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldCB0aGUgYXJjaGl2ZWQgdGhyZWFkcyBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aHJlYWRzLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHN9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBSZXR1cm5zIHRocmVhZHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZFByaXZhdGVUaHJlYWQuXG4gICAqXG4gICAqIFRocmVhZHMgYXJlIG9yZGVyZWQgYnkgdGhlIGBpZGAgcHJvcGVydHkgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjbGlzdC1qb2luZWQtcHJpdmF0ZS1hcmNoaXZlZC10aHJlYWRzfVxuICAgKi9cbiAgZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkczogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogTGlzdEFyY2hpdmVkVGhyZWFkcykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgbWVtYmVycyB0aGF0IHdvdWxkIGJlIGtpY2tlZCBmcm9tIGEgZ3VpbGQgZHVyaW5nIHBydW5pbmcuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHBydW5lIGNvdW50IG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHBydW5lIGNvdW50LlxuICAgKiBAcmV0dXJucyBBIG51bWJlciBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgbWVtYmVycyB0aGF0IHdvdWxkIGJlIGtpY2tlZC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIGFuZCBgS0lDS19NRU1CRVJTYCBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1wcnVuZS1jb3VudH1cbiAgICovXG4gIGdldFBydW5lQ291bnQ6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRHdWlsZFBydW5lQ291bnRRdWVyeSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkUHJ1bmVkQ291bnQ+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBwdWJsaWMgYXJjaGl2ZWQgdGhyZWFkcyBmb3IgYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldCB0aGUgYXJjaGl2ZWQgdGhyZWFkcyBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aHJlYWRzLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHN9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBjYWxsZWQgb24gYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGRUZXh0LCByZXR1cm5zIHRocmVhZHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZFB1YmxpY1RocmVhZC5cbiAgICogSWYgY2FsbGVkIG9uIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXN9Lkd1aWxkTmV3cywgcmV0dXJucyB0aHJlYWRzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGROZXdzVGhyZWFkLlxuICAgKlxuICAgKiBUaHJlYWRzIGFyZSBvcmRlcmVkIGJ5IHRoZSBgYXJjaGl2ZV90aW1lc3RhbXBgIHByb3BlcnR5IGluY2x1ZGVkIGluIHRoZSBtZXRhZGF0YSBvZiB0aGUgb2JqZWN0IGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2xpc3QtcHVibGljLWFyY2hpdmVkLXRocmVhZHN9XG4gICAqL1xuICBnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IExpc3RBcmNoaXZlZFRocmVhZHMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiByb2xlcyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiByb2xlcyBmb3IuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFJvbGV9IG9iamVjdHMgYXNzb3J0ZWQgYnkgcm9sZSBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIFRoaXMgZW5kcG9pbnQgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5IGR1ZSB0byB7QGxpbmsgRGlzY29yZFJvbGV9IG9iamVjdHMgYWxyZWFkeSBiZWluZyBpbmNsdWRlZCBpbiBndWlsZCBwYXlsb2Fkcy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1yb2xlc31cbiAgICovXG4gIGdldFJvbGVzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRSb2xlPltdPlxuICAvKipcbiAgICogR2V0cyBhIHJvbGUgYnkgaWQgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgcm9sZSBmb3IuXG4gICAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc2NvcmRSb2xlfSBvYmplY3QuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtcm9sZX1cbiAgICovXG4gIGdldFJvbGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRSb2xlPj5cbiAgLyoqXG4gICAqIEdldHMgYSBzY2hlZHVsZWQgZXZlbnQgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBzY2hlZHVsZWQgZXZlbnQgZnJvbS5cbiAgICogQHBhcmFtIGV2ZW50SWQgLSBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudCB0byBnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFNjaGVkdWxlZEV2ZW50fS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNnZXQtZ3VpbGQtc2NoZWR1bGVkLWV2ZW50fVxuICAgKi9cbiAgZ2V0U2NoZWR1bGVkRXZlbnQ6IChndWlsZElkOiBCaWdTdHJpbmcsIGV2ZW50SWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IHsgd2l0aFVzZXJDb3VudD86IGJvb2xlYW4gfSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBzY2hlZHVsZWQgZXZlbnRzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBzY2hlZHVsZWQgZXZlbnRzIGZyb20uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50cy5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkU2NoZWR1bGVkRXZlbnR9IG9iamVjdHMgYXNzb3J0ZWQgYnkgZXZlbnQgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjbGlzdC1zY2hlZHVsZWQtZXZlbnRzLWZvci1ndWlsZH1cbiAgICovXG4gIGdldFNjaGVkdWxlZEV2ZW50czogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldFNjaGVkdWxlZEV2ZW50cykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+W10+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHN1YnNjcmliZXJzIHRvIGEgc2NoZWR1bGVkIGV2ZW50IGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgc3Vic2NyaWJlcnMgdG8gdGhlIHNjaGVkdWxlZCBldmVudCBmcm9tLlxuICAgKiBAcGFyYW0gZXZlbnRJZCAtIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IHRvIGdldCB0aGUgc3Vic2NyaWJlcnMgb2YuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgc3Vic2NyaWJlcnMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFVzZXJ9IG9iamVjdHMgYXNzb3J0ZWQgYnkgdXNlciBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRVZFTlRTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBVc2VycyBhcmUgb3JkZXJlZCBieSB0aGVpciBJRHMgaW4gX2FzY2VuZGluZ18gb3JkZXIuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjZ2V0LWd1aWxkLXNjaGVkdWxlZC1ldmVudC11c2Vyc31cbiAgICovXG4gIGdldFNjaGVkdWxlZEV2ZW50VXNlcnM6IChcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgZXZlbnRJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM/OiBHZXRTY2hlZHVsZWRFdmVudFVzZXJzLFxuICApID0+IFByb21pc2U8QXJyYXk8eyB1c2VyOiBDYW1lbGl6ZTxEaXNjb3JkVXNlcj47IG1lbWJlcj86IENhbWVsaXplPERpc2NvcmRNZW1iZXI+IH0+PlxuICAvKiogR2V0IHRoZSBib3RzIEdhdGV3YXkgbWV0YWRhdGEgdGhhdCBjYW4gaGVscCBkdXJpbmcgdGhlIG9wZXJhdGlvbiBvZiBsYXJnZSBvciBzaGFyZGVkIGJvdHMuICovXG4gIGdldFNlc3Npb25JbmZvOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHZXRHYXRld2F5Qm90Pj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHN0YWdlIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBhIHN0YWdlIGNoYW5uZWwsIGlmIG9uZSBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHN0YWdlIGNoYW5uZWwgdGhlIHN0YWdlIGluc3RhbmNlIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRTdGFnZUluc3RhbmNlfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0YWdlLWluc3RhbmNlI2dldC1zdGFnZS1pbnN0YW5jZX1cbiAgICovXG4gIGdldFN0YWdlSW5zdGFuY2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4+XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHVzZXIncyB2b2ljZSBzdGF0ZSBpbiB0aGUgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHZvaWNlIHN0YXRlIGZyb20uXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkVm9pY2VTdGF0ZX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy92b2ljZSNnZXQtY3VycmVudC11c2VyLXZvaWNlLXN0YXRlfVxuICAgKi9cbiAgZ2V0T3duVm9pY2VTdGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVm9pY2VTdGF0ZT4+XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzcGVjaWZpZWQgdXNlcidzIHZvaWNlIHN0YXRlIGluIHRoZSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgdm9pY2Ugc3RhdGUgZnJvbS5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBnZXQgdGhlIHZvaWNlIHN0YXRlIGZyb21cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRWb2ljZVN0YXRlfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3ZvaWNlI2dldC11c2VyLXZvaWNlLXN0YXRlfVxuICAgKi9cbiAgZ2V0VXNlclZvaWNlU3RhdGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRWb2ljZVN0YXRlPj5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdGlja2VyIG9iamVjdCBmb3IgdGhlIGdpdmVuIHN0aWNrZXIgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBzdGlja2VySWQgVGhlIElEIG9mIHRoZSBzdGlja2VyIHRvIGdldFxuICAgKiBAcmV0dXJucyBBIHtAbGluayBEaXNjb3JkU3RpY2tlcn1cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0aWNrZXIjZ2V0LXN0aWNrZXJ9XG4gICAqL1xuICBnZXRTdGlja2VyOiAoc3RpY2tlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0aWNrZXI+PlxuICAvKipcbiAgICogR2V0cyBhIHRocmVhZCBtZW1iZXIgYnkgdGhlaXIgdXNlciBJRC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIGdldCB0aGUgdGhyZWFkIG1lbWJlciBvZi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSB0aHJlYWQgbWVtYmVyIHRvIGdldC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSB0aHJlYWQgbWVtYmVyLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFRocmVhZE1lbWJlcn0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2dldC10aHJlYWQtbWVtYmVyfVxuICAgKi9cbiAgZ2V0VGhyZWFkTWVtYmVyOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0VGhyZWFkTWVtYmVyKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUaHJlYWRNZW1iZXI+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiB0aHJlYWQgbWVtYmVycyBmb3IgYSB0aHJlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRocmVhZCB0byBnZXQgdGhlIHRocmVhZCBtZW1iZXJzIG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHRocmVhZCBtZW1iZXJzLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRUaHJlYWRNZW1iZXJ9IGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBhcHBsaWNhdGlvbiB0byBoYXZlIHRoZSBgR1VJTERfTUVNQkVSU2AgcHJpdmlsZWdlZCBpbnRlbnQgZW5hYmxlZC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjbGlzdC10aHJlYWQtbWVtYmVyc31cbiAgICovXG4gIGdldFRocmVhZE1lbWJlcnM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IExpc3RUaHJlYWRNZW1iZXJzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUaHJlYWRNZW1iZXI+W10+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHVzZXJzIHRoYXQgcmVhY3RlZCB3aXRoIGFuIGVtb2ppIHRvIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSB0byBnZXQgdGhlIHVzZXJzIGZvciBpcyBpbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBnZXQgdGhlIHVzZXJzIGZvci5cbiAgICogQHBhcmFtIHJlYWN0aW9uIC0gVGhlIHJlYWN0aW9uIGZvciB3aGljaCB0byBnZXQgdGhlIHVzZXJzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHVzZXJzLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRVc2VyfSBvYmplY3RzIGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2dldC1yZWFjdGlvbnN9XG4gICAqL1xuICBnZXRSZWFjdGlvbnM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHJlYWN0aW9uOiBzdHJpbmcsIG9wdGlvbnM/OiBHZXRSZWFjdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFVzZXI+W10+XG4gIC8qKlxuICAgKiBHZXQgYSB1c2VyJ3MgZGF0YSBmcm9tIHRoZSBhcGlcbiAgICpcbiAgICogQHBhcmFtIGlkIFRoZSB1c2VyJ3MgaWRcbiAgICogQHJldHVybnMge0Rpc2NvcmRVc2VyfVxuICAgKi9cbiAgZ2V0VXNlcjogKGlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFVzZXI+PlxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHVzZXIgZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIGJlYXJlclRva2VuIC0gVGhlIGFjY2VzcyB0b2tlbiBvZiB0aGUgdXNlclxuICAgKiBAcmV0dXJucyB7RGlzY29yZFVzZXJ9XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgcmVxdWlyZXMgdGhlIGBpZGVudGlmeWAgc2NvcGUuXG4gICAqXG4gICAqIFRvIGdldCB0aGUgbWFpbCB0aGlzIGFsc28gcmVxdWlyZXMgdGhlIGBlbWFpbGAgc2NvcGVcbiAgICovXG4gIGdldEN1cnJlbnRVc2VyOiAoYmVhcmVyVG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVXNlcj4+XG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgdXNlciBjb25uZWN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGJlYXJlclRva2VuIC0gVGhlIGFjY2VzcyB0b2tlbiBvZiB0aGUgdXNlclxuICAgKiBAcmV0dXJucyB7RGlzY29yZENvbm5lY3Rpb25bXX1cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyByZXF1aXJlcyB0aGUgYGNvbm5lY3Rpb25zYCBzY29wZS5cbiAgICovXG4gIGdldFVzZXJDb25uZWN0aW9uczogKGJlYXJlclRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENvbm5lY3Rpb24+W10+XG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgdXNlciBhcHBsaWNhdGlvbiByb2xlIGNvbm5lY3Rpb24gZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGJlYXJlclRva2VuIC0gVGhlIGFjY2VzcyB0b2tlbiBvZiB0aGUgdXNlclxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBpZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSByb2xlIGNvbm5lY3Rpb25cbiAgICogQHJldHVybnMge0Rpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9ufVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYWNjZXNzIHRva2VuIHJlcXVpcmVzIHRoZSBgcm9sZV9jb25uZWN0aW9ucy53cml0ZWAgc2NvcGUuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy91c2VyI2dldC11c2VyLWFwcGxpY2F0aW9uLXJvbGUtY29ubmVjdGlvbn1cbiAgICovXG4gIGdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uOiAoYmVhcmVyVG9rZW46IHN0cmluZywgYXBwbGljYXRpb25JZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPj5cbiAgLyoqXG4gICAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHZhbml0eSB1cmwgb2YgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgdmFuaXR5IHVybCBpbmZvcm1hdGlvbiBmb3IuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkVmFuaXR5VXJsfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFRoZSBgY29kZWAgcHJvcGVydHkgd2lsbCBiZSBgbnVsbGAgaWYgdGhlIGd1aWxkIGRvZXMgbm90IGhhdmUgYSBzZXQgdmFuaXR5IHVybC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC12YW5pdHktdXJsfVxuICAgKi9cbiAgZ2V0VmFuaXR5VXJsOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRWYW5pdHlVcmw+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiB2b2ljZSByZWdpb25zIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSB2b2ljZSByZWdpb25zIGZvci5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkVm9pY2VSZWdpb259IG9iamVjdHMgYXNzb3J0ZWQgYnkgdm9pY2UgcmVnaW9uIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLXZvaWNlLXJlZ2lvbnN9XG4gICAqL1xuICBnZXRWb2ljZVJlZ2lvbnM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFZvaWNlUmVnaW9uPltdPlxuICAvKipcbiAgICogR2V0cyBhIHdlYmhvb2sgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRXZWJob29rfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24gdW5sZXNzIHRoZSBhcHBsaWNhdGlvbiBtYWtpbmcgdGhlIHJlcXVlc3Qgb3ducyB0aGUgd2ViaG9vay5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LXdlYmhvb2t9XG4gICAqL1xuICBnZXRXZWJob29rOiAod2ViaG9va0lkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PlxuICAvKipcbiAgICogR2V0cyBhIHdlYmhvb2sgbWVzc2FnZSBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZ2V0IGEgbWVzc2FnZSBvZi5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZ2V0IHdlYmhvb2sgbWVzc2FnZXMuXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSB0aGUgSUQgb2YgdGhlIHdlYmhvb2sgbWVzc2FnZSB0byBnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LXdlYmhvb2stbWVzc2FnZX1cbiAgICovXG4gIGdldFdlYmhvb2tNZXNzYWdlOiAoXG4gICAgd2ViaG9va0lkOiBCaWdTdHJpbmcsXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBtZXNzYWdlSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zPzogR2V0V2ViaG9va01lc3NhZ2VPcHRpb25zLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogR2V0cyBhIHdlYmhvb2sgdXNpbmcgdGhlIHdlYmhvb2sgdG9rZW4sIHRoZXJlYnkgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhdXRoZW50aWNhdGlvbiArIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGdldC5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZ2V0IHRoZSB3ZWJob29rLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNnZXQtd2ViaG9vay13aXRoLXRva2VufVxuICAgKi9cbiAgZ2V0V2ViaG9va1dpdGhUb2tlbjogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHdlbGNvbWUgc2NyZWVuIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSB3ZWxjb21lIHNjcmVlbiBmb3IuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkV2VsY29tZVNjcmVlbn0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIHRoZSB3ZWxjb21lIHNjcmVlbiBpcyBub3QgZW5hYmxlZDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC13ZWxjb21lLXNjcmVlbn1cbiAgICovXG4gIGdldFdlbGNvbWVTY3JlZW46IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlbGNvbWVTY3JlZW4+PlxuICAvKipcbiAgICogR2V0cyB0aGUgZ3VpbGQgd2lkZ2V0IGJ5IGd1aWxkIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSB3aWRnZXQgb2YuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkR3VpbGRXaWRnZXR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhbiBgSU5WSVRFX0NSRUFURURgIEdhdGV3YXkgZXZlbnQgd2hlbiBhbiBpbnZpdGUgY2hhbm5lbCBpcyBkZWZpbmVkIGFuZCBhIG5ldyBgSW52aXRlYCBpcyBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtd2lkZ2V0fVxuICAgKi9cbiAgZ2V0V2lkZ2V0OiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZFdpZGdldD4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzZXR0aW5ncyBvZiBhIGd1aWxkJ3Mgd2lkZ2V0LlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSB3aWRnZXQgb2YuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5nc30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLXdpZGdldC1zZXR0aW5nc31cbiAgICovXG4gIGdldFdpZGdldFNldHRpbmdzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPj5cbiAgLyoqXG4gICAqIEFkZHMgdGhlIGJvdCB1c2VyIHRvIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gYWRkIHRoZSBib3QgdXNlciB0by5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIHRocmVhZCBub3QgYmUgYXJjaGl2ZWQuXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBNZW1iZXJzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjam9pbi10aHJlYWR9XG4gICAqL1xuICBqb2luVGhyZWFkOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIExlYXZlcyBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gbGVhdmUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX0d1aWxkIERlbGV0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy91c2VyI2xlYXZlLWd1aWxkfVxuICAgKi9cbiAgbGVhdmVHdWlsZDogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgYm90IHVzZXIgZnJvbSBhIHRocmVhZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIHJlbW92ZSB0aGUgYm90IHVzZXIgZnJvbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIHRocmVhZCBub3QgYmUgYXJjaGl2ZWQuXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBNZW1iZXJzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjbGVhdmUtdGhyZWFkfVxuICAgKi9cbiAgbGVhdmVUaHJlYWQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogQ3Jvc3MtcG9zdHMgYSBtZXNzYWdlIHBvc3RlZCBpbiBhbiBhbm5vdW5jZW1lbnQgY2hhbm5lbCB0byBzdWJzY3JpYmVkIGNoYW5uZWxzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBhbm5vdW5jZW1lbnQgY2hhbm5lbC5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBjcm9zcy1wb3N0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3Jvc3MtcG9zdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgU0VORF9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgbm90IGNyb3NzLXBvc3Rpbmcgb3duIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBldmVudCBpbiB0aGUgZ3VpbGRzIHRoZSBzdWJzY3JpYmVkIGNoYW5uZWxzIGFyZSBpbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjY3Jvc3Nwb3N0LW1lc3NhZ2V9XG4gICAqL1xuICBwdWJsaXNoTWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcm9sZSBmcm9tIGEgbWVtYmVyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIG1lbWJlciB0byByZW1vdmUgdGhlIHJvbGUgZnJvbSBpcyBpbi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gcmVtb3ZlIHRoZSByb2xlIGZyb20uXG4gICAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gcmVtb3ZlIGZyb20gdGhlIG1lbWJlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgTWVtYmVyIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI3JlbW92ZS1ndWlsZC1tZW1iZXItcm9sZX1cbiAgICovXG4gIHJlbW92ZVJvbGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCByb2xlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgbWVtYmVyIGZyb20gYSB0aHJlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRocmVhZCB0byByZW1vdmUgdGhlIHRocmVhZCBtZW1iZXIgb2YuXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgdGhyZWFkIG1lbWJlciB0byByZW1vdmUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIHRoZSB0aHJlYWQgaXMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZFByaXZhdGVUaHJlYWQsIHJlcXVpcmVzIHRvIGJlIHRoZSBjcmVhdG9yIG9mIHRoZSB0aHJlYWQuXG4gICAqIE90aGVyd2lzZSwgcmVxdWlyZXMgdGhlIGBNQU5BR0VfVEhSRUFEU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIHRocmVhZCBub3QgYmUgYXJjaGl2ZWQuXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBNZW1iZXJzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjcmVtb3ZlLXRocmVhZC1tZW1iZXJ9XG4gICAqL1xuICByZW1vdmVUaHJlYWRNZW1iZXI6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBtZW1iZXIgZnJvbSBhIEdyb3VwIERNLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIHJlbW92ZSB0aGUgcmVjaXBpZW50IHVzZXIgb2YuXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgdXNlciB0byByZW1vdmUuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2dyb3VwLWRtLXJlbW92ZS1yZWNpcGllbnR9XG4gICAqL1xuICByZW1vdmVEbVJlY2lwaWVudDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogU2VuZHMgYSBtZXNzYWdlIHRvIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBzZW5kIHRoZSBtZXNzYWdlIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoYXQgdGhlIGJvdCB1c2VyIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyB0byBiZSBzZW50IGluLlxuICAgKlxuICAgKiBJZiBzZW5kaW5nIGEgbWVzc2FnZSB0byBhIGd1aWxkIGNoYW5uZWw6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBTRU5EX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBzZW5kaW5nIGEgVFRTIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBTRU5EX1RUU19NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgc2VuZGluZyBhIG1lc3NhZ2UgYXMgYSByZXBseSB0byBhbm90aGVyIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICogLSBUaGUgbWVzc2FnZSBiZWluZyByZXBsaWVkIHRvIGNhbm5vdCBiZSBhIHN5c3RlbSBtZXNzYWdlLlxuICAgKlxuICAgKiDimqDvuI8gVGhlIG1heGltdW0gc2l6ZSBvZiBhIHJlcXVlc3QgKGFjY291bnRpbmcgZm9yIGFueSBhdHRhY2htZW50cyBhbmQgbWVzc2FnZSBjb250ZW50KSBmb3IgYm90IHVzZXJzIGlzIF84IE1pQl8uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNjcmVhdGUtbWVzc2FnZX1cbiAgICovXG4gIHNlbmRNZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZU1lc3NhZ2VPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgLyoqXG4gICAqIFNlbmRzIGEgZm9sbG93LXVwIG1lc3NhZ2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiDimqDvuI8gSW50ZXJhY3Rpb24gdG9rZW5zIGFyZSBvbmx5IHZhbGlkIGZvciBfMTUgbWludXRlc18uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIG1lbnRpb25zIGFyZSBzdXBwcmVzc2VkLiBUbyBlbmFibGUgbWVudGlvbnMsIHBhc3MgYSBtZW50aW9uIG9iamVjdCB3aXRoIHRoZSBjYWxsYmFjayBkYXRhLlxuICAgKlxuICAgKiBVbmxpa2UgYHNlbmRNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQ6XG4gICAqIC0gTmVlZGluZyB0byBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgdGhhdCB0aGUgbWVzc2FnZSBpcyBpbi4gKGBSRUFEX01FU1NBR0VTYCBwZXJtaXNzaW9uLilcbiAgICogLSBSZXF1aXJpbmcgdGhlIGBNRVNTQUdFX0NPTlRFTlRgIGludGVudC5cbiAgICpcbiAgICogQXBwcyBhcmUgbGltaXRlZCB0byA1IGZvbGxvd3VwIG1lc3NhZ2VzIHBlciBpbnRlcmFjdGlvbiBpZiBpdCB3YXMgaW5pdGlhdGVkIGZyb20gYSB1c2VyLWluc3RhbGxlZCBhcHAgYW5kIGlzbid0IGluc3RhbGxlZCBpbiB0aGUgc2VydmVyXG4gICAqIFlvdSBjYW4gY2hlY2sgaWYgaXQgd2FzIGluaXRpYXRlZCBmcm9tIGEgdXNlci1pbnN0YWxsZWQgYXBwIHRoYXQgaXNuJ3QgaW5zdGFsbGVkIGluIHRoZSBzZXJ2ZXIgYnkgY2hlY2tpbmcgaWYge0BsaW5rIERpc2NvcmRJbnRlcmFjdGlvbi5hdXRob3JpemluZ19pbnRlZ3JhdGlvbl9vd25lcnMgfCBhdXRob3JpemluZ0ludGVncmF0aW9uT3duZXJzfSBvbmx5IGNvbnRhaW5zIHtAbGluayBEaXNjb3JkQXBwbGljYXRpb25JbnRlZ3JhdGlvblR5cGUuVXNlckluc3RhbGwgfCBVc2VySW5zdGFsbH0uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNjcmVhdGUtZm9sbG93dXAtbWVzc2FnZX1cbiAgICovXG4gIHNlbmRGb2xsb3d1cE1lc3NhZ2U6ICh0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBTZW5kcyBhIHJlc3BvbnNlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gaW50ZXJhY3Rpb25JZCAtIFRoZSBJRCBvZiB0aGUgaW50ZXJhY3Rpb24gdG8gcmVzcG9uZCB0by5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyBmb3IgdGhlIHJlc3BvbnNlIG9mIHRoZSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyBOb3RoaW5nIG9yIHRoZSB7QGxpbmsgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZX0gaWYgd2l0aFJlc3BvbnNlIHBhcmFtIGlzIHRydWVcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIEludGVyYWN0aW9uIHRva2VucyBhcmUgb25seSB2YWxpZCBmb3IgXzE1IG1pbnV0ZXNfLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBtZW50aW9ucyBhcmUgc3VwcHJlc3NlZC4gVG8gZW5hYmxlIG1lbnRpb25zLCBwYXNzIGEgbWVudGlvbiBvYmplY3Qgd2l0aCB0aGUgY2FsbGJhY2sgZGF0YS5cbiAgICpcbiAgICogVW5saWtlIGBzZW5kTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNjcmVhdGUtaW50ZXJhY3Rpb24tcmVzcG9uc2V9XG4gICAqL1xuICBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZTogKFxuICAgIGludGVyYWN0aW9uSWQ6IEJpZ1N0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEludGVyYWN0aW9uUmVzcG9uc2UsXG4gICAgcGFyYW1zPzogSW50ZXJhY3Rpb25DYWxsYmFja09wdGlvbnMsXG4gICkgPT4gUHJvbWlzZTx2b2lkIHwgQ2FtZWxpemU8RGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZT4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGhyZWFkLCB1c2luZyBhbiBleGlzdGluZyBtZXNzYWdlIGFzIGl0cyBwb2ludCBvZiBvcmlnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSB0aHJlYWQuXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gdXNlIGFzIHRoZSB0aHJlYWQncyBwb2ludCBvZiBvcmlnaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgdG8gdXNlIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHRocmVhZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiBjYWxsZWQgb24gYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGRUZXh0LCBjcmVhdGVzIGEge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGRQdWJsaWNUaHJlYWQuXG4gICAqIElmIGNhbGxlZCBvbiBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZE5ld3MsIGNyZWF0ZXMgYSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZE5ld3NUaHJlYWQuXG4gICAqIERvZXMgbm90IHdvcmsgb24gY2hhbm5lbHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZEZvcnVtLlxuICAgKlxuICAgKiBUaGUgSUQgb2YgdGhlIGNyZWF0ZWQgdGhyZWFkIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIElEIG9mIHRoZSBzb3VyY2UgbWVzc2FnZS5cbiAgICpcbiAgICogRmlyZXMgYSBfVGhyZWFkIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjc3RhcnQtdGhyZWFkLWZyb20tbWVzc2FnZX1cbiAgICovXG4gIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2U6IChcbiAgICBjaGFubmVsSWQ6IEJpZ1N0cmluZyxcbiAgICBtZXNzYWdlSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBTdGFydFRocmVhZFdpdGhNZXNzYWdlLFxuICAgIHJlYXNvbj86IHN0cmluZyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0aHJlYWQgd2l0aG91dCB1c2luZyBhIG1lc3NhZ2UgYXMgdGhlIHRocmVhZCdzIHBvaW50IG9mIG9yaWdpbi5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0byBjcmVhdGUgdGhlIHRocmVhZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyB0byB1c2UgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGhyZWFkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkQ2hhbm5lbCB8IFRocmVhZH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIENyZWF0aW5nIGEgcHJpdmF0ZSB0aHJlYWQgcmVxdWlyZXMgdGhlIHNlcnZlciB0byBiZSBib29zdGVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNzdGFydC10aHJlYWQtd2l0aG91dC1tZXNzYWdlfVxuICAgKi9cbiAgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBTdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAvKipcbiAgICogR2V0IGEgbGlzdCBvZiB1c2VycyB0aGF0IHZvdGVkIGZvciB0aGlzIHNwZWNpZmljIGFuc3dlci5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0aGUgbWVzc2FnZSB3aXRoIHRoZSBwb2xsIGxpdmVzXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgaW4gd2hpY2ggdGhlIHBvbGwgbGl2ZXNcbiAgICogQHBhcmFtIGFuc3dlcklkIC0gVGhlIElEIG9mIHRoZSBhbnN3ZXIgdG8gZ2V0IHRoZSB1c2VycyB0aGF0IHZvdGVkIHRoYXQgYW5zd2VyXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHVzZXJzIHRoYXQgdm90ZWQgZm9yIHRoZSBzcGVjaWZpYyBhbnN3ZXIuXG4gICAqL1xuICBnZXRQb2xsQW5zd2VyVm90ZXJzOiAoXG4gICAgY2hhbm5lbElkOiBCaWdTdHJpbmcsXG4gICAgbWVzc2FnZUlkOiBCaWdTdHJpbmcsXG4gICAgYW5zd2VySWQ6IG51bWJlcixcbiAgICBvcHRpb25zPzogR2V0UG9sbEFuc3dlclZvdGVzLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2U+PlxuICAvKipcbiAgICogSW1tZWRpYXRlbHkgZW5kcyB0aGUgcG9sbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0aGUgbWVzc2FnZSB3aXRoIHRoZSBwb2xsIGxpdmVzXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgaW4gd2hpY2ggdGhlIHBvbGwgbGl2ZXNcbiAgICogQHJldHVybnMgVGhlIG1lc3NhZ2Ugd2l0aCB0aGUgZXhwaXJlZCBwb2xsXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFlvdSBjYW5ub3QgZW5kIHBvbGxzIGZyb20gb3RoZXIgdXNlcnMuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBnYXRld2F5IGV2ZW50XG4gICAqL1xuICBlbmRQb2xsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgLyoqXG4gICAqIFN5bmNocm9uaXNlcyBhIHRlbXBsYXRlIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIHN5bmNocm9uaXNlIGEgdGVtcGxhdGUgb2YuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRUZW1wbGF0ZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNnZXQtZ3VpbGQtdGVtcGxhdGVzfVxuICAgKi9cbiAgc3luY0d1aWxkVGVtcGxhdGU6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgdHlwaW5nIGluZGljYXRvciBmb3IgdGhlIHNwZWNpZmllZCBjaGFubmVsLCB3aGljaCBleHBpcmVzIGFmdGVyIDEwIHNlY29uZHMuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdG8gdHJpZ2dlciB0aGUgdHlwaW5nIGluZGljYXRvci5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogR2VuZXJhbGx5IGJvdHMgc2hvdWxkICoqbm90KiogdXNlIHRoaXMgcm91dGUuXG4gICAqIEhvd2V2ZXIsIGlmIGEgYm90IGlzIHJlc3BvbmRpbmcgdG8gYSBjb21tYW5kIGFuZCBleHBlY3RzIHRoZSBjb21wdXRhdGlvbiB0byB0YWtlIGEgZmV3IHNlY29uZHMsXG4gICAqIHRoaXMgZW5kcG9pbnQgbWF5IGJlIGNhbGxlZCB0byBsZXQgdGhlIHVzZXIga25vdyB0aGF0IHRoZSBib3QgaXMgcHJvY2Vzc2luZyB0aGVpciBtZXNzYWdlLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UeXBpbmcgU3RhcnRfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3RyaWdnZXItdHlwaW5nLWluZGljYXRvcn1cbiAgICovXG4gIHRyaWdnZXJUeXBpbmdJbmRpY2F0b3I6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogUmUtcmVnaXN0ZXJzIHRoZSBsaXN0IG9mIGdsb2JhbCBhcHBsaWNhdGlvbiBjb21tYW5kcywgb3ZlcndyaXRpbmcgdGhlIHByZXZpb3VzIGNvbW1hbmRzIGNvbXBsZXRlbHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kcyAtIFRoZSBsaXN0IG9mIGNvbW1hbmRzIHRvIHVzZSB0byBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGxpc3QuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgZW5kcG9pbnQuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjb21tYW5kIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiDinZcgQ29tbWFuZHMgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIGBjb21tYW5kc2AgYXJyYXkgd2lsbCBiZSBfX2RlbGV0ZWRfXy5cbiAgICpcbiAgICog4pqg77iPIENvbW1hbmRzIHRoYXQgZG8gbm90IGFscmVhZHkgZXhpc3Qgd2lsbCBjb3VudCB0b3dhcmRzIHRoZSBkYWlseSBsaW1pdCBvZiBfMjAwXyBuZXcgY29tbWFuZHMuXG4gICAqXG4gICAqIFdoZW4gdXNpbmcgdGhlIGJlYXJlciB0b2tlbiB0aGUgdG9rZW4gbmVlZHMgdGhlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMudXBkYXRlYCBzY29wZSBhbmQgbXVzdCBiZSBhIGBDbGllbnQgZ3JhbnRgIHRva2VuLlxuICAgKiAgWW91IHdpbGwgYmUgYWJsZSB0byB1cGRhdGUgb25seSB5b3VyIG93biBhcHBsaWNhdGlvbiBjb21tYW5kc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjYnVsay1vdmVyd3JpdGUtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmRzfVxuICAgKi9cbiAgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kczogKFxuICAgIGNvbW1hbmRzOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmRbXSxcbiAgICBvcHRpb25zPzogVXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+W10+XG4gIC8qKlxuICAgKiBSZS1yZWdpc3RlcnMgdGhlIGxpc3Qgb2YgYXBwbGljYXRpb24gY29tbWFuZHMgcmVnaXN0ZXJlZCBpbiBhIGd1aWxkLCBvdmVyd3JpdGluZyB0aGUgcHJldmlvdXMgY29tbWFuZHMgY29tcGxldGVseS5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHdob3NlIGxpc3Qgb2YgY29tbWFuZHMgdG8gb3ZlcndyaXRlLlxuICAgKiBAcGFyYW0gY29tbWFuZHMgLSBUaGUgbGlzdCBvZiBjb21tYW5kcyB0byB1c2UgdG8gb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBsaXN0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGVuZHBvaW50LlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmR9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY29tbWFuZCBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4p2XIENvbW1hbmRzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBgY29tbWFuZHNgIGFycmF5IHdpbGwgYmUgX19kZWxldGVkX18uXG4gICAqXG4gICAqIOKaoO+4jyBDb21tYW5kcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGV4aXN0IHdpbGwgY291bnQgdG93YXJkcyB0aGUgZGFpbHkgbGltaXQgb2YgXzIwMF8gbmV3IGNvbW1hbmRzLlxuICAgKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBiZWFyZXIgdG9rZW4gdGhlIHRva2VuIG5lZWRzIHRoZSBgYXBwbGljYXRpb25zLmNvbW1hbmRzLnVwZGF0ZWAgc2NvcGUgYW5kIG11c3QgYmUgYSBgQ2xpZW50IGdyYW50YCB0b2tlbi5cbiAgICogIFlvdSB3aWxsIGJlIGFibGUgdG8gdXBkYXRlIG9ubHkgeW91ciBvd24gYXBwbGljYXRpb24gY29tbWFuZHNcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2J1bGstb3ZlcndyaXRlLWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmRzfVxuICAgKi9cbiAgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIGNvbW1hbmRzOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmRbXSxcbiAgICBvcHRpb25zPzogVXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRPcHRpb25zLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD5bXT5cbiAgLyoqXG4gICAqIEJhbnMgYSB1c2VyIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGJhbiB0aGUgdXNlciBmcm9tLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGJhbiBmcm9tIHRoZSBndWlsZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBiYW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBCQU5fTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgQmFuIEFkZF8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2NyZWF0ZS1ndWlsZC1iYW59XG4gICAqL1xuICBiYW5NZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogQ3JlYXRlR3VpbGRCYW4sIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogQmFucyB1cCB0byAyMDAgdXNlcnMgZnJvbSBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gYmFuIHRoZSB1c2VycyBmcm9tLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB1c2VycyB0byBiYW4gYW5kIHRoZSBvdGhlciBvcHRpb25zIGZvciB0aGUgYmFuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQkFOX01FTUJFUlNgIGFuZCBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogSWYgYWxsIHByb3ZpZGVkIHVzZXJzIGZhaWwgdG8gYmUgYmFubmVkLCBkaXNjb3JkIHdpbGwgcmVzcG9uZCB3aXRoIGFuIGVycm9yIChjb2RlOiBgNTAwMDAwOiBGYWlsZWQgdG8gYmFuIHVzZXJzYClcbiAgICpcbiAgICogRmlyZXMgYXMgbWFueSBfR3VpbGQgQmFuIEFkZF8gZ2F0ZXdheSBldmVudHMgYXMgbWFueSB1c2VyIHdoZXJlIGJhbm5lZC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2J1bGstZ3VpbGQtYmFufVxuICAgKi9cbiAgYnVsa0Jhbk1lbWJlcnM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUd1aWxkQnVsa0JhbiwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRCdWxrQmFuPj5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBuaWNrbmFtZSBvZiB0aGUgYm90IHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSBuaWNrbmFtZSBvZiB0aGUgYm90IHVzZXIgaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBuaWNrbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkTWVtYmVyfVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbW9kaWZ5LWN1cnJlbnQtbWVtYmVyfVxuICAgKi9cbiAgZWRpdEJvdE1lbWJlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogRWRpdEJvdE1lbWJlck9wdGlvbnMsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgbWVtYmVyJ3MgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIG1lbWJlciBvZi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gZWRpdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgdXNlci5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBlbmRwb2ludCByZXF1aXJlcyB2YXJpb3VzIHBlcm1pc3Npb25zIGRlcGVuZGluZyBvbiB3aGF0IGlzIGVkaXRlZCBhYm91dCB0aGUgbWVtYmVyLlxuICAgKiBUbyBmaW5kIG91dCB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbiB0byBlbmFjdCBhIGNoYW5nZSwgcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIGVuZHBvaW50J3Mge0BsaW5rIE1vZGlmeUd1aWxkTWVtYmVyIHwgcGFyYW1ldGVyc30uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtbWVtYmVyfVxuICAgKi9cbiAgZWRpdE1lbWJlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkTWVtYmVyLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcj4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBtZW1iZXIgb2JqZWN0IGJ5IHVzZXIgSUQuXG4gICAqXG4gIFxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBtZW1iZXIgb2JqZWN0IGZvci5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBnZXQgdGhlIG1lbWJlciBvYmplY3QgZm9yLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZE1lbWJlcldpdGhVc2VyfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1tZW1iZXJ9XG4gICAqL1xuICBnZXRNZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcj4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IG1lbWJlciBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gb2YgdGhlIHVzZXJcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbWVtYmVyIG9iamVjdCBmb3IuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkTWVtYmVyV2l0aFVzZXJ9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYWNjZXNzIHRva2VucyBuZWVkcyB0aGUgYGd1aWxkcy5tZW1iZXJzLnJlYWRgIHNjb3BlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy91c2VyI2dldC1jdXJyZW50LXVzZXItZ3VpbGQtbWVtYmVyfVxuICAgKi9cbiAgZ2V0Q3VycmVudE1lbWJlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgYmVhcmVyVG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBtZW1iZXJzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIG1lbWJlcnMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZE1lbWJlcldpdGhVc2VyfSBvYmplY3RzIGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgR1VJTERfTUVNQkVSU2AgaW50ZW50LlxuICAgKlxuICAgKiDimqDvuI8gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIGVuZHBvaW50IHdpdGggdmVyeSBsYXJnZSBib3RzLiBJbnN0ZWFkLCBvcHQgdG8gdXNlIGBmZXRjaE1lbWJlcnMoKWA6XG4gICAqIFJFU1QgY29tbXVuaWNhdGlvbiBvbmx5IHBlcm1pdHMgNTAgcmVxdWVzdHMgdG8gYmUgbWFkZSBwZXIgc2Vjb25kLCB3aGlsZSBnYXRld2F5cyBhbGxvdyBmb3IgdXAgdG8gMTIwIHJlcXVlc3RzXG4gICAqIHBlciBtaW51dGUgcGVyIHNoYXJkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL3JhdGUtbGltaXRzI3JhdGUtbGltaXRzfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2xpc3QtZ3VpbGQtbWVtYmVyc31cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjcmVxdWVzdC1ndWlsZC1tZW1iZXJzfVxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvcmF0ZS1saW1pdHMjcmF0ZS1saW1pdHN9XG4gICAqL1xuICBnZXRNZW1iZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBMaXN0R3VpbGRNZW1iZXJzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcj5bXT5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzZXJpYWxpemVkIGFjdGl2aXR5IGluc3RhbmNlLCBpZiBpdCBleGlzdHMuIFVzZWZ1bCBmb3IgcHJldmVudGluZyB1bndhbnRlZCBhY3Rpdml0eSBzZXNzaW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uSWQgLSBUaGUgSUQgb2YgdGhlIGFwcGxpY2F0aW9uXG4gICAqIEBwYXJhbSBpbnN0YW5jZUlkIC0gVGhlIElEIG9mIHRoZSBhY3Rpdml0eSBpbnN0YW5jZVxuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlOiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBpbnN0YW5jZUlkOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFjdGl2aXR5SW5zdGFuY2U+PlxuICAvKipcbiAgICogS2lja3MgYSBtZW1iZXIgZnJvbSBhIGd1aWxkLlxuICAgKlxuICBcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGtpY2sgdGhlIG1lbWJlciBmcm9tLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIG1lbWJlciB0byBraWNrIGZyb20gdGhlIGd1aWxkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgS0lDS19NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgUmVtb3ZlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjcmVtb3ZlLWd1aWxkLW1lbWJlcn1cbiAgICovXG4gIGtpY2tNZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIFBpbnMgYSBtZXNzYWdlIGluIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB3aGVyZSB0aGUgbWVzc2FnZSBpcyB0byBiZSBwaW5uZWQuXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gcGluLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUElOX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIFBpbnMgVXBkYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL21lc3NhZ2UjcGluLW1lc3NhZ2V9XG4gICAqL1xuICBwaW5NZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEluaXRpYXRlcyB0aGUgcHJvY2VzcyBvZiBwcnVuaW5nIGluYWN0aXZlIG1lbWJlcnMuXG4gICAqXG4gIFxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gcHJ1bmUgdGhlIG1lbWJlcnMgb2YuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBwcnVuaW5nIG9mIG1lbWJlcnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQSBudW1iZXIgaW5kaWNhdGluZyBob3cgbWFueSBtZW1iZXJzIHdlcmUgcHJ1bmVkLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgYW5kIGBLSUNLX01FTUJFUlNgIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiDinZcgUmVxdWVzdHMgdG8gdGhpcyBlbmRwb2ludCB3aWxsIHRpbWUgb3V0IGZvciBsYXJnZSBndWlsZHMuIFRvIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZywgc2V0IHRoZSB7QGxpbmsgQmVnaW5HdWlsZFBydW5lLmNvbXB1dGVQcnVuZUNvdW50fSBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9ucyBvYmplY3QgcGFyYW1ldGVyIHRvIGBmYWxzZWAuIFRoaXMgd2lsbCBiZWdpbiB0aGUgcHJvY2VzcyBvZiBwcnVuaW5nLCBhbmQgaW1tZWRpYXRlbHkgcmV0dXJuIGB1bmRlZmluZWRgLCByYXRoZXIgdGhhbiB3YWl0IGZvciB0aGUgcHJvY2VzcyB0byBjb21wbGV0ZSBiZWZvcmUgcmV0dXJuaW5nIHRoZSBhY3R1YWwgY291bnQgb2YgbWVtYmVycyB0aGF0IGhhdmUgYmVlbiBraWNrZWQuXG4gICAqXG4gICAqIOKaoO+4jyBCeSBkZWZhdWx0LCB0aGlzIHByb2Nlc3Mgd2lsbCBub3QgcmVtb3ZlIG1lbWJlcnMgd2l0aCBhIHJvbGUuIFRvIGluY2x1ZGUgdGhlIG1lbWJlcnMgd2hvIGhhdmUgYSBfcGFydGljdWxhciBzdWJzZXQgb2Ygcm9sZXNfLCBzcGVjaWZ5IHRoZSByb2xlKHMpIGluIHRoZSB7QGxpbmsgQmVnaW5HdWlsZFBydW5lLmluY2x1ZGVSb2xlcyB8IGluY2x1ZGVSb2xlc30gcHJvcGVydHkgb2YgdGhlIG9wdGlvbnMgb2JqZWN0IHBhcmFtZXRlci5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgTWVtYmVyIFJlbW92ZV8gZ2F0ZXdheSBldmVudCBmb3IgZXZlcnkgbWVtYmVyIGtpY2tlZC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2JlZ2luLWd1aWxkLXBydW5lfVxuICAgKi9cbiAgcHJ1bmVNZW1iZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBCZWdpbkd1aWxkUHJ1bmUsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx7IHBydW5lZDogbnVtYmVyIHwgbnVsbCB9PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBtZW1iZXJzIHdob3NlIHVzZXJuYW1lcyBvciBuaWNrbmFtZXMgc3RhcnQgd2l0aCBhIHByb3ZpZGVkIHN0cmluZy5cbiAgICpcbiAgXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBzZWFyY2ggaW4uXG4gICAqIEBwYXJhbSBxdWVyeSAtIFRoZSBzdHJpbmcgdG8gbWF0Y2ggdXNlcm5hbWVzIG9yIG5pY2tuYW1lcyBhZ2FpbnN0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBzZWFyY2hpbmcgdGhyb3VnaCB0aGUgbWVtYmVycy5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkTWVtYmVyfSBvYmplY3RzIGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNzZWFyY2gtZ3VpbGQtbWVtYmVyc31cbiAgICovXG4gIHNlYXJjaE1lbWJlcnM6IChndWlsZElkOiBCaWdTdHJpbmcsIHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PFNlYXJjaE1lbWJlcnMsICdxdWVyeSc+KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcj5bXT5cbiAgLyoqXG4gICAqIFVuYmFucyBhIHVzZXIgZnJvbSBhIGd1aWxkLlxuICAgKlxuICBcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIHVuYmFuIHRoZSB1c2VyIGluLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIHVuYmFuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQkFOX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIEJhbiBSZW1vdmVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNyZW1vdmUtZ3VpbGQtYmFufVxuICAgKi9cbiAgdW5iYW5NZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIFVucGluIGEgbWVzc2FnZSBpbiBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgd2hlcmUgdGhlIG1lc3NhZ2UgaXMgcGlubmVkLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIHVucGluLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUElOX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIFBpbnMgVXBkYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL21lc3NhZ2UjdW5waW4tbWVzc2FnZX1cbiAgICovXG4gIHVucGluTWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBHZXQgdGhlIGd1aWxkIG9uYm9hcmRpbmdcbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgZ3VpbGQgdG8gZ2V0IHRoZSBvbmJvYXJkaW5nIGZyb21cbiAgICovXG4gIGdldEd1aWxkT25ib2FyZGluZzogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPj5cbiAgLyoqXG4gICAqIE1vZGlmaWVzIHRoZSBvbmJvYXJkaW5nIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBndWlsZCB0byBlZGl0IHRoZSBvbmJvYXJkaW5nIGZyb21cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgYW5kIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBPbmJvYXJkaW5nIGVuZm9yY2VzIGNvbnN0cmFpbnRzIHdoZW4gZW5hYmxlZC4gVGhlc2UgY29uc3RyYWludHMgYXJlOlxuICAgKiAgLSBhdCBsZWFzdCA3IGRlZmF1bHQgY2hhbm5lbHNcbiAgICogIC0gYXQgbGVhc3QgNSBvZiB0aGUgNyBjaGFubmVscyBtdXN0IGFsbG93IHNlbmRpbmcgbWVzc2FnZXMgdG8gdGhlIFxcQGV2ZXJ5b25lIHJvbGVcbiAgICpcbiAgICogVGhlIGBtb2RlYCBmaWVsZCBtb2RpZmllcyB3aGF0IGlzIGNvbnNpZGVyZWQgd2hlbiBlbmZvcmNpbmcgdGhlc2UgY29uc3RyYWludHMuXG4gICAqL1xuICBlZGl0R3VpbGRPbmJvYXJkaW5nOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBFZGl0R3VpbGRPbmJvYXJkaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkT25ib2FyZGluZz4+XG4gIC8qKlxuICAgKiBNb2RpZmllcyB0aGUgaW5jaWRlbnQgYWN0aW9ucyBvZiB0aGUgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIGd1aWxkIHRvIGVkaXQgdGhlIGluY2lkZW50IGFjdGlvbnMgZnJvbVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgaW5jaWRlbnQgYWN0aW9uc1xuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICovXG4gIG1vZGlmeUd1aWxkSW5jaWRlbnRBY3Rpb25zOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkSW5jaWRlbnRzRGF0YT4+XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBlbnRpdGxlbWVudHMgZm9yIGEgZ2l2ZW4gYXBwLCBhY3RpdmUgYW5kIGV4cGlyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIGlkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBnZXQgdGhlIGVudGl0bGVtZW50c1xuICAgKiBAcGFyYW0ge0dldEVudGl0bGVtZW50c30gW29wdGlvbnNdIC0gVGhlIG9wdGlvbmFsIHF1ZXJ5IHBhcmFtcyBmb3IgdGhlIGVuZHBvaW50XG4gICAqL1xuICBsaXN0RW50aXRsZW1lbnRzOiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0RW50aXRsZW1lbnRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbnRpdGxlbWVudD5bXT5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZW50aXRsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIGlkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBnZXQgdGhlIGVudGl0bGVtZW50XG4gICAqIEBwYXJhbSBlbnRpdGxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbnRpdGxlbWVudCB0byBnZXRcbiAgICovXG4gIGdldEVudGl0bGVtZW50OiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBlbnRpdGxlbWVudElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVudGl0bGVtZW50Pj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZXN0IGVudGl0bGVtZW50IHRvIGEgZ2l2ZW4gU0tVIGZvciBhIGdpdmVuIGd1aWxkIG9yIHVzZXIuIERpc2NvcmQgd2lsbCBhY3QgYXMgdGhvdWdoIHRoYXQgdXNlciBvciBndWlsZCBoYXMgZW50aXRsZW1lbnQgdG8geW91ciBwcmVtaXVtIG9mZmVyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBpZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gY3JlYXRlIHRoZSBlbnRpdGxlbWVudFxuICAgKiBAcGFyYW0gYm9keSAtIFRoZSBvcHRpb25zIGZvciBuZXcgZW50aXRsZW1lbnRcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBlbmRwb2ludCByZXR1cm5zIGEgcGFydGlhbCBlbnRpdGxlbWVudCBvYmplY3QuXG4gICAqIEl0IHdpbGwgbm90IGNvbnRhaW4gc3Vic2NyaXB0aW9uX2lkLCBzdGFydHNfYXQsIG9yIGVuZHNfYXQsIGFzIGl0J3MgdmFsaWQgaW4gcGVycGV0dWl0eS5cbiAgICovXG4gIGNyZWF0ZVRlc3RFbnRpdGxlbWVudDogKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZywgYm9keTogQ3JlYXRlVGVzdEVudGl0bGVtZW50KSA9PiBQcm9taXNlPFBhcnRpYWw8Q2FtZWxpemU8RGlzY29yZEVudGl0bGVtZW50Pj4+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgY3VycmVudGx5LWFjdGl2ZSB0ZXN0IGVudGl0bGVtZW50LiBEaXNjb3JkIHdpbGwgYWN0IGFzIHRob3VnaCB0aGF0IHVzZXIgb3IgZ3VpbGQgbm8gbG9uZ2VyIGhhcyBlbnRpdGxlbWVudCB0byB5b3VyIHByZW1pdW0gb2ZmZXJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIGlkIG9mIHRoZSBhcHBsaWNhdGlvbiBmcm9tIHdoZXJlIGRlbGV0ZSB0aGUgZW50aXRsZW1lbnRcbiAgICogQHBhcmFtIGVudGl0bGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVudGl0bGVtZW50IHRvIGRlbGV0ZVxuICAgKi9cbiAgZGVsZXRlVGVzdEVudGl0bGVtZW50OiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBlbnRpdGxlbWVudElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEZvciBPbmUtVGltZSBQdXJjaGFzZSBjb25zdW1hYmxlIFNLVXMsIG1hcmtzIGEgZ2l2ZW4gZW50aXRsZW1lbnQgZm9yIHRoZSB1c2VyIGFzIGNvbnN1bWVkLiBUaGUgZW50aXRsZW1lbnQgd2lsbCBoYXZlIGBjb25zdW1lZDogdHJ1ZWAgd2hlbiB1c2luZyB7QGxpbmsgbGlzdEVudGl0bGVtZW50cyB8IExpc3QgRW50aXRsZW1lbnRzfVxuICAgKlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBpZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSBlbnRpdGxlbWVudFxuICAgKiBAcGFyYW0gZW50aXRsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZW50aXRsZW1lbnQgdG8gZ2V0XG4gICAqL1xuICBjb25zdW1lRW50aXRsZW1lbnQ6IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsIGVudGl0bGVtZW50SWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogUmV0dXJucyBhbGwgU0tVcyBmb3IgYSBnaXZlbiBhcHBsaWNhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBpZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSBTS1VzXG4gICAqL1xuICBsaXN0U2t1czogKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU2t1PltdPlxuICAvKipcbiAgICogUmV0dXJucyBhbGwgc3Vic2NyaXB0aW9ucyBjb250YWluaW5nIHRoZSBTS1UsIGZpbHRlcmVkIGJ5IHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBza3VJZCAtIFRoZSBpZCBvZiB0aGUgc2t1IG9mIGdldCB0aGUgc3Vic2NyaXB0aW9ucyBmb3JcbiAgICovXG4gIGxpc3RTdWJzY3JpcHRpb25zOiAoc2t1SWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IExpc3RTa3VTdWJzY3JpcHRpb25zT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3Vic2NyaXB0aW9uW10+PlxuICAvKipcbiAgICogR2V0IGEgc3Vic2NyaXB0aW9uIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIHNrdUlkIC0gVGhlIGlkIG9mIHRoZSBza3Ugb2YgZ2V0IHRoZSBzdWJzY3JpcHRpb25zIGZvclxuICAgKi9cbiAgZ2V0U3Vic2NyaXB0aW9uOiAoc2t1SWQ6IEJpZ1N0cmluZywgc3Vic2NyaXB0aW9uSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3Vic2NyaXB0aW9uPj5cbiAgLyoqXG4gICAqIFNlbmQgYSBzb3VuZGJvYXJkIHNvdW5kIHRvIGEgdm9pY2UgY2hhbm5lbCB0aGUgdXNlciBpcyBjb25uZWN0ZWQgdG8uXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgaWQgb2YgdGhlIHZvaWNlIGNoYW5uZWxcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfVm9pY2UgQ2hhbm5lbCBFZmZlY3QgU2VuZF8gR2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBTUEVBS2AgYW5kIGBVU0VfU09VTkRCT0FSRGAgcGVybWlzc2lvbnMsIGFuZCBhbHNvIHRoZSBgVVNFX0VYVEVSTkFMX1NPVU5EU2AgcGVybWlzc2lvbiBpZiB0aGUgc291bmQgaXMgZnJvbSBhIGRpZmZlcmVudCBzZXJ2ZXIuXG4gICAqIEFkZGl0aW9uYWxseSwgcmVxdWlyZXMgdGhlIHVzZXIgdG8gYmUgY29ubmVjdGVkIHRvIHRoZSB2b2ljZSBjaGFubmVsLCBoYXZpbmcgYSB2b2ljZSBzdGF0ZSB3aXRob3V0IGBkZWFmYCwgYHNlbGZfZGVhZmAsIGBtdXRlYCwgb3IgYHN1cHByZXNzYCBlbmFibGVkLlxuICAgKi9cbiAgc2VuZFNvdW5kYm9hcmRTb3VuZDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBTZW5kU291bmRib2FyZFNvdW5kKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBSZXR1cm5zIGFuIGFycmF5IG9mIHNvdW5kYm9hcmQgc291bmQgb2JqZWN0cyB0aGF0IGNhbiBiZSB1c2VkIGJ5IGFsbCB1c2Vycy4gKi9cbiAgbGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTb3VuZGJvYXJkU291bmQ+W10+XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgZ3VpbGQncyBzb3VuZGJvYXJkIHNvdW5kcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgZ3VpbGQgdG8gZ2V0IHRoZSBzb3VuZHMgZnJvbVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJbmNsdWRlcyBgdXNlcmAgZmllbGRzIGlmIHRoZSBib3QgaGFzIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBvciBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKi9cbiAgbGlzdEd1aWxkU291bmRib2FyZFNvdW5kczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx7IGl0ZW1zOiBDYW1lbGl6ZTxEaXNjb3JkU291bmRib2FyZFNvdW5kPltdIH0+XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc291bmRib2FyZCBzb3VuZCBvYmplY3QgZm9yIHRoZSBnaXZlbiBzb3VuZCBpZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgZ3VpbGQgdG8gZ2V0IHRoZSBzb3VuZHMgZnJvbVxuICAgKiBAcGFyYW0gc291bmRJZCAtIFRoZSBzb3VuZCBpZFxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJbmNsdWRlcyBgdXNlcmAgZmllbGRzIGlmIHRoZSBib3QgaGFzIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBvciBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKi9cbiAgZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQ6IChndWlsZElkOiBCaWdTdHJpbmcsIHNvdW5kSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU291bmRib2FyZFNvdW5kPj5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBzb3VuZGJvYXJkIHNvdW5kIGZvciB0aGUgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgc291bmRzIGluXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gY3JlYXRlIHRoZSBzb3VuZFxuICAgKiBAcGFyYW0gcmVhc29uIC0gVGhlIGF1ZGl0IGxvZyByZWFzb25cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfR3VpbGQgU291bmRib2FyZCBTb3VuZCBDcmVhdGVfIEdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKi9cbiAgY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQ6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4+XG4gIC8qKlxuICAgKiBNb2RpZnkgdGhlIGdpdmVuIHNvdW5kYm9hcmQgc291bmQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgc291bmRzIGluXG4gICAqIEBwYXJhbSBzb3VuZElkIC0gVGhlIHNvdW5kIGlkIHRvIHVwZGF0ZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIHVwZGF0ZSB0aGUgc291bmRcbiAgICogQHBhcmFtIHJlYXNvbiAtIFRoZSBhdWRpdCBsb2cgcmVhc29uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX0d1aWxkIFNvdW5kYm9hcmQgU291bmQgVXBkYXRlXyBHYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBGb3Igc291bmRzIGNyZWF0ZWQgYnkgdGhlIGN1cnJlbnQgdXNlciwgcmVxdWlyZXMgZWl0aGVyIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBvciBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKiBGb3Igb3RoZXIgc291bmRzLCByZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICovXG4gIG1vZGlmeUd1aWxkU291bmRib2FyZFNvdW5kOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIHNvdW5kSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBNb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZCxcbiAgICByZWFzb24/OiBzdHJpbmcsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU291bmRib2FyZFNvdW5kPj5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgZ2l2ZW4gc291bmRib2FyZCBzb3VuZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgZ3VpbGQgdG8gY3JlYXRlIHRoZSBzb3VuZHMgaW5cbiAgICogQHBhcmFtIHNvdW5kSWQgLSBUaGUgc291bmQgaWQgdG8gZGVsZXRlXG4gICAqIEBwYXJhbSByZWFzb24gLSBUaGUgYXVkaXQgbG9nIHJlYXNvblxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9HdWlsZCBTb3VuZGJvYXJkIFNvdW5kIERlbGV0ZV8gR2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogRm9yIHNvdW5kcyBjcmVhdGVkIGJ5IHRoZSBjdXJyZW50IHVzZXIsIHJlcXVpcmVzIGVpdGhlciB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRm9yIG90aGVyIHNvdW5kcywgcmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqL1xuICBkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgc291bmRJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIGFwcGxpY2F0aW9uIHJvbGUgY29ubmVjdGlvbiBtZXRhZGF0YSBvYmplY3RzIGZvciB0aGUgZ2l2ZW4gYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIGFwcGxpY2F0aW9uIHRvIGdldCB0aGUgcm9sZSBjb25uZWN0aW9ucyBmcm9tXG4gICAqIEByZXR1cm5zIEEgbGlzdCBvZiBhcHBsaWNhdGlvbiByb2xlIGNvbm5lY3Rpb24gbWV0YWRhdGEgb2JqZWN0c1xuICAgKi9cbiAgbGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzOiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGE+W10+XG4gIC8qKlxuICAgKiBVcGRhdGVzIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBhcHBsaWNhdGlvbiByb2xlIGNvbm5lY3Rpb24gbWV0YWRhdGEgb2JqZWN0cyBmb3IgdGhlIGdpdmVuIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBhcHBsaWNhdGlvbiB0byBnZXQgdGhlIHJvbGUgY29ubmVjdGlvbnMgZnJvbVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIHVwZGF0ZSB0aGUgcm9sZSBjb25uZWN0aW9uc1xuICAgKiBAcmV0dXJucyBBIGxpc3Qgb2YgYXBwbGljYXRpb24gcm9sZSBjb25uZWN0aW9uIG1ldGFkYXRhIG9iamVjdHNcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogQW4gYXBwbGljYXRpb24gY2FuIGhhdmUgYSBtYXhpbXVtIG9mIDUgbWV0YWRhdGEgcmVjb3Jkcy5cbiAgICovXG4gIHVwZGF0ZUFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzOiAoXG4gICAgYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM6IENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGE+W10sXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhPltdPlxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBsb2JieSwgYWRkaW5nIGFueSBvZiB0aGUgc3BlY2lmaWVkIG1lbWJlcnMgdG8gaXQsIGlmIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIGNyZWF0ZSB0aGUgbG9iYnlcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgbG9iYnlcbiAgICovXG4gIGNyZWF0ZUxvYmJ5OiAob3B0aW9uczogQ3JlYXRlTG9iYnkpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZExvYmJ5Pj5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsb2JieSBvYmplY3QgZm9yIHRoZSBzcGVjaWZpZWQgbG9iYnkgaWQsIGlmIGl0IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIGxvYmJ5SWQgLSBUaGUgSUQgb2YgdGhlIGxvYmJ5IHRvIGdldFxuICAgKiBAcmV0dXJucyBUaGUgbG9iYnkgb2JqZWN0XG4gICAqL1xuICBnZXRMb2JieTogKGxvYmJ5SWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTG9iYnk+PlxuICAvKipcbiAgICogTW9kaWZpZXMgdGhlIHNwZWNpZmllZCBsb2JieSB3aXRoIG5ldyB2YWx1ZXMsIGlmIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gbG9iYnlJZCAtIFRoZSBJRCBvZiB0aGUgbG9iYnkgdG8gbW9kaWZ5XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBsb2JieVxuICAgKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgbG9iYnlcbiAgICovXG4gIG1vZGlmeUxvYmJ5OiAobG9iYnlJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlMb2JieSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTG9iYnk+PlxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgc3BlY2lmaWVkIGxvYmJ5IGlmIGl0IGV4aXN0cy5cbiAgICpcbiAgICogSXQgaXMgc2FmZSB0byBjYWxsIGV2ZW4gaWYgdGhlIGxvYmJ5IGlzIGFscmVhZHkgZGVsZXRlZCBhcyB3ZWxsLlxuICAgKlxuICAgKiBAcGFyYW0gbG9iYnlJZCAtIFRoZSBJRCBvZiB0aGUgbG9iYnkgdG8gZGVsZXRlXG4gICAqIEByZXR1cm5zIE5vdGhpbmdcbiAgICovXG4gIGRlbGV0ZUxvYmJ5OiAobG9iYnlJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBBZGRzIHRoZSBwcm92aWRlZCB1c2VyIHRvIHRoZSBzcGVjaWZpZWQgbG9iYnkuIElmIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGlzIGFscmVhZHkgYSBtZW1iZXIgb2YgdGhlIGxvYmJ5IHdpbGwgdXBkYXRlIGZpZWxkcyBzdWNoIGFzIG1ldGFkYXRhIG9uIHRoYXQgdXNlciBpbnN0ZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gbG9iYnlJZCAtIFRoZSBJRCBvZiB0aGUgbG9iYnkgdG8gYWRkIHRoZSB1c2VyIHRvXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gYWRkIHRvIHRoZSBsb2JieVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIGFkZCB0aGUgdXNlciB0byB0aGUgbG9iYnlcbiAgICogQHJldHVybnMgVGhlIGxvYmJ5IG1lbWJlciBvYmplY3RcbiAgICovXG4gIGFkZE1lbWJlclRvTG9iYnk6IChsb2JieUlkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBBZGRMb2JieU1lbWJlcikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTG9iYnlNZW1iZXI+PlxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgcHJvdmlkZWQgdXNlciBmcm9tIHRoZSBzcGVjaWZpZWQgbG9iYnkuIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgdGhlIHVzZXIgaXMgbm8gbG9uZ2VyIGEgbWVtYmVyIG9mIHRoZSBsb2JieSwgYnV0IHdpbGwgZmFpbCBpZiB0aGUgbG9iYnkgZG9lcyBub3QgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSBsb2JieUlkIC0gVGhlIElEIG9mIHRoZSBsb2JieSB0byByZW1vdmUgdGhlIHVzZXIgZnJvbVxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIHJlbW92ZSBmcm9tIHRoZSBsb2JieVxuICAgKiBAcmV0dXJucyBOb3RoaW5nXG4gICAqL1xuICByZW1vdmVNZW1iZXJGcm9tTG9iYnk6IChsb2JieUlkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBjdXJyZW50IHVzZXIgZnJvbSB0aGUgc3BlY2lmaWVkIGxvYmJ5LiBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBldmVuIGlmIHRoZSB1c2VyIGlzIG5vIGxvbmdlciBhIG1lbWJlciBvZiB0aGUgbG9iYnksIGJ1dCB3aWxsIGZhaWwgaWYgdGhlIGxvYmJ5IGRvZXMgbm90IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0gbG9iYnlJZCAtIFRoZSBJRCBvZiB0aGUgbG9iYnkgdG8gcmVtb3ZlIHRoZSB1c2VyIGZyb21cbiAgICogQHBhcmFtIGJlYXJlclRva2VuIC0gVGhlIGFjY2VzcyB0b2tlbiBvZiB0aGUgdXNlclxuICAgKiBAcmV0dXJucyBOb3RoaW5nXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgcmVxdWlyZXMgYSBiZWFyZXIgdG9rZW4gZm9yIGF1dGhvcml6YXRpb25cbiAgICovXG4gIGxlYXZlTG9iYnk6IChsb2JieUlkOiBCaWdTdHJpbmcsIGJlYXJlclRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIExpbmtzIGFuIGV4aXN0aW5nIHRleHQgY2hhbm5lbCB0byBhIGxvYmJ5LlxuICAgKlxuICAgKiBAcGFyYW0gbG9iYnlJZCAtIFRoZSBJRCBvZiB0aGUgbG9iYnkgdG8gbGluayB0aGUgY2hhbm5lbCB0b1xuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBUaGUgYWNjZXNzIHRva2VuIG9mIHRoZSB1c2VyXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gbGluayB0aGUgY2hhbm5lbCB0byB0aGUgbG9iYnlcbiAgICogQHJldHVybnMgVGhlIHVwZGF0ZWQgbG9iYnkgb2JqZWN0XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVzZXMgYmVhcmVyIHRva2VuIGZvciBhdXRob3JpemF0aW9uIGFuZCB0aGUgdXNlciBtdXN0IGJlIGEgbG9iYnkgbWVtYmVyIHdpdGggdGhlIENhbkxpbmtMb2JieSBsb2JieSBtZW1iZXIgZmxhZy5cbiAgICovXG4gIGxpbmtDaGFubmVsVG9Mb2JieTogKGxvYmJ5SWQ6IEJpZ1N0cmluZywgYmVhcmVyVG9rZW46IHN0cmluZywgb3B0aW9uczogTGlua0NoYW5uZWxUb0xvYmJ5KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRMb2JieT4+XG4gIC8qKlxuICAgKiBVbmxpbmtzIGFueSBjdXJyZW50bHkgbGlua2VkIGNoYW5uZWxzIGZyb20gdGhlIHNwZWNpZmllZCBsb2JieS5cbiAgICpcbiAgICogQHBhcmFtIGxvYmJ5SWQgLSBUaGUgSUQgb2YgdGhlIGxvYmJ5IHRvIHVubGluayB0aGUgY2hhbm5lbCBmcm9tXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gb2YgdGhlIHVzZXJcbiAgICogQHJldHVybnMgVGhlIHVwZGF0ZWQgbG9iYnkgb2JqZWN0XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVzZXMgYmVhcmVyIHRva2VuIGZvciBhdXRob3JpemF0aW9uIGFuZCB0aGUgdXNlciBtdXN0IGJlIGEgbG9iYnkgbWVtYmVyIHdpdGggdGhlIENhbkxpbmtMb2JieSBsb2JieSBtZW1iZXIgZmxhZy5cbiAgICovXG4gIHVubGlua0NoYW5uZWxUb0xvYmJ5OiAobG9iYnlJZDogQmlnU3RyaW5nLCBiZWFyZXJUb2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRMb2JieT4+XG59XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RNZXRob2RzID0gJ0dFVCcgfCAnUE9TVCcgfCAnREVMRVRFJyB8ICdQQVRDSCcgfCAnUFVUJ1xuZXhwb3J0IHR5cGUgQXBpVmVyc2lvbnMgPSA5IHwgMTBcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMge1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICBib2R5PzogYW55XG4gIHVuYXV0aG9yaXplZD86IGJvb2xlYW5cbiAgcmVhc29uPzogc3RyaW5nXG4gIGZpbGVzPzogRmlsZUNvbnRlbnRbXVxufVxuXG5leHBvcnQgdHlwZSBNYWtlUmVxdWVzdE9wdGlvbnMgPSBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ21ldGhvZCc+ICYgUGljazxTZW5kUmVxdWVzdE9wdGlvbnMsICdydW5UaHJvdWdoUXVldWUnPlxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RCb2R5IHtcbiAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICBib2R5Pzogc3RyaW5nIHwgRm9ybURhdGFcbiAgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRSZXF1ZXN0T3B0aW9ucyB7XG4gIC8qKiBUaGUgcm91dGUgdG8gc2VuZCB0aGUgcmVxdWVzdCB0by4gKi9cbiAgcm91dGU6IHN0cmluZ1xuICAvKiogVGhlIG1ldGhvZCB0byB1c2UgZm9yIHNlbmRpbmcgdGhlIHJlcXVlc3QuICovXG4gIG1ldGhvZDogUmVxdWVzdE1ldGhvZHNcbiAgLyoqIFRoZSBhbW91bnQgb2YgdGltZXMgdGhpcyByZXF1ZXN0IGhhcyBiZWVuIHJldHJpZWQuICovXG4gIHJldHJ5Q291bnQ6IG51bWJlclxuICAvKiogSGFuZGxlciB0byByZXRyeSBhIHJlcXVlc3Qgc2hvdWxkIGl0IGJlIHJhdGUgbGltaXRlZC4gKi9cbiAgcmV0cnlSZXF1ZXN0PzogKG9wdGlvbnM6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogUmVzb2x2ZSBoYW5kbGVyIHdoZW4gYSByZXF1ZXN0IHN1Y2NlZWRzLiAqL1xuICByZXNvbHZlOiAodmFsdWU6IFJlc3RSZXF1ZXN0UmVzcG9uc2UpID0+IHZvaWRcbiAgLyoqIFJlamVjdCBoYW5kbGVyIHdoZW4gYSByZXF1ZXN0IGZhaWxzLiAqL1xuICByZWplY3Q6ICh2YWx1ZTogUmVzdFJlcXVlc3RSZWplY3Rpb24pID0+IHZvaWRcbiAgLyoqIElmIHRoaXMgcmVxdWVzdCBoYXMgYSBidWNrZXQgaWQgd2hpY2ggaXQgZmFsbHMgdW5kZXIgZm9yIHJhdGUgbGltaXQgKi9cbiAgYnVja2V0SWQ/OiBzdHJpbmdcbiAgLyoqIEFkZGl0aW9uYWwgcmVxdWVzdCBvcHRpb25zLCB1c2VkIGZvciB0aGluZ3MgbGlrZSBvdmVycmlkaW5nIGF1dGhvcml6YXRpb24gaGVhZGVyLiAqL1xuICByZXF1ZXN0Qm9keU9wdGlvbnM/OiBDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnNcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlcXVlc3Qgc2hvdWxkIGJlIHJ1biB0aHJvdWdoIHRoZSBxdWV1ZS5cbiAgICogVXNlZnVsIGZvciByb3V0ZXMgd2hpY2ggZG8gbm90IGhhdmUgYW55IHJhdGUgbGltaXRzLlxuICAgKi9cbiAgcnVuVGhyb3VnaFF1ZXVlPzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RSYXRlTGltaXRlZFBhdGgge1xuICB1cmw6IHN0cmluZ1xuICByZXNldFRpbWVzdGFtcDogbnVtYmVyXG4gIGJ1Y2tldElkPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdFJlcXVlc3RSZXNwb25zZSB7XG4gIG9rOiBib29sZWFuXG4gIHN0YXR1czogbnVtYmVyXG4gIC8qKiBUaGUgcmV0dXJuZWQgYm9keSBwYXJzZWQgaWYgaXQgd2FzIEpTT04sIG90aGVyd2lzZSBpdCB3aWxsIGJlIHRoZSByYXcgYm9keSBhcyBhIHN0cmluZyAqL1xuICBib2R5Pzogc3RyaW5nIHwgb2JqZWN0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdFJlcXVlc3RSZWplY3Rpb24ge1xuICBvazogYm9vbGVhblxuICBzdGF0dXM6IG51bWJlclxuICAvKiogVGhlIEhUVFAgMS4xIHN0YXR1cyBjb2RlIHRleHQgKi9cbiAgc3RhdHVzVGV4dD86IHN0cmluZ1xuICAvKiogVGhlIHJldHVybmVkIGJvZHkgcGFyc2VkIGlmIGl0IHdhcyBKU09OLCBvdGhlcndpc2UgaXQgd2lsbCBiZSB0aGUgcmF3IGJvZHkgYXMgYSBzdHJpbmcgKi9cbiAgYm9keT86IHN0cmluZyB8IG9iamVjdFxuICBlcnJvcj86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RNYW5hZ2VyRXZlbnRzIHtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhIHJlcXVlc3QgaXMgbWFkZSB0byB0aGUgQVBJLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYm9keSB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgQVBJIGlzIGF2YWlsYWJsZSBpbiB0aGUgYGV4dHJhYCBwYXJhbWV0ZXIuIERvIG5vdCBjb25zdW1lIHRoZSBib2R5IGluIHRoZSBgUmVxdWVzdGAgb2JqZWN0IGFuZCB1c2UgdGhlIG9uZSBpbiB0aGUgYGV4dHJhYCBwYXJhbWV0ZXIgaW5zdGVhZC5cbiAgICovXG4gIHJlcXVlc3Q6IChyZXF1ZXN0OiBSZXF1ZXN0LCBleHRyYTogeyBib2R5OiBhbnkgfSkgPT4gdm9pZFxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgQVBJLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIGlzIGZpcmVkIGZvciBib3RoIHN1Y2Nlc3NmdWwgYW5kIGZhaWxlZCByZXF1ZXN0cywgeW91IHNob3VsZCBjaGVjayB0aGUgUmVzcG9uc2Ugb2JqZWN0IHRvIGRldGVybWluZSBpZiB0aGUgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bCBvciBub3QuXG4gICAqXG4gICAqIEJvdGggdGhlIHJlcXVlc3QgYW5kIHRoZSByZXNwb25zZSBib2R5IGFyZSBhdmFpbGFibGUgaW4gdGhlIGBleHRyYWAgcGFyYW1ldGVyLiBEbyBub3QgY29uc3VtZSB0aGUgYm9keSBpbiB0aGUgYFJlcXVlc3RgIG9yIGBSZXNwb25zZWAgb2JqZWN0IGFuZCB1c2UgdGhlIG9uZSBpbiB0aGUgYGV4dHJhYCBwYXJhbWV0ZXIgaW5zdGVhZC5cbiAgICovXG4gIHJlc3BvbnNlOiAocmVxdWVzdDogUmVxdWVzdCwgcmVzcG9uc2U6IFJlc3BvbnNlLCBleHRyYTogeyByZXF1ZXN0Qm9keTogYW55OyByZXNwb25zZUJvZHk6IHN0cmluZyB8IG9iamVjdCB9KSA9PiB2b2lkXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYSByZXF1ZXN0IGVycm9ycyBkdWUgdG8gZmV0Y2ggZXJyb3IuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBib2R5IHRoYXQgd2FzIHNlbnQgdG8gdGhlIEFQSSBpcyBhdmFpbGFibGUgaW4gdGhlIGBleHRyYWAgcGFyYW1ldGVyLlxuICAgKi9cbiAgcmVxdWVzdEVycm9yOiAocmVxdWVzdDogUmVxdWVzdCwgZXJyb3I6IGFueSwgZXh0cmE6IHsgYm9keTogYW55IH0pID0+IHZvaWRcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE2c0dBLFdBd0JDIn0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEFkZERtUmVjaXBpZW50T3B0aW9ucyxcbiAgQWRkR3VpbGRNZW1iZXJPcHRpb25zLFxuICBBZGRMb2JieU1lbWJlcixcbiAgQXRMZWFzdE9uZSxcbiAgQmVnaW5HdWlsZFBydW5lLFxuICBCaWdTdHJpbmcsXG4gIENhbWVsaXplLFxuICBDaGFubmVsVHlwZXMsXG4gIENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgQ3JlYXRlQXBwbGljYXRpb25FbW9qaSxcbiAgQ3JlYXRlQXV0b01vZGVyYXRpb25SdWxlT3B0aW9ucyxcbiAgQ3JlYXRlQ2hhbm5lbEludml0ZSxcbiAgQ3JlYXRlRm9ydW1Qb3N0V2l0aE1lc3NhZ2UsXG4gIENyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZE9wdGlvbnMsXG4gIENyZWF0ZUdyb3VwRG1PcHRpb25zLFxuICBDcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZE9wdGlvbnMsXG4gIENyZWF0ZUd1aWxkQmFuLFxuICBDcmVhdGVHdWlsZEJ1bGtCYW4sXG4gIENyZWF0ZUd1aWxkQ2hhbm5lbCxcbiAgQ3JlYXRlR3VpbGRFbW9qaSxcbiAgQ3JlYXRlR3VpbGRSb2xlLFxuICBDcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZCxcbiAgQ3JlYXRlR3VpbGRTdGlja2VyT3B0aW9ucyxcbiAgQ3JlYXRlTG9iYnksXG4gIENyZWF0ZU1lc3NhZ2VPcHRpb25zLFxuICBDcmVhdGVTY2hlZHVsZWRFdmVudCxcbiAgQ3JlYXRlU3RhZ2VJbnN0YW5jZSxcbiAgQ3JlYXRlVGVtcGxhdGUsXG4gIENyZWF0ZVRlc3RFbnRpdGxlbWVudCxcbiAgQ3JlYXRlV2ViaG9vayxcbiAgRGVsZXRlV2ViaG9va01lc3NhZ2VPcHRpb25zLFxuICBEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZSxcbiAgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIERpc2NvcmRBcHBsaWNhdGlvbixcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkQXBwbGljYXRpb25JbnRlZ3JhdGlvblR5cGUsXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uLFxuICBEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRCdWxrQmFuLFxuICBEaXNjb3JkQ2hhbm5lbCxcbiAgRGlzY29yZENvbm5lY3Rpb24sXG4gIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgRGlzY29yZEVtb2ppLFxuICBEaXNjb3JkRW50aXRsZW1lbnQsXG4gIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICBEaXNjb3JkR2V0Q2hhbm5lbFBpbnMsXG4gIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICBEaXNjb3JkR3VpbGQsXG4gIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICBEaXNjb3JkR3VpbGRQcmV2aWV3LFxuICBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICBEaXNjb3JkSW5jaWRlbnRzRGF0YSxcbiAgRGlzY29yZEludGVncmF0aW9uLFxuICBEaXNjb3JkSW50ZXJhY3Rpb24sXG4gIERpc2NvcmRJbnRlcmFjdGlvbkNhbGxiYWNrUmVzcG9uc2UsXG4gIERpc2NvcmRJbnZpdGUsXG4gIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgRGlzY29yZExpc3RBY3RpdmVUaHJlYWRzLFxuICBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgRGlzY29yZExvYmJ5LFxuICBEaXNjb3JkTG9iYnlNZW1iZXIsXG4gIERpc2NvcmRNZW1iZXIsXG4gIERpc2NvcmRNZW1iZXJXaXRoVXNlcixcbiAgRGlzY29yZE1lc3NhZ2UsXG4gIERpc2NvcmRQcnVuZWRDb3VudCxcbiAgRGlzY29yZFJvbGUsXG4gIERpc2NvcmRTY2hlZHVsZWRFdmVudCxcbiAgRGlzY29yZFNrdSxcbiAgRGlzY29yZFNvdW5kYm9hcmRTb3VuZCxcbiAgRGlzY29yZFN0YWdlSW5zdGFuY2UsXG4gIERpc2NvcmRTdGlja2VyLFxuICBEaXNjb3JkU3RpY2tlclBhY2ssXG4gIERpc2NvcmRTdWJzY3JpcHRpb24sXG4gIERpc2NvcmRUZW1wbGF0ZSxcbiAgRGlzY29yZFRocmVhZE1lbWJlcixcbiAgRGlzY29yZFRva2VuRXhjaGFuZ2UsXG4gIERpc2NvcmRUb2tlblJldm9jYXRpb24sXG4gIERpc2NvcmRVc2VyLFxuICBEaXNjb3JkVmFuaXR5VXJsLFxuICBEaXNjb3JkVm9pY2VSZWdpb24sXG4gIERpc2NvcmRWb2ljZVN0YXRlLFxuICBEaXNjb3JkV2ViaG9vayxcbiAgRGlzY29yZFdlbGNvbWVTY3JlZW4sXG4gIEVkaXRBcHBsaWNhdGlvbixcbiAgRWRpdEF1dG9Nb2RlcmF0aW9uUnVsZU9wdGlvbnMsXG4gIEVkaXRCb3RNZW1iZXJPcHRpb25zLFxuICBFZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXNPcHRpb25zLFxuICBFZGl0R3VpbGRPbmJvYXJkaW5nLFxuICBFZGl0R3VpbGRSb2xlLFxuICBFZGl0R3VpbGRTdGlja2VyT3B0aW9ucyxcbiAgRWRpdE1lc3NhZ2UsXG4gIEVkaXRPd25Wb2ljZVN0YXRlLFxuICBFZGl0U2NoZWR1bGVkRXZlbnQsXG4gIEVkaXRVc2VyVm9pY2VTdGF0ZSxcbiAgRWRpdFdlYmhvb2tNZXNzYWdlT3B0aW9ucyxcbiAgRXhlY3V0ZVdlYmhvb2ssXG4gIEZpbGVDb250ZW50LFxuICBHZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uT3B0aW9ucyxcbiAgR2V0QmFucyxcbiAgR2V0Q2hhbm5lbFBpbnNPcHRpb25zLFxuICBHZXRFbnRpdGxlbWVudHMsXG4gIEdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHNPcHRpb25zLFxuICBHZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHNPcHRpb25zLFxuICBHZXRHdWlsZEF1ZGl0TG9nLFxuICBHZXRHdWlsZFBydW5lQ291bnRRdWVyeSxcbiAgR2V0SW52aXRlLFxuICBHZXRNZXNzYWdlc09wdGlvbnMsXG4gIEdldFBvbGxBbnN3ZXJWb3RlcyxcbiAgR2V0UmVhY3Rpb25zLFxuICBHZXRTY2hlZHVsZWRFdmVudHMsXG4gIEdldFNjaGVkdWxlZEV2ZW50VXNlcnMsXG4gIEdldFRocmVhZE1lbWJlcixcbiAgR2V0VXNlckd1aWxkcyxcbiAgR2V0V2ViaG9va01lc3NhZ2VPcHRpb25zLFxuICBHdWlsZEZlYXR1cmVzLFxuICBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSxcbiAgSW50ZXJhY3Rpb25DYWxsYmFja09wdGlvbnMsXG4gIEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIExpbmtDaGFubmVsVG9Mb2JieSxcbiAgTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgTGlzdEd1aWxkTWVtYmVycyxcbiAgTGlzdFNrdVN1YnNjcmlwdGlvbnNPcHRpb25zLFxuICBMaXN0VGhyZWFkTWVtYmVycyxcbiAgTW9kaWZ5QXBwbGljYXRpb25FbW9qaSxcbiAgTW9kaWZ5Q2hhbm5lbCxcbiAgTW9kaWZ5R3VpbGQsXG4gIE1vZGlmeUd1aWxkQ2hhbm5lbFBvc2l0aW9ucyxcbiAgTW9kaWZ5R3VpbGRFbW9qaSxcbiAgTW9kaWZ5R3VpbGRJbmNpZGVudEFjdGlvbnMsXG4gIE1vZGlmeUd1aWxkTWVtYmVyLFxuICBNb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZCxcbiAgTW9kaWZ5R3VpbGRUZW1wbGF0ZSxcbiAgTW9kaWZ5R3VpbGRXZWxjb21lU2NyZWVuLFxuICBNb2RpZnlMb2JieSxcbiAgTW9kaWZ5Um9sZVBvc2l0aW9ucyxcbiAgTW9kaWZ5V2ViaG9vayxcbiAgU2NoZWR1bGVkRXZlbnRFbnRpdHlUeXBlLFxuICBTY2hlZHVsZWRFdmVudFN0YXR1cyxcbiAgU2VhcmNoTWVtYmVycyxcbiAgU2VuZFNvdW5kYm9hcmRTb3VuZCxcbiAgU3RhcnRUaHJlYWRXaXRoTWVzc2FnZSxcbiAgU3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSxcbiAgVXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kT3B0aW9ucyxcbiAgVXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRPcHRpb25zLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB0eXBlIHsgbG9nZ2VyIH0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IEludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuaW1wb3J0IHR5cGUgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5pbXBvcnQgdHlwZSB7IFJlc3RSb3V0ZXMgfSBmcm9tICcuL3R5cGluZ3Mvcm91dGVzLmpzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucyB7XG4gIC8qKiBUaGUgYm90IHRva2VuIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBtYWtlIHJlcXVlc3RzLiAqL1xuICB0b2tlbjogc3RyaW5nXG4gIC8qKlxuICAgKiBGb3Igb2xkIGJvdHMgdGhhdCBoYXZlIGEgZGlmZmVyZW50IGJvdCBpZCBhbmQgYXBwbGljYXRpb24gaWQuXG4gICAqIEBkZWZhdWx0IGJvdCBpZCBmcm9tIHRva2VuXG4gICAqL1xuICBhcHBsaWNhdGlvbklkPzogQmlnU3RyaW5nXG4gIC8qKiBDb25maWd1cmF0aW9uIHdoZW4gdXNpbmcgYSBwcm94eS4gKi9cbiAgcHJveHk/OiB7XG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgdXJsIHRvIGNvbm5lY3QgdG8uIElmIHlvdSBjcmVhdGUgYSBwcm94eSByZXN0LCB0aGF0IHVybCB3b3VsZCBnbyBoZXJlLlxuICAgICAqIElUIFNIT1VMRCBOT1QgRU5EIFdJVEggQSAvXG4gICAgICogQGRlZmF1bHQgaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGlcbiAgICAgKi9cbiAgICBiYXNlVXJsOiBzdHJpbmdcbiAgICAvKiogVGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIHZhbHVlIHRvIGF0dGFjaCB3aGVuIHNlbmRpbmcgcmVxdWVzdHMgdG8gdGhlIHByb3h5LiAqL1xuICAgIGF1dGhvcml6YXRpb24/OiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgYXV0aG9yaXphdGlvbiBoZWFkZXIgbmFtZSB0byB1c2Ugd2hlbiBzZW5kaW5nIHJlcXVlc3RzIHRvIHRoZSBwcm94eVxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiB0aGUgaGVhZGVyIG5hbWUgaXMgc2V0IHRvIGBhdXRob3JpemF0aW9uYCwgaXQgd2lsbCBvdmVycmlkZSBhbnkgYXV0aG9yaXphdGlvbiB0aGF0IGlzIGdpdmVuIGV2ZW4gaWZcbiAgICAgKiB0aGUgcmVxdWVzdHMgdXNlcyBPQXV0aDIgQmVhcmVyIHRva2VucyAvIEJhc2ljIHRva2Vuc1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJhdXRob3JpemF0aW9uXCIgLy8gRm9yIGNvbXBhdGliaWxpdHkgcHVycG9zZXNcbiAgICAgKi9cbiAgICBhdXRob3JpemF0aW9uSGVhZGVyPzogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVuZHBvaW50IHRvIHVzZSBpbiB0aGUgcmVzdCBwcm94eSB0byB1cGRhdGUgdGhlIGJlYXJlciB0b2tlbnNcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogU2hvdWxkIG5vdCBpbmNsdWRlIGEgYC9gIGluIHRoZSBzdGFydFxuICAgICAqXG4gICAgICogVGhpcyB2YWx1ZSBpcyBhY3R1YWxseSByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byB1c2UgYHVwZGF0ZVRva2VuUXVldWVzYFxuICAgICAqL1xuICAgIHVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQ/OiBzdHJpbmdcbiAgfVxuICAvKipcbiAgICogVGhlIGFwaSB2ZXJzaW9ucyB3aGljaCBjYW4gYmUgdXNlZCB0byBtYWtlIHJlcXVlc3RzLlxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgdmVyc2lvbj86IEFwaVZlcnNpb25zXG4gIC8qKlxuICAgKiBUaGUgbG9nZ2VyIHRoYXQgdGhlIHJlc3QgbWFuYWdlciB3aWxsIHVzZVxuICAgKiBAZGVmYXVsdCBsb2dnZXIgLy8gVGhlIGxvZ2dlciBleHBvcnRlZCBieSBgQGRpc2NvcmRlbm8vdXRpbHNgXG4gICAqL1xuICBsb2dnZXI/OiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz5cbiAgLyoqIEV2ZW50cyBmb3IgdGhlIHJlc3QgbWFuYWdlciAqL1xuICBldmVudHM/OiBQYXJ0aWFsPFJlc3RNYW5hZ2VyRXZlbnRzPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RNYW5hZ2VyIHtcbiAgLyoqIFRoZSBib3QgdG9rZW4gd2hpY2ggd2lsbCBiZSB1c2VkIHRvIG1ha2UgcmVxdWVzdHMuICovXG4gIHRva2VuOiBzdHJpbmdcbiAgLyoqIFRoZSBhcHBsaWNhdGlvbiBpZC4gTm9ybWFsbHkgdGhpcyBpcyBub3QgcmVxdWlyZWQgZm9yIHJlY2VudCBib3RzIGJ1dCBvbGQgYm90J3MgYXBwbGljYXRpb24gaWQgaXMgc29tZXRpbWVzIGRpZmZlcmVudCBmcm9tIHRoZSBib3QgaWQgc28gaXQgaXMgcmVxdWlyZWQgZm9yIHRob3NlIGJvdHMuICovXG4gIGFwcGxpY2F0aW9uSWQ6IGJpZ2ludFxuICAvKiogVGhlIGFwaSB2ZXJzaW9uIHRvIHVzZSB3aGVuIG1ha2luZyByZXF1ZXN0cy4gT25seSB0aGUgbGF0ZXN0IHN1cHBvcnRlZCB2ZXJzaW9uIHdpbGwgYmUgdGVzdGVkLiAqL1xuICB2ZXJzaW9uOiBBcGlWZXJzaW9uc1xuICAvKipcbiAgICogVGhlIGJhc2UgdXJsIHRvIGNvbm5lY3QgdG8uIElmIHlvdSBjcmVhdGUgYSBwcm94eSByZXN0LCB0aGF0IHVybCB3b3VsZCBnbyBoZXJlLlxuICAgKiBJVCBTSE9VTEQgTk9UIEVORCBXSVRIIEEgL1xuICAgKiBAZGVmYXVsdCBodHRwczovL2Rpc2NvcmQuY29tL2FwaVxuICAgKi9cbiAgYmFzZVVybDogc3RyaW5nXG4gIC8qKlxuICAgKiBgdHJ1ZWAgaWYgdGhlIGBiYXNlVXJsYCBkb2VzIG5vdCBzdGFydCB3aXRoIGBodHRwczovL2Rpc2NvcmQuY29tL2FwaWAuXG4gICAqXG4gICAqIE1vc3RseSB1c2VkIG9ubHkgZm9yIGludGVybiBmdW5jdGlvbnMuXG4gICAqL1xuICBpc1Byb3hpZWQ6IGJvb2xlYW5cbiAgLyoqIFRoZSBhdXRob3JpemF0aW9uIGhlYWRlciB2YWx1ZSB0byBhdHRhY2ggd2hlbiBzZW5kaW5nIHJlcXVlc3RzIHRvIHRoZSBwcm94eS4gKi9cbiAgYXV0aG9yaXphdGlvbj86IHN0cmluZ1xuICAvKiogVGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIG5hbWUgdG8gYXR0YWNoIHdoZW4gc2VuZGluZyByZXF1ZXN0cyB0byB0aGUgcHJveHkgKi9cbiAgYXV0aG9yaXphdGlvbkhlYWRlcjogc3RyaW5nXG4gIC8qKiBUaGUgZW5kcG9pbnQgdG8gdXNlIGZvciBgdXBkYXRlVG9rZW5RdWV1ZXNgIHdoZW4gd29ya2luZyB3aXRoIGEgcmVzdCBwcm94eSAqL1xuICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50Pzogc3RyaW5nXG4gIC8qKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZXMgYSByZXF1ZXN0IHNob3VsZCBiZSByZXRyaWVkLiBEZWZhdWx0cyB0byBJbmZpbml0eSAqL1xuICBtYXhSZXRyeUNvdW50OiBudW1iZXJcbiAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSBtYW5hZ2VyIGlzIHJhdGUgbGltaXRlZCBnbG9iYWxseSBhY3Jvc3MgYWxsIHJlcXVlc3RzLiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgZ2xvYmFsbHlSYXRlTGltaXRlZDogYm9vbGVhblxuICAvKiogV2hldGhlciBvciBub3QgdGhlIHJhdGUgbGltaXRlZCBwYXRocyBhcmUgYmVpbmcgcHJvY2Vzc2VkIHRvIGFsbG93IHJlcXVlc3RzIHRvIGJlIG1hZGUgb25jZSB0aW1lIGlzIHVwLiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgcHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHM6IGJvb2xlYW5cbiAgLyoqIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBkZWxldGluZyB0aGlzIHF1ZXVlIGlmIGl0IGlzIGVtcHR5LiBEZWZhdWx0cyB0byA2MDAwMChvbmUgbWludXRlKS4gKi9cbiAgZGVsZXRlUXVldWVEZWxheTogbnVtYmVyXG4gIC8qKiBUaGUgcXVldWVzIHRoYXQgaG9sZCBhbGwgdGhlIHJlcXVlc3RzIHRvIGJlIHByb2Nlc3NlZC4gKi9cbiAgcXVldWVzOiBNYXA8c3RyaW5nLCBRdWV1ZT5cbiAgLyoqIFRoZSBwYXRocyB0aGF0IGFyZSBjdXJyZW50bHkgcmF0ZSBsaW1pdGVkLiAqL1xuICByYXRlTGltaXRlZFBhdGhzOiBNYXA8c3RyaW5nLCBSZXN0UmF0ZUxpbWl0ZWRQYXRoPlxuICAvKiogVGhlIGJ1Y2tldCBmb3IgaGFuZGxpbmcgYW55IGludmFsaWQgcmVxdWVzdHMuICAqL1xuICBpbnZhbGlkQnVja2V0OiBJbnZhbGlkUmVxdWVzdEJ1Y2tldFxuICAvKiogVGhlIHJvdXRlcyB0aGF0IGFyZSBhdmFpbGFibGUgZm9yIHRoaXMgbWFuYWdlci4gKi9cbiAgcm91dGVzOiBSZXN0Um91dGVzXG4gIC8qKiBUaGUgbG9nZ2VyIHRvIHVzZSBmb3IgdGhlIHJlc3QgbWFuYWdlciAqL1xuICBsb2dnZXI6IFBpY2s8dHlwZW9mIGxvZ2dlciwgJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcicgfCAnZmF0YWwnPlxuICAvKiogRXZlbnRzIGZvciB0aGUgcmVzdCBtYW5hZ2VyICovXG4gIGV2ZW50czogUmVzdE1hbmFnZXJFdmVudHNcbiAgLyoqIEFsbG93cyB0aGUgdXNlciB0byBpbmplY3QgY3VzdG9tIGhlYWRlcnMgdGhhdCB3aWxsIGJlIHNlbnQgd2l0aCBldmVyeSByZXF1ZXN0LiAqL1xuICBjcmVhdGVCYXNlSGVhZGVyczogKCkgPT4gUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAvKiogV2hldGhlciBvciBub3QgdGhlIHJlc3QgbWFuYWdlciBzaG91bGQga2VlcCBvYmplY3RzIGluIHJhdyBzbmFrZSBjYXNlIGZyb20gZGlzY29yZC4gKi9cbiAgcHJlZmVyU25ha2VDYXNlOiAoZW5hYmxlZDogYm9vbGVhbikgPT4gUmVzdE1hbmFnZXJcbiAgLyoqIENoZWNrIHRoZSByYXRlIGxpbWl0cyBmb3IgYSB1cmwgb3IgYSBidWNrZXQuICovXG4gIGNoZWNrUmF0ZUxpbWl0czogKHVybDogc3RyaW5nLCBpZGVudGlmaWVyOiBzdHJpbmcpID0+IG51bWJlciB8IGZhbHNlXG4gIC8qIFVwZGF0ZSB0aGUgcXVldWVzIGFuZCByYXRlbGltaXQgaW5mb3JtYXRpb24gdG8gYWRhcHQgdG8gdGhlIG5ldyB0b2tlbiAqL1xuICB1cGRhdGVUb2tlblF1ZXVlczogKG9sZFRva2VuOiBzdHJpbmcsIG5ld1Rva2VuOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFJlc2hhcGVzIGFuZCBtb2RpZmllcyB0aGUgb2JqIGFzIG5lZWRlZCB0byBtYWtlIGl0IHJlYWR5IGZvciBkaXNjb3JkcyBhcGkuICovXG4gIGNoYW5nZVRvRGlzY29yZEZvcm1hdDogKG9iajogYW55KSA9PiBhbnlcbiAgLyoqIENyZWF0ZXMgdGhlIHJlcXVlc3QgYm9keSBhbmQgaGVhZGVycyB0aGF0IGFyZSBuZWNlc3NhcnkgdG8gc2VuZCBhIHJlcXVlc3QuIFdpbGwgaGFuZGxlIGRpZmZlcmVudCB0eXBlcyBvZiBtZXRob2RzIGFuZCBldmVyeXRoaW5nIG5lY2Vzc2FyeSBmb3IgZGlzY29yZC4gKi9cbiAgY3JlYXRlUmVxdWVzdEJvZHk6IChtZXRob2Q6IFJlcXVlc3RNZXRob2RzLCBvcHRpb25zPzogQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zKSA9PiBSZXF1ZXN0Qm9keVxuICAvKiogVGhpcyB3aWxsIGNyZWF0ZSBhIGluZmluaXRlIGxvb3AgcnVubmluZyBpbiAxIHNlY29uZHMgdXNpbmcgdGFpbCByZWN1cnNpb24gdG8ga2VlcCByYXRlIGxpbWl0cyBjbGVhbi4gV2hlbiBhIHJhdGUgbGltaXQgcmVzZXRzLCB0aGlzIHdpbGwgcmVtb3ZlIGl0IHNvIHRoZSBxdWV1ZSBjYW4gcHJvY2VlZC4gKi9cbiAgcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHM6ICgpID0+IHZvaWRcbiAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICBwcm9jZXNzSGVhZGVyczogKHVybDogc3RyaW5nLCBoZWFkZXJzOiBIZWFkZXJzLCBpZGVudGlmaWVyOiBzdHJpbmcpID0+IHN0cmluZyB8IHVuZGVmaW5lZFxuICAvKiogU2VuZHMgYSByZXF1ZXN0IHRvIHRoZSBhcGkuICovXG4gIHNlbmRSZXF1ZXN0OiAob3B0aW9uczogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBTcGxpdCBhIHVybCB0byBzZXBhcmF0ZSByYXRlIGxpbWl0IGJ1Y2tldHMgYmFzZWQgb24gbWFqb3IvbWlub3IgcGFyYW1ldGVycy4gKi9cbiAgc2ltcGxpZnlVcmw6ICh1cmw6IHN0cmluZywgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kcykgPT4gc3RyaW5nXG4gIC8qKiBNYWtlIGEgcmVxdWVzdCB0byBiZSBzZW50IHRvIHRoZSBhcGkuICovXG4gIG1ha2VSZXF1ZXN0OiA8VCA9IHVua25vd24+KG1ldGhvZDogUmVxdWVzdE1ldGhvZHMsIHVybDogc3RyaW5nLCBvcHRpb25zPzogTWFrZVJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFQ+XG4gIC8qKiBUYWtlcyBhIHJlcXVlc3QgYW5kIHByb2Nlc3NlcyBpdCBpbnRvIGEgcXVldWUuICovXG4gIHByb2Nlc3NSZXF1ZXN0OiAocmVxdWVzdDogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBNYWtlIGEgZ2V0IHJlcXVlc3QgdG8gdGhlIGFwaSAqL1xuICBnZXQ6IDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxUPj5cbiAgLyoqIE1ha2UgYSBwb3N0IHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgcG9zdDogPFQgPSB2b2lkPih1cmw6IHN0cmluZywgb3B0aW9ucz86IE1ha2VSZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxUPj5cbiAgLyoqIE1ha2UgYSBwdXQgcmVxdWVzdCB0byB0aGUgYXBpLiAqL1xuICBwdXQ6IDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBNYWtlUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8VD4+XG4gIC8qKiBNYWtlIGEgZGVsZXRlIHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgZGVsZXRlOiAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogTWFrZSBhIHBhdGNoIHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgcGF0Y2g6IDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBNYWtlUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8VD4+XG4gIC8qKlxuICAgKiBBZGRzIGEgcmVhY3Rpb24gdG8gYSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIHRvIGFkZCBhIHJlYWN0aW9uIHRvIGlzIGluLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGFkZCBhIHJlYWN0aW9uIHRvLlxuICAgKiBAcGFyYW0gcmVhY3Rpb24gLSBUaGUgcmVhY3Rpb24gdG8gYWRkIHRvIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJuc1xuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBub2JvZHkgZWxzZSBoYXMgcmVhY3RlZCB0byB0aGUgbWVzc2FnZTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYEFERF9SRUFDVElPTlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgUmVhY3Rpb24gQWRkXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNjcmVhdGUtcmVhY3Rpb259XG4gICAqL1xuICBhZGRSZWFjdGlvbjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgcmVhY3Rpb246IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogQWRkcyBtdWx0aXBsZSBhIHJlYWN0aW9uIHRvIGEgbWVzc2FnZS5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBgYWRkUmVhY3Rpb24oKWAgaGVscGVyIGJlaGluZCB0aGUgc2NlbmVzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIHRvIGFkZCByZWFjdGlvbnMgdG8gaXMgaW4uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gYWRkIHRoZSByZWFjdGlvbnMgdG8uXG4gICAqIEBwYXJhbSByZWFjdGlvbnMgLSBUaGUgcmVhY3Rpb25zIHRvIGFkZCB0byB0aGUgbWVzc2FnZS5cbiAgICogQHBhcmFtIG9yZGVyZWQgLSBXaGV0aGVyIHRoZSByZWFjdGlvbnMgbXVzdCBiZSBhZGRlZCBpbiBvcmRlciBvciBub3QuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIElmIG5vYm9keSBlbHNlIGhhcyByZWFjdGVkIHRvIHRoZSBtZXNzYWdlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgQUREX1JFQUNUSU9OU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBSZWFjdGlvbiBBZGRfIGdhdGV3YXkgZXZlbnQgZm9yIGV2ZXJ5IHJlYWN0aW9uIGFkZGVkLlxuICAgKi9cbiAgYWRkUmVhY3Rpb25zOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCByZWFjdGlvbnM6IHN0cmluZ1tdLCBvcmRlcmVkPzogYm9vbGVhbikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogQWRkcyBhIHJvbGUgdG8gYSBtZW1iZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgbWVtYmVyIHRvIGFkZCB0aGUgcm9sZSB0byBpcyBpbi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gYWRkIHRoZSByb2xlIHRvLlxuICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIGFkZCB0byB0aGUgbWVtYmVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjYWRkLWd1aWxkLW1lbWJlci1yb2xlfVxuICAgKi9cbiAgYWRkUm9sZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEFkZHMgYSBtZW1iZXIgdG8gYSB0aHJlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRocmVhZCB0byBhZGQgdGhlIG1lbWJlciB0by5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gYWRkIHRvIHRoZSB0aHJlYWQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBhYmlsaXR5IHRvIHNlbmQgbWVzc2FnZXMgaW4gdGhlIHRocmVhZC5cbiAgICogUmVxdWlyZXMgdGhlIHRocmVhZCBub3QgYmUgYXJjaGl2ZWQuXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBNZW1iZXJzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjYWRkLXRocmVhZC1tZW1iZXJ9XG4gICAqL1xuICBhZGRUaHJlYWRNZW1iZXI6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEFkZHMgYSByZWNpcGllbnQgdG8gYSBncm91cCBETS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgZ3JvdXAgZG0gdG8gYWRkIHRoZSB1c2VyIHRvLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIHVzZXIgdG8gYWRkIHRvIHRoZSBncm91cCBkbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgYWRkaW5nIHRoZSB1c2VyXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4gd2l0aCB0aGUgYGdkbS5qb2luYCBzY29wZVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNncm91cC1kbS1hZGQtcmVjaXBpZW50fVxuICAgKi9cbiAgYWRkRG1SZWNpcGllbnQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEFkZERtUmVjaXBpZW50T3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogQWRkcyBhIG1lbWJlciB0byBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIGFkZCB0aGUgbWVtYmVyIHRvLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIG1lbWJlciB0byBhZGQgdG8gdGhlIHRocmVhZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGFkZCBvZiBhIGd1aWxkIG1lbWJlclxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYm90IHRvIGJlIGluIHRoZSBzcGVjaWZpZWQgc2VydmVyXG4gICAqIFJlcXVpcmVzIGFuIE9BdXRoMiBhY2Nlc3MgdG9rZW4gd2l0aCB0aGUgYGd1aWxkcy5qb2luYCBzY29wZVxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgQWRkXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjYWRkLWd1aWxkLW1lbWJlcn1cbiAgICovXG4gIGFkZEd1aWxkTWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQWRkR3VpbGRNZW1iZXJPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGF1dG9tb2QgcnVsZSBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gY3JlYXRlIHRoZSBydWxlIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHJ1bGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYW4gX0F1dG8gTW9kZXJhdGlvbiBSdWxlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNjcmVhdGUtYXV0by1tb2RlcmF0aW9uLXJ1bGV9XG4gICAqL1xuICBjcmVhdGVBdXRvbW9kUnVsZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlQXV0b01vZGVyYXRpb25SdWxlT3B0aW9ucywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNoYW5uZWwgd2l0aGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIGNoYW5uZWwgd2l0aGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGNoYW5uZWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRDaGFubmVsfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfQ0hBTk5FTFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIElmIHNldHRpbmcgcGVybWlzc2lvbiBvdmVyd3JpdGVzLCBvbmx5IHRoZSBwZXJtaXNzaW9ucyB0aGUgYm90IHVzZXIgaGFzIGluIHRoZSBndWlsZCBjYW4gYmUgYWxsb3dlZCBvciBkZW5pZWQuXG4gICAqXG4gICAqIFNldHRpbmcgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24gaXMgb25seSBwb3NzaWJsZSBmb3IgZ3VpbGQgYWRtaW5pc3RyYXRvcnMuXG4gICAqXG4gICAqIEZpcmVzIGEgX0NoYW5uZWwgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjY3JlYXRlLWd1aWxkLWNoYW5uZWx9XG4gICAqL1xuICBjcmVhdGVDaGFubmVsOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVHdWlsZENoYW5uZWwsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtb2ppIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBpbiB3aGljaCB0byBjcmVhdGUgdGhlIGVtb2ppLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGVtb2ppLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkRW1vaml9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRW1vamlzIGhhdmUgYSBtYXhpbXVtIGZpbGUgc2l6ZSBvZiAyNTYga2lsb2JpdHMuIEF0dGVtcHRpbmcgdG8gdXBsb2FkIGEgbGFyZ2VyIGVtb2ppIHdpbGwgY2F1c2UgdGhlIHJvdXRlIHRvIHJldHVybiA0MDAgQmFkIFJlcXVlc3QuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIEVtb2ppcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNjcmVhdGUtZ3VpbGQtZW1vaml9XG4gICAqL1xuICBjcmVhdGVFbW9qaTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlR3VpbGRFbW9qaSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtb2ppIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgZW1vamkuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkRW1vaml9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjY3JlYXRlLWFwcGxpY2F0aW9uLWVtb2ppfVxuICAgKi9cbiAgY3JlYXRlQXBwbGljYXRpb25FbW9qaTogKG9wdGlvbnM6IENyZWF0ZUFwcGxpY2F0aW9uRW1vamkpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEVtb2ppPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgdGhyZWFkIGluIGEgZm9ydW0gY2hhbm5lbCBvciBtZWRpYSBjaGFubmVsLCBhbmQgc2VuZHMgYSBtZXNzYWdlIHdpdGhpbiB0aGUgY3JlYXRlZCB0aHJlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGZvcnVtIGNoYW5uZWwgdG8gY3JlYXRlIHRoZSB0aHJlYWQgd2l0aGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHRocmVhZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9IHdpdGggYSBuZXN0ZWQge0BsaW5rIERpc2NvcmRDaGFubmVsfSBvYmplY3QuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQ1JFQVRFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjc3RhcnQtdGhyZWFkLWluLWZvcnVtLW9yLW1lZGlhLWNoYW5uZWx9XG4gICAqL1xuICBjcmVhdGVGb3J1bVRocmVhZDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVGb3J1bVBvc3RXaXRoTWVzc2FnZSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXBwbGljYXRpb24gY29tbWFuZCBhY2Nlc3NpYmxlIGdsb2JhbGx5OyBhY3Jvc3MgZGlmZmVyZW50IGd1aWxkcyBhbmQgY2hhbm5lbHMuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gY3JlYXRlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGVuZHBvaW50XG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIENyZWF0aW5nIGEgY29tbWFuZCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgY29tbWFuZCBmb3IgeW91ciBhcHBsaWNhdGlvbiB3aWxsIG92ZXJ3cml0ZSB0aGUgb2xkIGNvbW1hbmQuXG4gICAqIOKaoO+4jyBHbG9iYWwgY29tbWFuZHMgb25jZSBjcmVhdGVkIGFyZSBjYWNoZWQgZm9yIHBlcmlvZHMgb2YgX19hbiBob3VyX18sIHNvIGNoYW5nZXMgbWFkZSB0byBleGlzdGluZyBjb21tYW5kcyB3aWxsIHRha2UgYW4gaG91ciB0byBzdXJmYWNlLlxuICAgKiDimqDvuI8gWW91IGNhbiBvbmx5IGNyZWF0ZSB1cCB0byAyMDAgX25ld18gY29tbWFuZHMgZGFpbHkuXG4gICAqXG4gICAqIFdoZW4gdXNpbmcgdGhlIGJlYXJlciB0b2tlbiB0aGUgdG9rZW4gbmVlZHMgdGhlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMudXBkYXRlYCBzY29wZSBhbmQgbXVzdCBiZSBhIGBDbGllbnQgZ3JhbnRgIHRva2VuLlxuICAgKiAgWW91IHdpbGwgYmUgYWJsZSB0byB1cGRhdGUgb25seSB5b3VyIG93biBhcHBsaWNhdGlvbiBjb21tYW5kc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjY3JlYXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoXG4gICAgY29tbWFuZDogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kLFxuICAgIG9wdGlvbnM/OiBDcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRPcHRpb25zLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGFwcGxpY2F0aW9uIGNvbW1hbmQgb25seSBhY2Nlc3NpYmxlIGluIGEgc3BlY2lmaWMgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gY3JlYXRlLlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gY3JlYXRlIHRoZSBjb21tYW5kIGZvci5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKaoO+4jyBDcmVhdGluZyBhIGNvbW1hbmQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIGNvbW1hbmQgZm9yIHlvdXIgYXBwbGljYXRpb24gd2lsbCBvdmVyd3JpdGUgdGhlIG9sZCBjb21tYW5kLlxuICAgKiDimqDvuI8gWW91IGNhbiBvbmx5IGNyZWF0ZSB1cCB0byAyMDAgX25ld18gY29tbWFuZHMgZGFpbHkuXG4gICAqXG4gICAqIFdoZW4gdXNpbmcgdGhlIGJlYXJlciB0b2tlbiB0aGUgdG9rZW4gbmVlZHMgdGhlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMudXBkYXRlYCBzY29wZSBhbmQgbXVzdCBiZSBhIGBDbGllbnQgZ3JhbnRgIHRva2VuLlxuICAgKiAgWW91IHdpbGwgYmUgYWJsZSB0byB1cGRhdGUgb25seSB5b3VyIG93biBhcHBsaWNhdGlvbiBjb21tYW5kc1xuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjY3JlYXRlLWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZDogKFxuICAgIGNvbW1hbmQ6IENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9ucz86IENyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PlxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHN0aWNrZXIgZm9yIHRoZSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJuIEEge0BsaW5rIERpc2NvcmRTdGlja2VyfVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRmlyZXMgYSBHdWlsZCBTdGlja2VycyBVcGRhdGUgR2F0ZXdheSBldmVudC5cbiAgICogRXZlcnkgZ3VpbGRzIGhhcyBmaXZlIGZyZWUgc3RpY2tlciBzbG90cyBieSBkZWZhdWx0LCBhbmQgZWFjaCBCb29zdCBsZXZlbCB3aWxsIGdyYW50IGFjY2VzcyB0byBtb3JlIHNsb3RzLlxuICAgKiBMb3R0aWUgc3RpY2tlcnMgY2FuIG9ubHkgYmUgdXBsb2FkZWQgb24gZ3VpbGRzIHRoYXQgaGF2ZSBlaXRoZXIgdGhlIGBWRVJJRklFRGAgYW5kL29yIHRoZSBgUEFSVE5FUkVEYCBndWlsZCBmZWF0dXJlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RpY2tlciNjcmVhdGUtZ3VpbGQtc3RpY2tlcn1cbiAgICovXG4gIGNyZWF0ZUd1aWxkU3RpY2tlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlR3VpbGRTdGlja2VyT3B0aW9ucywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGlja2VyPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHRlbXBsYXRlIGZyb20uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkVGVtcGxhdGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjY3JlYXRlLWd1aWxkLXRlbXBsYXRlfVxuICAgKi9cbiAgY3JlYXRlR3VpbGRUZW1wbGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlVGVtcGxhdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW52aXRlIHRvIGEgY2hhbm5lbCBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGNyZWF0ZSB0aGUgaW52aXRlIHRvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGludml0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZEludml0ZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQ1JFQVRFX0lOU1RBTlRfSU5WSVRFYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfSW52aXRlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHByaXZhdGVSZW1hcmtzXG4gICAqIFRoZSByZXF1ZXN0IGJvZHkgaXMgbm90IG9wdGlvbmFsLCBhbmQgYW4gZW1wdHkgSlNPTiBvYmplY3QgbXVzdCBiZSBzZW50IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhbnkgZmllbGRzIGFyZSBiZWluZyB0cmFuc21pdHRlZC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjY3JlYXRlLWNoYW5uZWwtaW52aXRlfVxuICAgKi9cbiAgY3JlYXRlSW52aXRlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBDcmVhdGVDaGFubmVsSW52aXRlLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludml0ZT4+XG4gIC8qKlxuICAgKiBHZXQgZ3VpbGQgcm9sZSBtZW1iZXIgY291bnRzXG4gICAqXG4gICAqIFJldHVybnMgYSBtYXAgb2Ygcm9sZSBJRHMgdG8gdGhlIG51bWJlciBvZiBtZW1iZXJzIHdpdGggdGhlIHJvbGUuIERvZXMgbm90IGluY2x1ZGUgdGhlIFxcQGV2ZXJ5b25lIHJvbGUuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgcm9sZSBtZW1iZXIgY291bnRzIGZvci5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1yb2xlLW1lbWJlci1jb3VudHN9XG4gICAqL1xuICBnZXRHdWlsZFJvbGVNZW1iZXJDb3VudHM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSByb2xlIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHJvbGUgaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgcm9sZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZFJvbGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgUm9sZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNjcmVhdGUtZ3VpbGQtcm9sZX1cbiAgICovXG4gIGNyZWF0ZVJvbGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUd1aWxkUm9sZSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRSb2xlPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzY2hlZHVsZWQgZXZlbnQgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgc2NoZWR1bGVkIGV2ZW50IGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHNjaGVkdWxlZCBldmVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZFNjaGVkdWxlZEV2ZW50fS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRVZFTlRTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBBIGd1aWxkIGNhbiBvbmx5IGhhdmUgYSBtYXhpbXVtIG9mIDEwMCBldmVudHMgd2l0aCBhIHN0YXR1cyBvZiB7QGxpbmsgU2NoZWR1bGVkRXZlbnRTdGF0dXN9LkFjdGl2ZSBvciB7QGxpbmsgU2NoZWR1bGVkRXZlbnRTdGF0dXN9LlNjaGVkdWxlZCAoaW5jbHVzaXZlKS5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgU2NoZWR1bGVkIEV2ZW50IENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNjcmVhdGUtZ3VpbGQtc2NoZWR1bGVkLWV2ZW50fVxuICAgKi9cbiAgY3JlYXRlU2NoZWR1bGVkRXZlbnQ6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZVNjaGVkdWxlZEV2ZW50LCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNjaGVkdWxlZEV2ZW50Pj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzdGFnZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggYSBzdGFnZSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHN0YWdlIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkU3RhZ2VJbnN0YW5jZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSB1c2VyIHRvIGJlIGEgbW9kZXJhdG9yIG9mIHRoZSBzdGFnZSBjaGFubmVsLlxuICAgKlxuICAgKiBGaXJlcyBhIF9TdGFnZSBJbnN0YW5jZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9zdGFnZS1pbnN0YW5jZSNjcmVhdGUtc3RhZ2UtaW5zdGFuY2V9XG4gICAqL1xuICBjcmVhdGVTdGFnZUluc3RhbmNlOiAob3B0aW9uczogQ3JlYXRlU3RhZ2VJbnN0YW5jZSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGFnZUluc3RhbmNlPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB3ZWJob29rLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGNyZWF0ZSB0aGUgd2ViaG9vayBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB3ZWJob29rLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkV2ViaG9va30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiDimqDvuI8gVGhlIHdlYmhvb2sgbmFtZSBtdXN0IG5vdCBjb250YWluIHRoZSBzdWJzdHJpbmdzICdjbHlkZScsIG9yICdkaXNjb3JkJyAoY2FzZS1pbnNlbnNpdGl2ZSkuXG4gICAqXG4gICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjY3JlYXRlLXdlYmhvb2t9XG4gICAqL1xuICBjcmVhdGVXZWJob29rOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZVdlYmhvb2ssIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9vaz4+XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGF1dG9tb2QgcnVsZS5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgcnVsZSBmcm9tLlxuICAgKiBAcGFyYW0gcnVsZUlkIC0gVGhlIElEIG9mIHRoZSBhdXRvbW9kIHJ1bGUgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfQXV0byBNb2RlcmF0aW9uIFJ1bGUgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvYXV0by1tb2RlcmF0aW9uI2RlbGV0ZS1hdXRvLW1vZGVyYXRpb24tcnVsZX1cbiAgICovXG4gIGRlbGV0ZUF1dG9tb2RSdWxlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBydWxlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgY2hhbm5lbCBmcm9tIHdpdGhpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBub3RoaW5nXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZvciBjb21tdW5pdHkgZ3VpbGRzLCB0aGUgX1J1bGVzXywgX0d1aWRlbGluZXNfIGFuZCBfQ29tbXVuaXR5IFVwZGF0ZV8gY2hhbm5lbHMgY2Fubm90IGJlIGRlbGV0ZWQuXG4gICAqXG4gICAqIElmIHRoZSBjaGFubmVsIGlzIGEgdGhyZWFkOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1RIUkVBRFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIC0gRmlyZXMgYSBfVGhyZWFkIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogT3RoZXJ3aXNlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiAtIOKaoO+4jyBEZWxldGluZyBhIGNhdGVnb3J5IGNoYW5uZWwgZG9lcyBub3QgZGVsZXRlIGl0cyBjaGlsZCBjaGFubmVscy5cbiAgICogICBJbnN0ZWFkLCB0aGV5IHdpbGwgaGF2ZSB0aGVpciBgcGFyZW50X2lkYCBwcm9wZXJ0eSByZW1vdmVkLCBhbmQgYSBgQ2hhbm5lbCBVcGRhdGVgIGdhdGV3YXkgZXZlbnQgd2lsbCBmaXJlIGZvciBlYWNoIG9mIHRoZW0uXG4gICAqXG4gICAqIC0gRmlyZXMgYSBfQ2hhbm5lbCBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZWNsb3NlLWNoYW5uZWx9XG4gICAqL1xuICBkZWxldGVDaGFubmVsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHBlcm1pc3Npb24gb3ZlcnJpZGUgZm9yIGEgdXNlciBvciByb2xlIGluIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBkZWxldGUgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGUgb2YuXG4gICAqIEBwYXJhbSBvdmVyd3JpdGVJZCAtIFRoZSBJRCBvZiB0aGUgcGVybWlzc2lvbiBvdmVycmlkZSB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0NoYW5uZWwgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGUtY2hhbm5lbC1wZXJtaXNzaW9ufVxuICAgKi9cbiAgZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvdmVyd3JpdGVJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gZW1vamkgZnJvbSBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgZnJvbSB3aGljaCB0byBkZWxldGUgdGhlIGVtb2ppLlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhlIGVtb2ppIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGb3IgZW1vamlzIGNyZWF0ZWQgYnkgdGhlIGN1cnJlbnQgdXNlciwgcmVxdWlyZXMgZWl0aGVyIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBvciBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKiBGb3Igb3RoZXIgZW1vamlzLCByZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgRW1vamlzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2Vtb2ppI2RlbGV0ZS1ndWlsZC1lbW9qaX1cbiAgICovXG4gIGRlbGV0ZUVtb2ppOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBpZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gZW1vamkgZnJvbSB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBJRCBvZiB0aGUgZW1vamkgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjZGVsZXRlLWFwcGxpY2F0aW9uLWVtb2ppfVxuICAgKi9cbiAgZGVsZXRlQXBwbGljYXRpb25FbW9qaTogKGlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBmb2xsb3ctdXAgbWVzc2FnZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVW5saWtlIGBkZWxldGVNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQgbmVlZGluZyB0byBzZWUgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgaXMgaW4uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgRGVsZXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNkZWxldGUtZm9sbG93dXAtbWVzc2FnZX1cbiAgICovXG4gIGRlbGV0ZUZvbGxvd3VwTWVzc2FnZTogKHRva2VuOiBzdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGFwcGxpY2F0aW9uIGNvbW1hbmQgcmVnaXN0ZXJlZCBnbG9iYWxseS5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBkZWxldGUuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNkZWxldGUtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQ6IChjb21tYW5kSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIHJlZ2lzdGVyZWQgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgY29tbWFuZCBmcm9tLlxuICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGRlbGV0ZSBmcm9tIHRoZSBndWlsZC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2RlbGV0ZS1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQ6IChjb21tYW5kSWQ6IEJpZ1N0cmluZywgZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGUgYSBuZXcgc3RpY2tlciBmb3IgdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm4gQSB7QGxpbmsgRGlzY29yZFN0aWNrZXJ9XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZvciBzdGlja2VycyBjcmVhdGVkIGJ5IHRoZSBjdXJyZW50IHVzZXIsIHJlcXVpcmVzIGVpdGhlciB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRm9yIG90aGVyIHN0aWNrZXJzLCByZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRmlyZXMgYSBHdWlsZCBTdGlja2VycyBVcGRhdGUgR2F0ZXdheSBldmVudC5cbiAgICogRXZlcnkgZ3VpbGRzIGhhcyBmaXZlIGZyZWUgc3RpY2tlciBzbG90cyBieSBkZWZhdWx0LCBhbmQgZWFjaCBCb29zdCBsZXZlbCB3aWxsIGdyYW50IGFjY2VzcyB0byBtb3JlIHNsb3RzLlxuICAgKiBMb3R0aWUgc3RpY2tlcnMgY2FuIG9ubHkgYmUgdXBsb2FkZWQgb24gZ3VpbGRzIHRoYXQgaGF2ZSBlaXRoZXIgdGhlIGBWRVJJRklFRGAgYW5kL29yIHRoZSBgUEFSVE5FUkVEYCBndWlsZCBmZWF0dXJlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RpY2tlciNkZWxldGUtZ3VpbGQtc3RpY2tlcn1cbiAgICovXG4gIGRlbGV0ZUd1aWxkU3RpY2tlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgc3RpY2tlcklkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHRlbXBsYXRlIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgdGVtcGxhdGUgZnJvbS5cbiAgICogQHBhcmFtIHRlbXBsYXRlQ29kZSAtIFRoZSBjb2RlIG9mIHRoZSB0ZW1wbGF0ZSB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNkZWxldGUtZ3VpbGQtdGVtcGxhdGV9XG4gICAqL1xuICBkZWxldGVHdWlsZFRlbXBsYXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhbiBpbnRlZ3JhdGlvbiBhdHRhY2hlZCB0byBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgZnJvbSB3aGljaCB0byBkZWxldGUgdGhlIGludGVncmF0aW9uLlxuICAgKiBAcGFyYW0gaW50ZWdyYXRpb25JZCAtIFRoZSBJRCBvZiB0aGUgaW50ZWdyYXRpb24gdG8gZGVsZXRlIGZyb20gdGhlIGd1aWxkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBEZWxldGVzIGFsbCB3ZWJob29rcyBhc3NvY2lhdGVkIHdpdGggdGhlIGludGVncmF0aW9uLCBhbmQga2lja3MgdGhlIGFzc29jaWF0ZWQgYm90IGlmIHRoZXJlIGlzIG9uZS5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgSW50ZWdyYXRpb25zIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICogRmlyZXMgYSBfSW50ZWdyYXRpb24gRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZGVsZXRlLWd1aWxkLWludGVncmF0aW9ufVxuICAgKi9cbiAgZGVsZXRlSW50ZWdyYXRpb246IChndWlsZElkOiBCaWdTdHJpbmcsIGludGVncmF0aW9uSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGludml0ZSB0byBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBpbnZpdGVDb2RlIC0gVGhlIGludml0ZSBjb2RlIG9mIHRoZSBpbnZpdGUgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfSW52aXRlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLWNoYW5uZWwtaW52aXRlfVxuICAgKi9cbiAgZGVsZXRlSW52aXRlOiAoaW52aXRlQ29kZTogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBtZXNzYWdlIGZyb20gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZSBmcm9tLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSBmcm9tIHRoZSBjaGFubmVsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIG5vdCBkZWxldGluZyBvd24gbWVzc2FnZTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZS1tZXNzYWdlfVxuICAgKi9cbiAgZGVsZXRlTWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIG11bHRpcGxlIG1lc3NhZ2VzIGZyb20gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZXMgZnJvbS5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZHMgLSBUaGUgSURzIG9mIHRoZSBtZXNzYWdlcyB0byBkZWxldGUgZnJvbSB0aGUgY2hhbm5lbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICog4pqg77iPIE1lc3NhZ2VzIG9sZGVyIHRoYW4gMiB3ZWVrcyBvbGQgY2Fubm90IGJlIGRlbGV0ZWQuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgRGVsZXRlIEJ1bGtfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2J1bGstZGVsZXRlLW1lc3NhZ2VzfVxuICAgKi9cbiAgZGVsZXRlTWVzc2FnZXM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkczogQmlnU3RyaW5nW10sIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgaW5pdGlhbCBtZXNzYWdlIHJlc3BvbnNlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZGVsZXRlTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0IG5lZWRpbmcgdG8gc2VlIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIGluLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZGVsZXRlLW9yaWdpbmFsLWludGVyYWN0aW9uLXJlc3BvbnNlfVxuICAgKi9cbiAgZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlOiAodG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHJlYWN0aW9uIGFkZGVkIGJ5IHRoZSBib3QgdXNlciBmcm9tIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9uIGZyb20gaXMgaW4uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlIHRoZSByZWFjdGlvbiBmcm9tLlxuICAgKiBAcGFyYW0gcmVhY3Rpb24gLSBUaGUgcmVhY3Rpb24gdG8gZGVsZXRlIGZyb20gdGhlIG1lc3NhZ2UuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgUmVhY3Rpb24gUmVtb3ZlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGUtb3duLXJlYWN0aW9ufVxuICAgKi9cbiAgZGVsZXRlT3duUmVhY3Rpb246IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHJlYWN0aW9uOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYWxsIHJlYWN0aW9ucyBmb3IgYWxsIGVtb2ppcyBmcm9tIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9ucyBmcm9tIGlzIGluLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSB0aGUgcmVhY3Rpb25zIGZyb20uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFJlYWN0aW9uIFJlbW92ZSBBbGxfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZS1hbGwtcmVhY3Rpb25zfVxuICAgKi9cbiAgZGVsZXRlUmVhY3Rpb25zQWxsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGFsbCByZWFjdGlvbnMgZm9yIGFuIGVtb2ppIGZyb20gYSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSB0aGUgcmVhY3Rpb25zIGZyb20gaXMgaW4uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlIHRoZSByZWFjdGlvbnMgZnJvbS5cbiAgICogQHBhcmFtIHJlYWN0aW9uIC0gVGhlIHJlYWN0aW9uIHRvIHJlbW92ZSBmcm9tIHRoZSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBSZWFjdGlvbiBSZW1vdmUgRW1vamlfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZS1hbGwtcmVhY3Rpb25zLWZvci1lbW9qaX1cbiAgICovXG4gIGRlbGV0ZVJlYWN0aW9uc0Vtb2ppOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCByZWFjdGlvbjogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgcm9sZSBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIHJvbGUgZnJvbS5cbiAgICogQHBhcmFtIHJvbGVJZCAtIFRoZSBJRCBvZiB0aGUgcm9sZSB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFJvbGUgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZGVsZXRlLWd1aWxkLXJvbGV9XG4gICAqL1xuICBkZWxldGVSb2xlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCByb2xlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgc2NoZWR1bGVkIGV2ZW50IGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgc2NoZWR1bGVkIGV2ZW50IGZyb20uXG4gICAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FVkVOVFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFNjaGVkdWxlZCBFdmVudCBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjZGVsZXRlLWd1aWxkLXNjaGVkdWxlZC1ldmVudH1cbiAgICovXG4gIGRlbGV0ZVNjaGVkdWxlZEV2ZW50OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBldmVudElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHN0YWdlIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBhIHN0YWdlIGNoYW5uZWwsIGlmIG9uZSBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHN0YWdlIGNoYW5uZWwgdGhlIHN0YWdlIGluc3RhbmNlIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgdXNlciB0byBiZSBhIG1vZGVyYXRvciBvZiB0aGUgc3RhZ2UgY2hhbm5lbC5cbiAgICpcbiAgICogRmlyZXMgYSBfU3RhZ2UgSW5zdGFuY2UgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RhZ2UtaW5zdGFuY2UjZGVsZXRlLXN0YWdlLWluc3RhbmNlfVxuICAgKi9cbiAgZGVsZXRlU3RhZ2VJbnN0YW5jZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB1c2VyJ3MgcmVhY3Rpb24gZnJvbSBhIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlIHRoZSByZWFjdGlvbiBmcm9tIGlzIGluLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSB0aGUgcmVhY3Rpb24gZnJvbS5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB3aG9zZSByZWFjdGlvbiB0byBkZWxldGUuXG4gICAqIEBwYXJhbSByZWFjdGlvbiAtIFRoZSByZWFjdGlvbiB0byBkZWxldGUgZnJvbSB0aGUgbWVzc2FnZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgUmVhY3Rpb24gUmVtb3ZlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGUtdXNlci1yZWFjdGlvbn1cbiAgICovXG4gIGRlbGV0ZVVzZXJSZWFjdGlvbjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIHJlYWN0aW9uOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB3ZWJob29rLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZGVsZXRlLXdlYmhvb2t9XG4gICAqL1xuICBkZWxldGVXZWJob29rOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHdlYmhvb2sgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBkZWxldGUgdGhlIG1lc3NhZ2UgYmVsb25naW5nIHRvLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBtYW5hZ2UgdGhlIHdlYmhvb2suXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZGVsZXRpb24gb2YgdGhlIG1lc3NhZ2UuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNkZWxldGUtd2ViaG9va31cbiAgICovXG4gIGRlbGV0ZVdlYmhvb2tNZXNzYWdlOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogRGVsZXRlV2ViaG9va01lc3NhZ2VPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgd2ViaG9vayBtZXNzYWdlIHVzaW5nIHRoZSB3ZWJob29rIHRva2VuLCB0aGVyZWJ5IGJ5cGFzc2luZyB0aGUgbmVlZCBmb3IgYXV0aGVudGljYXRpb24gKyBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBkZWxldGUgdGhlIG1lc3NhZ2UgYmVsb25naW5nIHRvLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBkZWxldGUgdGhlIHdlYmhvb2suXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNkZWxldGUtd2ViaG9vay13aXRoLXRva2VufVxuICAgKi9cbiAgZGVsZXRlV2ViaG9va1dpdGhUb2tlbjogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgcGVybWlzc2lvbnMgZm9yIGEgZ3VpbGQgYXBwbGljYXRpb24gY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kIGlzIHJlZ2lzdGVyZWQgaW4uXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZWRpdCB0aGUgcGVybWlzc2lvbnMgb2YuXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBiZWFyZXIgdG9rZW4gdG8gdXNlIHRvIG1ha2UgdGhlIHJlcXVlc3QuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBjb21tYW5kIHBlcm1pc3Npb25zLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSBiZWFyZXIgdG9rZW4gcmVxdWlyZXMgdGhlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMudXBkYXRlYCBzY29wZSB0byBiZSBlbmFibGVkLCBhbmQgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGd1aWxkIHdob3NlIElEIGhhcyBiZWVuIHByb3ZpZGVkIGluIHRoZSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZWRpdC1hcHBsaWNhdGlvbi1jb21tYW5kLXBlcm1pc3Npb25zfVxuICAgKi9cbiAgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIGNvbW1hbmRJZDogQmlnU3RyaW5nLFxuICAgIGJlYXJlclRva2VuOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQ2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPltdLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+PlxuICAvKipcbiAgICogRWRpdHMgYW4gYXV0b21vZCBydWxlLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgcnVsZSBpbi5cbiAgICogQHBhcmFtIHJ1bGVJZCAtIFRoZSBJRCBvZiB0aGUgcnVsZSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgcnVsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGFuIF9BdXRvIE1vZGVyYXRpb24gUnVsZSBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jbW9kaWZ5LWF1dG8tbW9kZXJhdGlvbi1ydWxlfVxuICAgKi9cbiAgZWRpdEF1dG9tb2RSdWxlOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIHJ1bGVJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM6IFBhcnRpYWw8RWRpdEF1dG9Nb2RlcmF0aW9uUnVsZU9wdGlvbnM+LFxuICAgIHJlYXNvbj86IHN0cmluZyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+PlxuICAvKipcbiAgICogTW9kaWZpZXMgdGhlIGJvdCdzIHVzZXJuYW1lLCBhdmF0YXIgb3IgYmFubmVyLlxuICAgKiBOT1RFOiB1c2VybmFtZTogaWYgY2hhbmdlZCBtYXkgY2F1c2UgdGhlIGJvdCdzIGRpc2NyaW1pbmF0b3IgdG8gYmUgcmFuZG9taXplZC5cbiAgICovXG4gIGVkaXRCb3RQcm9maWxlOiAob3B0aW9uczogeyB1c2VybmFtZT86IHN0cmluZzsgYm90QXZhdGFyVVJMPzogc3RyaW5nIHwgbnVsbDsgYm90QmFubmVyVVJMPzogc3RyaW5nIHwgbnVsbCB9KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRVc2VyPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgY2hhbm5lbCdzIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBjaGFubmVsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRDaGFubmVsfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgZWRpdGluZyBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5Hcm91cERtOlxuICAgKiAtIEZpcmVzIGEgX0NoYW5uZWwgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBJZiBlZGl0aW5nIGEgdGhyZWFkIGNoYW5uZWw6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfVEhSRUFEU2AgcGVybWlzc2lvbiBfX3VubGVzc19fIGlmIHNldHRpbmcgdGhlIGBhcmNoaXZlZGAgcHJvcGVydHkgdG8gYGZhbHNlYCB3aGVuIHRoZSBgbG9ja2VkYCBwcm9wZXJ0eSBpcyBhbHNvIGBmYWxzZWAsIGluIHdoaWNoIGNhc2Ugb25seSB0aGUgYFNFTkRfTUVTU0FHRVNgIHBlcm1pc3Npb24gaXMgcmVxdWlyZWQuXG4gICAqXG4gICAqIC0gRmlyZXMgYSBfVGhyZWFkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogSWYgZWRpdGluZyBhIGd1aWxkIGNoYW5uZWw6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfQ0hBTk5FTFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIC0gSWYgbW9kaWZ5aW5nIHBlcm1pc3Npb24gb3ZlcnJpZGVzOlxuICAgKiAgIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqICAgLSBPbmx5IHBlcm1pc3Npb25zIHRoZSBib3QgdXNlciBoYXMgaW4gdGhlIGd1aWxkIG9yIHBhcmVudCBjaGFubmVsIGNhbiBiZSBhbGxvd2VkL2RlbmllZCBfX3VubGVzc19fIHRoZSBib3QgdXNlciBoYXMgYSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uIG92ZXJyaWRlIGluIHRoZSBjaGFubmVsLlxuICAgKlxuICAgKiAtIElmIG1vZGlmeWluZyBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZENhdGVnb3J5OlxuICAgKiAgICAgLSBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudCBmb3IgZWFjaCBjaGlsZCBjaGFubmVsIGltcGFjdGVkIGluIHRoaXMgY2hhbmdlLlxuICAgKiAtIE90aGVyd2lzZTpcbiAgICogICAgIC0gRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqL1xuICBlZGl0Q2hhbm5lbDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlDaGFubmVsLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAvKipcbiAgICogRWRpdHMgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGVzIGZvciBhIHVzZXIgb3Igcm9sZSBpbiBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZWRpdCB0aGUgcGVybWlzc2lvbiBvdmVycmlkZXMgb2YuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBlcm1pc3Npb24gb3ZlcnJpZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIE9ubHkgcGVybWlzc2lvbnMgdGhlIGJvdCB1c2VyIGhhcyBpbiB0aGUgZ3VpbGQgb3IgcGFyZW50IGNoYW5uZWwgY2FuIGJlIGFsbG93ZWQvZGVuaWVkIF9fdW5sZXNzX18gdGhlIGJvdCB1c2VyIGhhcyBhIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24gb3ZlcnJpZGUgaW4gdGhlIGNoYW5uZWwuXG4gICAqXG4gICAqIEZpcmVzIGEgX0NoYW5uZWwgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNlZGl0LWNoYW5uZWwtcGVybWlzc2lvbnN9XG4gICAqL1xuICBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogRWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzT3B0aW9ucywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgcG9zaXRpb25zIG9mIGEgc2V0IG9mIGNoYW5uZWxzIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBpbiB3aGljaCB0byBlZGl0IHRoZSBwb3NpdGlvbnMgb2YgdGhlIGNoYW5uZWxzLlxuICAgKiBAcGFyYW0gY2hhbm5lbFBvc2l0aW9ucyAtIEEgc2V0IG9mIG9iamVjdHMgZGVmaW5pbmcgdGhlIHVwZGF0ZWQgcG9zaXRpb25zIG9mIHRoZSBjaGFubmVscy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfQ0hBTk5FTFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0NoYW5uZWwgVXBkYXRlXyBnYXRld2F5IGV2ZW50IGZvciBldmVyeSBjaGFubmVsIGltcGFjdGVkIGluIHRoaXMgY2hhbmdlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbW9kaWZ5LWd1aWxkLWNoYW5uZWwtcG9zaXRpb25zfVxuICAgKi9cbiAgZWRpdENoYW5uZWxQb3NpdGlvbnM6IChndWlsZElkOiBCaWdTdHJpbmcsIGNoYW5uZWxQb3NpdGlvbnM6IE1vZGlmeUd1aWxkQ2hhbm5lbFBvc2l0aW9uc1tdKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBFZGl0cyBhbiBlbW9qaS5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGluIHdoaWNoIHRvIGVkaXQgdGhlIGVtb2ppLlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgSUQgb2YgdGhlIGVtb2ppIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBlbW9qaS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgdXBkYXRlZCB7QGxpbmsgRGlzY29yZEVtb2ppfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRm9yIGVtb2ppcyBjcmVhdGVkIGJ5IHRoZSBjdXJyZW50IHVzZXIsIHJlcXVpcmVzIGVpdGhlciB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRm9yIG90aGVyIGVtb2ppcywgcmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgYEd1aWxkIEVtb2ppcyBVcGRhdGVgIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNtb2RpZnktZ3VpbGQtZW1vaml9XG4gICAqL1xuICBlZGl0RW1vamk6IChndWlsZElkOiBCaWdTdHJpbmcsIGlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkRW1vamksIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamk+PlxuICAvKipcbiAgICogRWRpdHMgYW4gYXBwbGljYXRpb24gZW1vamkuXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBJRCBvZiB0aGUgZW1vamkgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGVtb2ppLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgdXBkYXRlZCB7QGxpbmsgRGlzY29yZEVtb2ppfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2Vtb2ppI21vZGlmeS1hcHBsaWNhdGlvbi1lbW9qaX1cbiAgICovXG4gIGVkaXRBcHBsaWNhdGlvbkVtb2ppOiAoaWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5QXBwbGljYXRpb25FbW9qaSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamk+PlxuICAvKipcbiAgICogRWRpdHMgYSBmb2xsb3ctdXAgbWVzc2FnZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZWRpdE1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dCBuZWVkaW5nIHRvIHNlZSB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyBpbi5cbiAgICpcbiAgICogRG9lcyBub3Qgc3VwcG9ydCBlcGhlbWVyYWwgZm9sbG93LXVwIG1lc3NhZ2VzIGR1ZSB0byB0aGVzZSBiZWluZyBzdGF0ZWxlc3MuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNlZGl0LWZvbGxvd3VwLW1lc3NhZ2V9XG4gICAqL1xuICBlZGl0Rm9sbG93dXBNZXNzYWdlOiAodG9rZW46IHN0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGNvbW1hbmQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZWRpdC1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQ6IChjb21tYW5kSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+PlxuICAvKipcbiAgICogRWRpdHMgYSBndWlsZCdzIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGd1aWxkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRHdWlsZH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBhdHRlbXB0aW5nIHRvIGFkZCBvciByZW1vdmUgdGhlIHtAbGluayBHdWlsZEZlYXR1cmVzfS5Db21tdW5pdHkgZmVhdHVyZTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYEFETUlOSVNUUkFUT1JgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZH1cbiAgICovXG4gIGVkaXRHdWlsZDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5R3VpbGQsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGQ+PlxuICAvKipcbiAgICogRWRpdHMgYW4gYXBwbGljYXRpb24gY29tbWFuZCByZWdpc3RlcmVkIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgY29tbWFuZCBpcyByZWdpc3RlcmVkIGluLlxuICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBjb21tYW5kLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2VkaXQtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZDogKFxuICAgIGNvbW1hbmRJZDogQmlnU3RyaW5nLFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmQsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj5cbiAgLyoqXG4gICAqIEVkaXQgdGhlIGdpdmVuIHN0aWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybiBBIHtAbGluayBEaXNjb3JkU3RpY2tlcn1cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRm9yIHN0aWNrZXJzIGNyZWF0ZWQgYnkgdGhlIGN1cnJlbnQgdXNlciwgcmVxdWlyZXMgZWl0aGVyIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBvciBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKiBGb3Igb3RoZXIgc3RpY2tlcnMsIHJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKiBGaXJlcyBhIEd1aWxkIFN0aWNrZXJzIFVwZGF0ZSBHYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RpY2tlciNtb2RpZnktZ3VpbGQtc3RpY2tlcn1cbiAgICovXG4gIGVkaXRHdWlsZFN0aWNrZXI6IChcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgc3RpY2tlcklkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogQXRMZWFzdE9uZTxFZGl0R3VpbGRTdGlja2VyT3B0aW9ucz4sXG4gICAgcmVhc29uPzogc3RyaW5nLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0aWNrZXI+PlxuICAvKipcbiAgICogRWRpdHMgYSB0ZW1wbGF0ZSdzIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCBhIHRlbXBsYXRlIG9mLlxuICAgKiBAcGFyYW0gdGVtcGxhdGVDb2RlIC0gVGhlIGNvZGUgb2YgdGhlIHRlbXBsYXRlIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZFRlbXBsYXRlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXRlbXBsYXRlI21vZGlmeS1ndWlsZC10ZW1wbGF0ZX1cbiAgICovXG4gIGVkaXRHdWlsZFRlbXBsYXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgb3B0aW9uczogTW9kaWZ5R3VpbGRUZW1wbGF0ZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PlxuICAvKipcbiAgICogRWRpdHMgYSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGVkaXQgdGhlIG1lc3NhZ2UgaW4uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSURzIG9mIHRoZSBtZXNzYWdlIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIGVkaXRpbmcgYW5vdGhlciB1c2VyJ3MgbWVzc2FnZTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICogLSBPbmx5IHRoZSB7QGxpbmsgRWRpdE1lc3NhZ2UuZmxhZ3MgfCBmbGFnc30gcHJvcGVydHkgb2YgdGhlIG9wdGlvbnMgb2JqZWN0IHBhcmFtZXRlciBjYW4gYmUgZWRpdGVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZWRpdC1tZXNzYWdlfVxuICAgKi9cbiAgZWRpdE1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRNZXNzYWdlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBpbml0aWFsIG1lc3NhZ2UgcmVzcG9uc2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHJlc3BvbnNlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZWRpdE1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dCBuZWVkaW5nIHRvIHNlZSB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSBpcyBpbi5cbiAgICpcbiAgICogRG9lcyBub3Qgc3VwcG9ydCBlcGhlbWVyYWwgZm9sbG93LXVwIG1lc3NhZ2VzIGR1ZSB0byB0aGVzZSBiZWluZyBzdGF0ZWxlc3MuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNlZGl0LW9yaWdpbmFsLWludGVyYWN0aW9uLXJlc3BvbnNlfVxuICAgKi9cbiAgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZTogKHRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSB2b2ljZSBzdGF0ZSBvZiB0aGUgYm90IHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBpbiB3aGljaCB0byBlZGl0IHRoZSB2b2ljZSBzdGF0ZSBvZiB0aGUgYm90IHVzZXIuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSB2b2ljZSBzdGF0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIHtAbGluayBFZGl0T3duVm9pY2VTdGF0ZS5jaGFubmVsSWQgfCBjaGFubmVsSWR9IHByb3BlcnR5IG9mIHRoZSBvcHRpb25zIG9iamVjdCBwYXJhbWV0ZXIgbXVzdCBwb2ludCB0byBhIHN0YWdlIGNoYW5uZWwsIGFuZCB0aGUgYm90IHVzZXIgbXVzdCBhbHJlYWR5IGhhdmUgam9pbmVkIGl0LlxuICAgKlxuICAgKiBJZiBhdHRlbXB0aW5nIHRvIHVubXV0ZSBvbmVzZWxmOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTVVURV9NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBhdHRlbXB0aW5nIHRvIHJlcXVlc3QgdG8gc3BlYWs6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBSRVFVRVNUX1RPX1NQRUFLYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvdm9pY2UjbW9kaWZ5LWN1cnJlbnQtdXNlci12b2ljZS1zdGF0ZX1cbiAgICovXG4gIGVkaXRPd25Wb2ljZVN0YXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBFZGl0T3duVm9pY2VTdGF0ZSkgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRWRpdHMgYSByb2xlIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSByb2xlIGluLlxuICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSByb2xlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRSb2xlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFJvbGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbW9kaWZ5LWd1aWxkLXJvbGV9XG4gICAqL1xuICBlZGl0Um9sZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcm9sZUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRHdWlsZFJvbGUsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkUm9sZT4+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgcG9zaXRpb25zIG9mIGEgc2V0IG9mIHJvbGVzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgcm9sZSBwb3NpdGlvbnMgaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSByb2xlIHBvc2l0aW9ucy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRSb2xlfSBvYmplY3RzIGFzc29ydGVkIGJ5IHJvbGUgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBSb2xlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudCBmb3IgZXZlcnkgcm9sZSBpbXBhY3RlZCBpbiB0aGlzIGNoYW5nZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC1yb2xlLXBvc2l0aW9uc31cbiAgICovXG4gIGVkaXRSb2xlUG9zaXRpb25zOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlSb2xlUG9zaXRpb25zW10sIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkUm9sZT5bXT5cbiAgLyoqXG4gICAqIEVkaXRzIGEgc2NoZWR1bGVkIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgc2NoZWR1bGVkIGV2ZW50IGluLlxuICAgKiBAcGFyYW0gZXZlbnRJZCAtIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IHRvIGVkaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZFNjaGVkdWxlZEV2ZW50fS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRVZFTlRTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBUbyBzdGFydCBvciBlbmQgYW4gZXZlbnQsIG1vZGlmeSB0aGUgZXZlbnQncyBgc3RhdHVzYCBwcm9wZXJ0eS5cbiAgICpcbiAgICogVGhlIGBlbnRpdHlfbWV0YWRhdGFgIHByb3BlcnR5IGlzIGRpc2NhcmRlZCBmb3IgZXZlbnRzIHdob3NlIGBlbnRpdHlfdHlwZWAgaXMgbm90IHtAbGluayBTY2hlZHVsZWRFdmVudEVudGl0eVR5cGV9LkV4dGVybmFsLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBTY2hlZHVsZWQgRXZlbnQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I21vZGlmeS1ndWlsZC1zY2hlZHVsZWQtZXZlbnR9XG4gICAqL1xuICBlZGl0U2NoZWR1bGVkRXZlbnQ6IChcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgZXZlbnRJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM6IFBhcnRpYWw8RWRpdFNjaGVkdWxlZEV2ZW50PixcbiAgICByZWFzb24/OiBzdHJpbmcsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+PlxuICAvKipcbiAgICogRWRpdHMgYSBzdGFnZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgc3RhZ2UgY2hhbm5lbCB0aGUgc3RhZ2UgaW5zdGFuY2UgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICAgKiBAcGFyYW0gdG9waWMgLSBUb3BpYyBvZiB0aGUgU3RhZ2UgaW5zdGFuY2UgKDEtMTIwIGNoYXJhY3RlcnMpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSB1cGRhdGVkIHtAbGluayBEaXNjb3JkU3RhZ2VJbnN0YW5jZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSB1c2VyIHRvIGJlIGEgbW9kZXJhdG9yIG9mIHRoZSBzdGFnZSBjaGFubmVsLlxuICAgKlxuICAgKiBGaXJlcyBhIF9TdGFnZSBJbnN0YW5jZSBVcGRhdGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RhZ2UtaW5zdGFuY2UjbW9kaWZ5LXN0YWdlLWluc3RhbmNlfVxuICAgKi9cbiAgZWRpdFN0YWdlSW5zdGFuY2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgdG9waWM6IHN0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGFnZUluc3RhbmNlPj5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSB2b2ljZSBzdGF0ZSBvZiBhbm90aGVyIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBpbiB3aGljaCB0byBlZGl0IHRoZSB2b2ljZSBzdGF0ZSBvZiB0aGUgYm90IHVzZXIuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSB2b2ljZSBzdGF0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIHtAbGluayBFZGl0T3duVm9pY2VTdGF0ZS5jaGFubmVsSWQgfCBjaGFubmVsSWR9IHByb3BlcnR5IG9mIHRoZSBvcHRpb25zIG9iamVjdCBwYXJhbWV0ZXIgbXVzdCBwb2ludCB0byBhIHN0YWdlIGNoYW5uZWwsIGFuZCB0aGUgdXNlciBtdXN0IGFscmVhZHkgaGF2ZSBqb2luZWQgaXQuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgTVVURV9NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvdm9pY2UjbW9kaWZ5LXVzZXItdm9pY2Utc3RhdGV9XG4gICAqL1xuICBlZGl0VXNlclZvaWNlU3RhdGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRVc2VyVm9pY2VTdGF0ZSkgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRWRpdCB0aGUgY3VycmVudCB1c2VyIGFwcGxpY2F0aW9uIHJvbGUgY29ubmVjdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBUaGUgYWNjZXNzIHRva2VuIG9mIHRoZSB1c2VyXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIGlkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBlZGl0IHRoZSByb2xlIGNvbm5lY3Rpb25cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byBlZGl0XG4gICAqIEByZXR1cm5zIHtEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbn1cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyByZXF1aXJlcyB0aGUgYHJvbGVfY29ubmVjdGlvbnMud3JpdGVgIHNjb3BlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvdXNlciN1cGRhdGUtdXNlci1hcHBsaWNhdGlvbi1yb2xlLWNvbm5lY3Rpb259XG4gICAqL1xuICBlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb246IChcbiAgICBiZWFyZXJUb2tlbjogc3RyaW5nLFxuICAgIGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4sXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIHdlYmhvb2suXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZWRpdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkV2ViaG9va30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9XZWJob29rcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2VkaXQtd2ViaG9va31cbiAgICovXG4gIGVkaXRXZWJob29rOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeVdlYmhvb2ssIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9vaz4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIHdlYmhvb2sgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBlZGl0IHRoZSBtZXNzYWdlIG9mLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBlZGl0IHRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNlZGl0LXdlYmhvb2stbWVzc2FnZX1cbiAgICovXG4gIGVkaXRXZWJob29rTWVzc2FnZTogKFxuICAgIHdlYmhvb2tJZDogQmlnU3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgbWVzc2FnZUlkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogRWRpdFdlYmhvb2tNZXNzYWdlT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgd2ViaG9vayB1c2luZyB0aGUgd2ViaG9vayB0b2tlbiwgdGhlcmVieSBieXBhc3NpbmcgdGhlIG5lZWQgZm9yIGF1dGhlbnRpY2F0aW9uICsgcGVybWlzc2lvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZWRpdC5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZWRpdCB0aGUgd2ViaG9vay5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfV2ViaG9va3MgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNtb2RpZnktd2ViaG9vay13aXRoLXRva2VufVxuICAgKi9cbiAgZWRpdFdlYmhvb2tXaXRoVG9rZW46ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgb3B0aW9uczogT21pdDxNb2RpZnlXZWJob29rLCAnY2hhbm5lbElkJz4pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PlxuICAvKipcbiAgICogRWRpdHMgYSBndWlsZCdzIHdlbGNvbWUgc2NyZWVuLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgd2VsY29tZSBzY3JlZW4gb2YuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSB3ZWxjb21lIHNjcmVlbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkV2VsY29tZVNjcmVlbn0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtd2VsY29tZS1zY3JlZW59XG4gICAqL1xuICBlZGl0V2VsY29tZVNjcmVlbjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5R3VpbGRXZWxjb21lU2NyZWVuLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlbGNvbWVTY3JlZW4+PlxuICAvKipcbiAgICogRWRpdHMgdGhlIHNldHRpbmdzIG9mIGEgZ3VpbGQncyB3aWRnZXQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSBzZXR0aW5ncyBvZiB0aGUgd2lkZ2V0IG9mLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC13aWRnZXR9XG4gICAqL1xuICBlZGl0V2lkZ2V0U2V0dGluZ3M6IChcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogQ2FtZWxpemU8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+LFxuICAgIHJlYXNvbj86IHN0cmluZyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPj5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGEgd2ViaG9vaywgY2F1c2luZyBhIG1lc3NhZ2UgdG8gYmUgcG9zdGVkIGluIHRoZSBjaGFubmVsIGNvbmZpZ3VyZWQgZm9yIHRoZSB3ZWJob29rLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGV4ZWN1dGUuXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGV4ZWN1dGUgdGhlIHdlYmhvb2suXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIHdlYmhvb2suXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0sIG9yIGB1bmRlZmluZWRgIGlmIHRoZSB7QGxpbmsgRXhlY3V0ZVdlYmhvb2sud2FpdCB8IHdhaXR9IHByb3BlcnR5IG9mIHRoZSBvcHRpb25zIG9iamVjdCBwYXJhbWV0ZXIgaXMgc2V0IHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIHRoZSB3ZWJob29rIGNoYW5uZWwgaXMgYSBmb3J1bSBjaGFubmVsLCB5b3UgbXVzdCBwcm92aWRlIGEgdmFsdWUgZm9yIGVpdGhlciBgdGhyZWFkSWRgIG9yIGB0aHJlYWROYW1lYC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZXhlY3V0ZS13ZWJob29rfVxuICAgKi9cbiAgZXhlY3V0ZVdlYmhvb2s6ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgb3B0aW9uczogRXhlY3V0ZVdlYmhvb2spID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+IHwgdW5kZWZpbmVkPlxuICAvKipcbiAgICogRm9sbG93cyBhbiBhbm5vdW5jZW1lbnQgY2hhbm5lbCwgYWxsb3dpbmcgbWVzc2FnZXMgcG9zdGVkIHdpdGhpbiBpdCB0byBiZSBjcm9zcy1wb3N0ZWQgaW50byB0aGUgdGFyZ2V0IGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBzb3VyY2VDaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGFubm91bmNlbWVudCBjaGFubmVsIHRvIGZvbGxvdy5cbiAgICogQHBhcmFtIHRhcmdldENoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGFyZ2V0IGNoYW5uZWwgLSB0aGUgY2hhbm5lbCB0byBjcm9zcy1wb3N0IHRvLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkRm9sbG93ZWRDaGFubmVsfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24gaW4gdGhlIF9fdGFyZ2V0IGNoYW5uZWxfXy5cbiAgICpcbiAgICogRmlyZXMgYSBfV2ViaG9va3MgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNmb2xsb3ctYW5ub3VuY2VtZW50LWNoYW5uZWx9XG4gICAqL1xuICBmb2xsb3dBbm5vdW5jZW1lbnQ6IChzb3VyY2VDaGFubmVsSWQ6IEJpZ1N0cmluZywgdGFyZ2V0Q2hhbm5lbElkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRm9sbG93ZWRDaGFubmVsPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgYWxsIGFjdGl2ZSB0aHJlYWRzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSB0aHJlYWRzIG9mLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZExpc3RBY3RpdmVUaHJlYWRzfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmV0dXJucyBib3RoIHB1YmxpYyBhbmQgcHJpdmF0ZSB0aHJlYWRzLlxuICAgKlxuICAgKiBUaHJlYWRzIGFyZSBvcmRlcmVkIGJ5IHRoZSBgaWRgIHByb3BlcnR5IGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNsaXN0LWFjdGl2ZS1ndWlsZC10aHJlYWRzfVxuICAgKi9cbiAgZ2V0QWN0aXZlVGhyZWFkczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHM+PlxuICAvKiogR2V0IHRoZSBhcHBsaWNhdGlvbnMgaW5mbyAqL1xuICBnZXRBcHBsaWNhdGlvbkluZm86ICgpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uPj5cbiAgLyoqXG4gICAqIEVkaXQgcHJvcGVydGllcyBvZiB0aGUgYXBwIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdGluZyBib3QgdXNlci5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogT25seSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHBhc3NlZCB3aWxsIGJlIHVwZGF0ZWQuXG4gICAqL1xuICBlZGl0QXBwbGljYXRpb25JbmZvOiAoYm9keTogRWRpdEFwcGxpY2F0aW9uKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbj4+XG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRpb24gaW5mbyBmb3IgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlclxuICAgKlxuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBBbnkgT0F1dGgyIGRlcml2ZWQgYWNjZXNzIHRva2VuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb259XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoZSB1c2VyIG9iamVjdCBpcyBub3QgZGVmaW5lZCBpZiB0aGUgc2NvcGVzIGRvIG5vdCBpbmNsdWRlIGBpZGVudGlmeWAuXG4gICAqIEluIHRoZSB1c2VyIG9iamVjdCwgaWYgZGVmaW5lZCwgdGhlIGVtYWlsIGlzIG5vdCBpbmNsdWRlZCBpZiB0aGUgc2NvcGVzIGRvIG5vdCBpbmNsdWRlIGBlbWFpbGBcbiAgICovXG4gIGdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm86IChiZWFyZXJUb2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbj4+XG4gIC8qKlxuICAgKiBFeGNoYW5nZSB0aGUgaW5mb3JtYXRpb24gdG8gZ2V0IGEgT0F1dGgyIGFjY2Vzc1Rva2VuIHRva2VuXG4gICAqXG4gICAqIEBwYXJhbSBjbGllbnRJZCAtIEFwcGxpY2F0aW9uJ3MgY2xpZW50IGlkXG4gICAqIEBwYXJhbSBjbGllbnRTZWNyZXQgLSBhcHBsaWNhdGlvbidzIGNsaWVudCBzZWNyZXRcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byBtYWtlIHRoZSBleGNoYW5nZSB3aXRoIGRpc2NvcmRcbiAgICovXG4gIGV4Y2hhbmdlVG9rZW46IChjbGllbnRJZDogQmlnU3RyaW5nLCBjbGllbnRTZWNyZXQ6IHN0cmluZywgb3B0aW9uczogQ2FtZWxpemU8RGlzY29yZFRva2VuRXhjaGFuZ2U+KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBY2Nlc3NUb2tlblJlc3BvbnNlPj5cbiAgLyoqXG4gICAqIFJldm9rZSBhbiBhY2Nlc3NfdG9rZW5cbiAgICpcbiAgICogQHBhcmFtIGNsaWVudElkIC0gQXBwbGljYXRpb24ncyBjbGllbnQgaWRcbiAgICogQHBhcmFtIGNsaWVudFNlY3JldCAtIGFwcGxpY2F0aW9uJ3MgY2xpZW50IHNlY3JldFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIHJldm9rZSB0aGUgYWNjZXNzX3Rva2VuXG4gICAqL1xuICByZXZva2VUb2tlbjogKGNsaWVudElkOiBCaWdTdHJpbmcsIGNsaWVudFNlY3JldDogc3RyaW5nLCBvcHRpb25zOiBDYW1lbGl6ZTxEaXNjb3JkVG9rZW5SZXZvY2F0aW9uPikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogR2V0cyB0aGUgcGVybWlzc2lvbnMgb2YgYSBndWlsZCBhcHBsaWNhdGlvbiBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCBpbi5cbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBnZXQgdGhlIHBlcm1pc3Npb25zIG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBPQXV0aDIgcmVsYXRlZCBvcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgZW5kcG9pbnRcbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlbiBzcGVjaWZ5aW5nIHRoZSBvcHRpb25zIG9iamVjdCB0aGUgYWNjZXNzIHRva2VuIHBhc3NlZC1pbiByZXF1aXJlcyB0aGUgT0F1dGgyIHNjb3BlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMudXBkYXRlYFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWFwcGxpY2F0aW9uLWNvbW1hbmQtcGVybWlzc2lvbnN9XG4gICAqL1xuICBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIGNvbW1hbmRJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM/OiBHZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHBlcm1pc3Npb25zIG9mIGFsbCBhcHBsaWNhdGlvbiBjb21tYW5kcyByZWdpc3RlcmVkIGluIGEgZ3VpbGQgYnkgdGhlIElEIG9mIHRoZSBndWlsZCBhbmQgb3B0aW9uYWxseSBhbiBleHRlcm5hbCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgcGVybWlzc2lvbnMgb2JqZWN0cyBvZi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgT0F1dGgyIHJlbGF0ZWQgb3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIGVuZHBvaW50XG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnN9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY29tbWFuZCBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlbiBzcGVjaWZ5aW5nIHRoZSBvcHRpb25zIG9iamVjdCB0aGUgYWNjZXNzIHRva2VuIHBhc3NlZC1pbiByZXF1aXJlcyB0aGUgT0F1dGgyIHNjb3BlIGBhcHBsaWNhdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMudXBkYXRlYFxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmQtcGVybWlzc2lvbnN9XG4gICAqL1xuICBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uczogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zPzogR2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbk9wdGlvbnMsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz5bXT5cbiAgLyoqXG4gICAqIEdldHMgYSBndWlsZCdzIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgYXVkaXQgbG9nIG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRBdWRpdExvZ30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgVklFV19BVURJVF9MT0dgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9hdWRpdC1sb2cjZ2V0LWd1aWxkLWF1ZGl0LWxvZ31cbiAgICovXG4gIGdldEF1ZGl0TG9nOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0R3VpbGRBdWRpdExvZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXVkaXRMb2c+PlxuICAvKipcbiAgICogR2V0cyBhbiBhdXRvbW9kIHJ1bGUgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBydWxlIG9mLlxuICAgKiBAcGFyYW0gcnVsZUlkIC0gVGhlIElEIG9mIHRoZSBydWxlIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNnZXQtYXV0by1tb2RlcmF0aW9uLXJ1bGV9XG4gICAqL1xuICBnZXRBdXRvbW9kUnVsZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcnVsZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGF1dG9tb2QgcnVsZXMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHJ1bGVzIGZyb20uXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZX0gb2JqZWN0cyBhc3NvcnRlZCBieSBydWxlIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNsaXN0LWF1dG8tbW9kZXJhdGlvbi1ydWxlcy1mb3ItZ3VpbGR9XG4gICAqL1xuICBnZXRBdXRvbW9kUnVsZXM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT5bXT5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHZvaWNlIHJlZ2lvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFZvaWNlUmVnaW9ufSBvYmplY3RzIGFzc29ydGVkIGJ5IHZvaWNlIHJlZ2lvbiBJRC5cbiAgICovXG4gIGdldEF2YWlsYWJsZVZvaWNlUmVnaW9uczogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVm9pY2VSZWdpb24+W10+XG4gIC8qKlxuICAgKiBHZXRzIGEgYmFuIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGJhbiBmcm9tLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGdldCB0aGUgYmFuIGZvci5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRCYW59LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYEJBTl9NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLWJhbn1cbiAgICovXG4gIGdldEJhbjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEJhbj4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGJhbnMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2YgYmFucyBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgbGlzdCBvZiBiYW5zLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRCYW59IG9iamVjdHMgYXNzb3J0ZWQgYnkgdXNlciBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBCQU5fTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogVXNlcnMgYXJlIG9yZGVyZWQgYnkgdGhlaXIgSURzIGluIF9hc2NlbmRpbmdfIG9yZGVyLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLWJhbnN9XG4gICAqL1xuICBnZXRCYW5zOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0QmFucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQmFuPltdPlxuICAvKipcbiAgICogR2V0cyBhIGNoYW5uZWwgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRDaGFubmVsfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgdGhlIGNoYW5uZWwgaXMgYSB0aHJlYWQsIGEge0BsaW5rIERpc2NvcmRUaHJlYWRNZW1iZXJ9IG9iamVjdCBpcyBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtY2hhbm5lbH1cbiAgICovXG4gIGdldENoYW5uZWw6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGludml0ZXMgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIGludml0ZXMgb2YuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEludml0ZU1ldGFkYXRhfSBvYmplY3RzIGFzc29ydGVkIGJ5IGludml0ZSBjb2RlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogT25seSB1c2FibGUgZm9yIGd1aWxkIGNoYW5uZWxzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtY2hhbm5lbC1pbnZpdGVzfVxuICAgKi9cbiAgZ2V0Q2hhbm5lbEludml0ZXM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkSW52aXRlTWV0YWRhdGE+W10+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGNoYW5uZWxzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBjaGFubmVscyBvZi5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjaGFubmVsIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBFeGNsdWRlcyB0aHJlYWRzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLWNoYW5uZWxzfVxuICAgKi9cbiAgZ2V0Q2hhbm5lbHM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+W10+XG4gIC8qKlxuICAgKiBHZXRzIGEgbGlzdCBvZiB3ZWJob29rcyBmb3IgYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHdoaWNoIHRvIGdldCB0aGUgd2ViaG9va3Mgb2YuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9IG9iamVjdHMgYXNzb3J0ZWQgYnkgd2ViaG9vayBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2dldC1jaGFubmVsLXdlYmhvb2tzfVxuICAgKi9cbiAgZ2V0Q2hhbm5lbFdlYmhvb2tzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+W10+XG4gIC8qKlxuICAgKiBHZXRzIG9yIGNyZWF0ZXMgYSBETSBjaGFubmVsIHdpdGggYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGNyZWF0ZSB0aGUgRE0gY2hhbm5lbCB3aXRoLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvdXNlciNjcmVhdGUtZG19XG4gICAqL1xuICBnZXREbUNoYW5uZWw6ICh1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgZ3JvdXAgRE0gY2hhbm5lbCB3aXRoIG11bHRpcGxlIHVzZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBjcmVhdGUgYSBuZXcgZ3JvdXAgZG1cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRDaGFubmVsfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFjY2VzcyB0b2tlbnMgcmVxdWlyZSB0byBoYXZlIHRoZSBgZ2RtLmpvaW5gIHNjb3BlXG4gICAqXG4gICAqIFRoaXMgZW5kcG9pbnQgaXMgbGltaXRlZCB0byAxMCBhY3RpdmUgZ3JvdXAgRE1zLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIGNyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3VzZXIjY3JlYXRlLWdyb3VwLWRtfVxuICAgKi9cbiAgZ2V0R3JvdXBEbUNoYW5uZWw6IChvcHRpb25zOiBDcmVhdGVHcm91cERtT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gIC8qKlxuICAgKiBHZXRzIGFuIGVtb2ppIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGZyb20gd2hpY2ggdG8gZ2V0IHRoZSBlbW9qaS5cbiAgICogQHBhcmFtIGVtb2ppSWQgLSBUaGUgSUQgb2YgdGhlIGVtb2ppIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRFbW9qaX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEluY2x1ZGVzIHRoZSBgdXNlcmAgZmllbGQgaWYgdGhlIGJvdCBoYXMgdGhlIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24sXG4gICAqIG9yIGlmIHRoZSBib3QgY3JlYXRlZCB0aGUgZW1vamkgYW5kIGhhcyB0aGUgdGhlIGBDUkVBVEVfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNnZXQtZ3VpbGQtZW1vaml9XG4gICAqL1xuICBnZXRFbW9qaTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgZW1vamlJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT4+XG4gIC8qKlxuICAgKiBHZXRzIGFuIGFwcGxpY2F0aW9uIGVtb2ppIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGVtb2ppSWQgLSBUaGUgSUQgb2YgdGhlIGVtb2ppIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRFbW9qaX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEFsd2F5cyBpbmNsdWRlcyB0aGUgYHVzZXJgIG9iamVjdCBmb3IgdGhlIHRlYW0gbWVtYmVyIHRoYXQgdXBsb2FkZWQgdGhlIGVtb2ppIGZyb20gdGhlIGFwcCdzIHNldHRpbmdzLCBvciBmb3IgdGhlIGJvdCB1c2VyIGlmIHVwbG9hZGVkIHVzaW5nIHRoZSBBUEkuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNnZXQtYXBwbGljYXRpb24tZW1vaml9XG4gICAqL1xuICBnZXRBcHBsaWNhdGlvbkVtb2ppOiAoZW1vamlJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGVtb2ppcyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHdoaWNoIHRvIGdldCB0aGUgZW1vamlzIG9mLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRFbW9qaX0gb2JqZWN0cyBhc3NvcnRlZCBieSBlbW9qaSBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSW5jbHVkZXMgYHVzZXJgIGZpZWxkcyBpZiB0aGUgYm90IGhhcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2Vtb2ppI2xpc3QtZ3VpbGQtZW1vamlzfVxuICAgKi9cbiAgZ2V0RW1vamlzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT5bXT5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgZW1vamlzIGZvciBhbiBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIGFycmF5IG9mIHtAbGluayBEaXNjb3JkRW1vaml9IG9iamVjdHMuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEFsd2F5cyBpbmNsdWRlcyB0aGUgYHVzZXJgIG9iamVjdCBmb3IgdGhlIHRlYW0gbWVtYmVyIHRoYXQgdXBsb2FkZWQgdGhlIGVtb2ppIGZyb20gdGhlIGFwcCdzIHNldHRpbmdzLCBvciBmb3IgdGhlIGJvdCB1c2VyIGlmIHVwbG9hZGVkIHVzaW5nIHRoZSBBUEkuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNsaXN0LWFwcGxpY2F0aW9uLWVtb2ppc31cbiAgICovXG4gIGdldEFwcGxpY2F0aW9uRW1vamlzOiAoKSA9PiBQcm9taXNlPHsgaXRlbXM6IENhbWVsaXplPERpc2NvcmRFbW9qaT5bXSB9PlxuICAvKipcbiAgICogR2V0cyBhIGZvbGxvdy11cCBtZXNzYWdlIHRvIGFuIGludGVyYWN0aW9uIGJ5IHRoZSBJRCBvZiB0aGUgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVW5saWtlIGBnZXRNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQ6XG4gICAqIC0gTmVlZGluZyB0byBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgdGhhdCB0aGUgbWVzc2FnZSBpcyBpbi4gKGBSRUFEX01FU1NBR0VTYCBwZXJtaXNzaW9uLilcbiAgICogLSBSZXF1aXJpbmcgdGhlIGBNRVNTQUdFX0NPTlRFTlRgIGludGVudC5cbiAgICpcbiAgICogRG9lcyBub3Qgc3VwcG9ydCBlcGhlbWVyYWwgZm9sbG93LXVwIG1lc3NhZ2VzIGR1ZSB0byB0aGVzZSBiZWluZyBzdGF0ZWxlc3MuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZ2V0LWZvbGxvd3VwLW1lc3NhZ2V9XG4gICAqL1xuICBnZXRGb2xsb3d1cE1lc3NhZ2U6ICh0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKiBHZXQgdGhlIGJvdHMgR2F0ZXdheSBtZXRhZGF0YSB0aGF0IGNhbiBoZWxwIGR1cmluZyB0aGUgb3BlcmF0aW9uIG9mIGxhcmdlIG9yIHNoYXJkZWQgYm90cy4gKi9cbiAgZ2V0R2F0ZXdheUJvdDogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD4+XG4gIC8qKlxuICAgKiBHZXRzIGEgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmQgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHlvdXIgYm90J3MgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmRzLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmRzXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjb21tYW5kIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kc31cbiAgICovXG4gIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHM6IChvcHRpb25zPzogR2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kc09wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD5bXT5cbiAgLyoqXG4gICAqIEdldHMgYSBndWlsZCBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgZ3VpbGQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkR3VpbGR9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkfVxuICAgKi9cbiAgZ2V0R3VpbGQ6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiB7IGNvdW50cz86IGJvb2xlYW4gfSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGQ+PlxuICAvKipcbiAgICogR2V0IHRoZSB1c2VyIGd1aWxkcy5cbiAgICpcbiAgICogQHBhcmFtIGJlYXJlclRva2VuIC0gVGhlIGFjY2VzcyB0b2tlbiBvZiB0aGUgdXNlciwgaWYgdW5zcGVjaWZpZWQgdGhlIGJvdCB0b2tlbiBpcyB1c2VkIGluc3RlYWRcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBndWlsZC5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgcGFydGlhbCB7QGxpbmsgRGlzY29yZEd1aWxkfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgdXNlZCB3aXRoIGFuIGFjY2VzcyB0b2tlbiwgdGhlIHRva2VuIG5lZWRzIHRvIGhhdmUgdGhlIGBndWlsZHNgIHNjb3BlXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy91c2VyI2dldC1jdXJyZW50LXVzZXItZ3VpbGRzfVxuICAgKi9cbiAgZ2V0R3VpbGRzOiAoYmVhcmVyVG9rZW4/OiBzdHJpbmcsIG9wdGlvbnM/OiBHZXRVc2VyR3VpbGRzKSA9PiBQcm9taXNlPFBhcnRpYWw8Q2FtZWxpemU8RGlzY29yZEd1aWxkPj5bXT5cbiAgLyoqXG4gICAqIEdldHMgYSBndWlsZCBhcHBsaWNhdGlvbiBjb21tYW5kIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kIGlzIHJlZ2lzdGVyZWQgaW4uXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZH0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcsIGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgYXBwbGljYXRpb24gY29tbWFuZHMgcmVnaXN0ZXJlZCBieSB5b3VyIGJvdCBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIGNvbW1hbmRzIGFyZSByZWdpc3RlcmVkIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgZ3VpbGQgYXBwbGljYXRpb24gY29tbWFuZHNcbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmRzc31cbiAgICovXG4gIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kc09wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD5bXT5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHByZXZpZXcgb2YgYSBndWlsZCBieSBhIGd1aWxkJ3MgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHByZXZpZXcgb2YuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkR3VpbGRQcmV2aWV3fS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgdGhlIGJvdCB1c2VyIGlzIG5vdCBpbiB0aGUgZ3VpbGQsIHRoZSBndWlsZCBtdXN0IGJlIGRpc2NvdmVyYWJsZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1wcmV2aWV3fVxuICAgKi9cbiAgZ2V0R3VpbGRQcmV2aWV3OiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZFByZXZpZXc+PlxuICAvKipcbiAgICogUmV0dXJucyBhIHN0aWNrZXIgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gZ3VpbGQgYW5kIHN0aWNrZXIgSURzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldFxuICAgKiBAcGFyYW0gc3RpY2tlcklkIFRoZSBJRCBvZiB0aGUgc3RpY2tlciB0byBnZXRcbiAgICogQHJldHVybiBBIHtAbGluayBEaXNjb3JkU3RpY2tlcn1cbiAgICpcbiAgICogQHJlbWFya3MgSW5jbHVkZXMgdGhlIHVzZXIgZmllbGQgaWYgdGhlIGJvdCBoYXMgdGhlIGBDUkVBVEVfR1VJTERfRVhQUkVTU0lPTlNgIG9yIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9zdGlja2VyI2dldC1ndWlsZC1zdGlja2VyfVxuICAgKi9cbiAgZ2V0R3VpbGRTdGlja2VyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBzdGlja2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RpY2tlcj4+XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHN0aWNrZXIgb2JqZWN0cyBmb3IgdGhlIGdpdmVuIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldFxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRTdGlja2VyfSBvYmplY3RzIGFzc29ydGVkIGJ5IHN0aWNrZXIgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzIEluY2x1ZGVzIHVzZXIgZmllbGRzIGlmIHRoZSBib3QgaGFzIHRoZSBgQ1JFQVRFX0dVSUxEX0VYUFJFU1NJT05TYCBvciBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RpY2tlciNsaXN0LWd1aWxkLXN0aWNrZXJzfVxuICAgKi9cbiAgZ2V0R3VpbGRTdGlja2VyczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RpY2tlcj5bXT5cbiAgLyoqXG4gICAqIEdldHMgYSB0ZW1wbGF0ZSBieSBpdHMgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIHRlbXBsYXRlQ29kZSAtIFRoZSBjb2RlIG9mIHRoZSB0ZW1wbGF0ZSB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkVGVtcGxhdGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXRlbXBsYXRlI2dldC1ndWlsZC10ZW1wbGF0ZX1cbiAgICovXG4gIGdldEd1aWxkVGVtcGxhdGU6ICh0ZW1wbGF0ZUNvZGU6IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiB0ZW1wbGF0ZXMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2YgdGVtcGxhdGVzIGZvci5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkVGVtcGxhdGV9IG9iamVjdHMgYXNzb3J0ZWQgYnkgdGVtcGxhdGUgY29kZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNnZXQtZ3VpbGQtdGVtcGxhdGVzfVxuICAgKi9cbiAgZ2V0R3VpbGRUZW1wbGF0ZXM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPltdPlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiB3ZWJob29rcyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiB3ZWJob29rcyBmb3IuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9IG9iamVjdHMgYXNzb3J0ZWQgYnkgd2ViaG9vayBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2dldC1ndWlsZC13ZWJob29rc31cbiAgICovXG4gIGdldEd1aWxkV2ViaG9va3M6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+W10+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGludGVncmF0aW9ucyBhdHRhY2hlZCB0byBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIGludGVncmF0aW9ucyBmcm9tLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRJbnRlZ3JhdGlvbn0gb2JqZWN0cyBhc3NvcnRlZCBieSBpbnRlZ3JhdGlvbiBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtaW50ZWdyYXRpb25zfVxuICAgKi9cbiAgZ2V0SW50ZWdyYXRpb25zOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRJbnRlZ3JhdGlvbj5bXT5cbiAgLyoqXG4gICAqIEdldHMgYW4gaW52aXRlIHRvIGEgY2hhbm5lbCBieSBpdHMgaW52aXRlIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSBpbnZpdGVDb2RlIC0gVGhlIGludml0ZSBjb2RlIG9mIHRoZSBpbnZpdGUgdG8gZ2V0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIGludml0ZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRJbnZpdGVNZXRhZGF0YX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9pbnZpdGUjZ2V0LWludml0ZX1cbiAgICovXG4gIGdldEludml0ZTogKGludml0ZUNvZGU6IHN0cmluZywgb3B0aW9ucz86IEdldEludml0ZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkSW52aXRlTWV0YWRhdGE+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBpbnZpdGVzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBpbnZpdGVzIGZyb20uXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEludml0ZU1ldGFkYXRhfSBvYmplY3RzIGFzc29ydGVkIGJ5IGludml0ZSBjb2RlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgb3IgYFZJRVdfQVVESVRfTE9HYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvaW52aXRlI2dldC1pbnZpdGVzfVxuICAgKi9cbiAgZ2V0SW52aXRlczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkSW52aXRlTWV0YWRhdGE+W10+XG4gIC8qKlxuICAgKiBHZXRzIGEgbWVzc2FnZSBmcm9tIGEgY2hhbm5lbCBieSB0aGUgSUQgb2YgdGhlIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgZnJvbSB3aGljaCB0byBnZXQgdGhlIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGF0IHRoZSBib3QgdXNlciBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdGhlIG1lc3NhZ2Ugd2FzIHBvc3RlZC5cbiAgICpcbiAgICogSWYgZ2V0dGluZyBhIG1lc3NhZ2UgZnJvbSBhIGd1aWxkIGNoYW5uZWw6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZ2V0LWNoYW5uZWwtbWVzc2FnZX1cbiAgICovXG4gIGdldE1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogR2V0cyBtdWx0aXBsZSBtZXNzYWdlcyBmcm9tIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBmcm9tIHdoaWNoIHRvIGdldCB0aGUgbWVzc2FnZXMuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgbWVzc2FnZXMuXG4gICAqIEByZXR1cm5zIFJldHVybnMgYW4gYXJyYXkgb2Yge0BsaW5rIERpc2NvcmRNZXNzYWdlfSBvYmplY3RzIGZyb20gbmV3ZXN0IHRvIG9sZGVzdCBvbiBzdWNjZXNzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGF0IHRoZSBib3QgdXNlciBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdGhlIG1lc3NhZ2VzIHdlcmUgcG9zdGVkLlxuICAgKlxuICAgKiBJZiBnZXR0aW5nIGEgbWVzc2FnZXMgZnJvbSBhIGd1aWxkIGNoYW5uZWw6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZ2V0LWNoYW5uZWwtbWVzc2FnZXN9XG4gICAqL1xuICBnZXRNZXNzYWdlczogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0TWVzc2FnZXNPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPltdPlxuICAvKipcbiAgICogUmV0dXJucyBhIHN0aWNrZXIgcGFjayBmb3IgdGhlIGdpdmVuIElELlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBEaXNjb3JkU3RpY2tlclBhY2t9IG9iamVjdC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0aWNrZXIjZ2V0LXN0aWNrZXItcGFja31cbiAgICovXG4gIGdldFN0aWNrZXJQYWNrOiAoc3RpY2tlclBhY2tJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGlja2VyUGFjaz4+XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHN0aWNrZXIgcGFja3MgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRTdGlja2VyUGFja30gb2JqZWN0cyBhc3NvcnRlZCBieSBzdGlja2VyIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RpY2tlciNsaXN0LXN0aWNrZXItcGFja3N9XG4gICAqL1xuICBnZXRTdGlja2VyUGFja3M6ICgpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0aWNrZXJQYWNrPltdPlxuICAvKipcbiAgICogR2V0cyB0aGUgaW5pdGlhbCBtZXNzYWdlIHJlc3BvbnNlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZ2V0TWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAqXG4gICAqIERvZXMgbm90IHN1cHBvcnQgZXBoZW1lcmFsIGZvbGxvdy11cCBtZXNzYWdlcyBkdWUgdG8gdGhlc2UgYmVpbmcgc3RhdGVsZXNzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2dldC1vcmlnaW5hbC1pbnRlcmFjdGlvbi1yZXNwb25zZX1cbiAgICovXG4gIGdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZTogKHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHBpbnMgaW4gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldCB0aGUgcGlucyBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgcGlucy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzY29yZEdldENoYW5uZWxQaW5zfSBvYmplY3RzXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgVklFV19DSEFOTkVMYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiB0aGUgdXNlciBpcyBtaXNzaW5nIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24gaW4gdGhlIGNoYW5uZWwsIHRoZW4gbm8gcGlucyB3aWxsIGJlIHJldHVybmVkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvbWVzc2FnZSNnZXQtY2hhbm5lbC1waW5zfVxuICAgKi9cbiAgZ2V0Q2hhbm5lbFBpbnM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldENoYW5uZWxQaW5zT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR2V0Q2hhbm5lbFBpbnM+PlxuICAvKipcbiAgICogR2V0cyB0aGUgcGlubmVkIG1lc3NhZ2VzIGZvciBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0IHRoZSBwaW5uZWQgbWVzc2FnZXMgZm9yLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRNZXNzYWdlfSBvYmplY3RzIGFzc29ydGVkIGJ5IG1lc3NhZ2UgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoYXQgdGhlIGJvdCB1c2VyIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0aGUgbWVzc2FnZXMgd2VyZSBwb3N0ZWQuXG4gICAqXG4gICAqIElmIGdldHRpbmcgYSBtZXNzYWdlIGZyb20gYSBndWlsZCBjaGFubmVsOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9tZXNzYWdlI2dldC1waW5uZWQtbWVzc2FnZXMtZGVwcmVjYXRlZH1cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBnZXRDaGFubmVsUGluc30gaW5zdGVhZC5cbiAgICovXG4gIGdldFBpbm5lZE1lc3NhZ2VzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+W10+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHByaXZhdGUgYXJjaGl2ZWQgdGhyZWFkcyBmb3IgYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldCB0aGUgYXJjaGl2ZWQgdGhyZWFkcyBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aHJlYWRzLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHN9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9USFJFQURTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBSZXR1cm5zIHRocmVhZHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZFByaXZhdGVUaHJlYWQuXG4gICAqXG4gICAqIFRocmVhZHMgYXJlIG9yZGVyZWQgYnkgdGhlIGBhcmNoaXZlX3RpbWVzdGFtcGAgcHJvcGVydHkgaW5jbHVkZWQgaW4gdGhlIG1ldGFkYXRhIG9mIHRoZSBvYmplY3QgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjbGlzdC1wcml2YXRlLWFyY2hpdmVkLXRocmVhZHN9XG4gICAqL1xuICBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0QXJjaGl2ZWRUaHJlYWRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgcHJpdmF0ZSBhcmNoaXZlZCB0aHJlYWRzIHRoZSBib3QgaXMgYSBtZW1iZXIgb2YgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIGFyY2hpdmVkIHRocmVhZHMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhyZWFkcy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogUmV0dXJucyB0aHJlYWRzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGRQcml2YXRlVGhyZWFkLlxuICAgKlxuICAgKiBUaHJlYWRzIGFyZSBvcmRlcmVkIGJ5IHRoZSBgaWRgIHByb3BlcnR5IGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2xpc3Qtam9pbmVkLXByaXZhdGUtYXJjaGl2ZWQtdGhyZWFkc31cbiAgICovXG4gIGdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IExpc3RBcmNoaXZlZFRocmVhZHMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbnVtYmVyIG9mIG1lbWJlcnMgdGhhdCB3b3VsZCBiZSBraWNrZWQgZnJvbSBhIGd1aWxkIGR1cmluZyBwcnVuaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBwcnVuZSBjb3VudCBvZi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBwcnVuZSBjb3VudC5cbiAgICogQHJldHVybnMgQSBudW1iZXIgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIG1lbWJlcnMgdGhhdCB3b3VsZCBiZSBraWNrZWQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBhbmQgYEtJQ0tfTUVNQkVSU2AgcGVybWlzc2lvbnMuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtcHJ1bmUtY291bnR9XG4gICAqL1xuICBnZXRQcnVuZUNvdW50OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0R3VpbGRQcnVuZUNvdW50UXVlcnkpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFBydW5lZENvdW50Pj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgcHVibGljIGFyY2hpdmVkIHRocmVhZHMgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIGFyY2hpdmVkIHRocmVhZHMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhyZWFkcy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgY2FsbGVkIG9uIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXN9Lkd1aWxkVGV4dCwgcmV0dXJucyB0aHJlYWRzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGRQdWJsaWNUaHJlYWQuXG4gICAqIElmIGNhbGxlZCBvbiBhIGNoYW5uZWwgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzfS5HdWlsZE5ld3MsIHJldHVybnMgdGhyZWFkcyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXN9Lkd1aWxkTmV3c1RocmVhZC5cbiAgICpcbiAgICogVGhyZWFkcyBhcmUgb3JkZXJlZCBieSB0aGUgYGFyY2hpdmVfdGltZXN0YW1wYCBwcm9wZXJ0eSBpbmNsdWRlZCBpbiB0aGUgbWV0YWRhdGEgb2YgdGhlIG9iamVjdCBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNsaXN0LXB1YmxpYy1hcmNoaXZlZC10aHJlYWRzfVxuICAgKi9cbiAgZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0QXJjaGl2ZWRUaHJlYWRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2Ygcm9sZXMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGxpc3Qgb2Ygcm9sZXMgZm9yLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRSb2xlfSBvYmplY3RzIGFzc29ydGVkIGJ5IHJvbGUgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKaoO+4jyBUaGlzIGVuZHBvaW50IHNob3VsZCBiZSB1c2VkIHNwYXJpbmdseSBkdWUgdG8ge0BsaW5rIERpc2NvcmRSb2xlfSBvYmplY3RzIGFscmVhZHkgYmVpbmcgaW5jbHVkZWQgaW4gZ3VpbGQgcGF5bG9hZHMuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtcm9sZXN9XG4gICAqL1xuICBnZXRSb2xlczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkUm9sZT5bXT5cbiAgLyoqXG4gICAqIEdldHMgYSByb2xlIGJ5IGlkIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHJvbGUgZm9yLlxuICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBEaXNjb3JkUm9sZX0gb2JqZWN0LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLXJvbGV9XG4gICAqL1xuICBnZXRSb2xlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCByb2xlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkUm9sZT4+XG4gIC8qKlxuICAgKiBHZXRzIGEgc2NoZWR1bGVkIGV2ZW50IGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgc2NoZWR1bGVkIGV2ZW50IGZyb20uXG4gICAqIEBwYXJhbSBldmVudElkIC0gVGhlIElEIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQgdG8gZ2V0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHNjaGVkdWxlZCBldmVudC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRTY2hlZHVsZWRFdmVudH0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjZ2V0LWd1aWxkLXNjaGVkdWxlZC1ldmVudH1cbiAgICovXG4gIGdldFNjaGVkdWxlZEV2ZW50OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBldmVudElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiB7IHdpdGhVc2VyQ291bnQ/OiBib29sZWFuIH0pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNjaGVkdWxlZEV2ZW50Pj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2Ygc2NoZWR1bGVkIGV2ZW50cyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgc2NoZWR1bGVkIGV2ZW50cyBmcm9tLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHNjaGVkdWxlZCBldmVudHMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFNjaGVkdWxlZEV2ZW50fSBvYmplY3RzIGFzc29ydGVkIGJ5IGV2ZW50IElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I2xpc3Qtc2NoZWR1bGVkLWV2ZW50cy1mb3ItZ3VpbGR9XG4gICAqL1xuICBnZXRTY2hlZHVsZWRFdmVudHM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRTY2hlZHVsZWRFdmVudHMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNjaGVkdWxlZEV2ZW50PltdPlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBzdWJzY3JpYmVycyB0byBhIHNjaGVkdWxlZCBldmVudCBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHN1YnNjcmliZXJzIHRvIHRoZSBzY2hlZHVsZWQgZXZlbnQgZnJvbS5cbiAgICogQHBhcmFtIGV2ZW50SWQgLSBUaGUgSUQgb2YgdGhlIHNjaGVkdWxlZCBldmVudCB0byBnZXQgdGhlIHN1YnNjcmliZXJzIG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHN1YnNjcmliZXJzLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRVc2VyfSBvYmplY3RzIGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VWRU5UU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogVXNlcnMgYXJlIG9yZGVyZWQgYnkgdGhlaXIgSURzIGluIF9hc2NlbmRpbmdfIG9yZGVyLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I2dldC1ndWlsZC1zY2hlZHVsZWQtZXZlbnQtdXNlcnN9XG4gICAqL1xuICBnZXRTY2hlZHVsZWRFdmVudFVzZXJzOiAoXG4gICAgZ3VpbGRJZDogQmlnU3RyaW5nLFxuICAgIGV2ZW50SWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zPzogR2V0U2NoZWR1bGVkRXZlbnRVc2VycyxcbiAgKSA9PiBQcm9taXNlPEFycmF5PHsgdXNlcjogQ2FtZWxpemU8RGlzY29yZFVzZXI+OyBtZW1iZXI/OiBDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyPiB9Pj5cbiAgLyoqIEdldCB0aGUgYm90cyBHYXRld2F5IG1ldGFkYXRhIHRoYXQgY2FuIGhlbHAgZHVyaW5nIHRoZSBvcGVyYXRpb24gb2YgbGFyZ2Ugb3Igc2hhcmRlZCBib3RzLiAqL1xuICBnZXRTZXNzaW9uSW5mbzogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR2V0R2F0ZXdheUJvdD4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdGFnZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggYSBzdGFnZSBjaGFubmVsLCBpZiBvbmUgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBzdGFnZSBjaGFubmVsIHRoZSBzdGFnZSBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkU3RhZ2VJbnN0YW5jZX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9zdGFnZS1pbnN0YW5jZSNnZXQtc3RhZ2UtaW5zdGFuY2V9XG4gICAqL1xuICBnZXRTdGFnZUluc3RhbmNlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0YWdlSW5zdGFuY2U+PlxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCB1c2VyJ3Mgdm9pY2Ugc3RhdGUgaW4gdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSB2b2ljZSBzdGF0ZSBmcm9tLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFZvaWNlU3RhdGV9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvdm9pY2UjZ2V0LWN1cnJlbnQtdXNlci12b2ljZS1zdGF0ZX1cbiAgICovXG4gIGdldE93blZvaWNlU3RhdGU6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFZvaWNlU3RhdGU+PlxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3BlY2lmaWVkIHVzZXIncyB2b2ljZSBzdGF0ZSBpbiB0aGUgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHZvaWNlIHN0YXRlIGZyb20uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gZ2V0IHRoZSB2b2ljZSBzdGF0ZSBmcm9tXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkVm9pY2VTdGF0ZX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy92b2ljZSNnZXQtdXNlci12b2ljZS1zdGF0ZX1cbiAgICovXG4gIGdldFVzZXJWb2ljZVN0YXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVm9pY2VTdGF0ZT4+XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RpY2tlciBvYmplY3QgZm9yIHRoZSBnaXZlbiBzdGlja2VyIElELlxuICAgKlxuICAgKiBAcGFyYW0gc3RpY2tlcklkIFRoZSBJRCBvZiB0aGUgc3RpY2tlciB0byBnZXRcbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzY29yZFN0aWNrZXJ9XG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9zdGlja2VyI2dldC1zdGlja2VyfVxuICAgKi9cbiAgZ2V0U3RpY2tlcjogKHN0aWNrZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGlja2VyPj5cbiAgLyoqXG4gICAqIEdldHMgYSB0aHJlYWQgbWVtYmVyIGJ5IHRoZWlyIHVzZXIgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRocmVhZCB0byBnZXQgdGhlIHRocmVhZCBtZW1iZXIgb2YuXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgdGhyZWFkIG1lbWJlciB0byBnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgdGhyZWFkIG1lbWJlci5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRUaHJlYWRNZW1iZXJ9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtdGhyZWFkLW1lbWJlcn1cbiAgICovXG4gIGdldFRocmVhZE1lbWJlcjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldFRocmVhZE1lbWJlcikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGhyZWFkTWVtYmVyPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgdGhyZWFkIG1lbWJlcnMgZm9yIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gZ2V0IHRoZSB0aHJlYWQgbWVtYmVycyBvZi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSB0aHJlYWQgbWVtYmVycy5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkVGhyZWFkTWVtYmVyfSBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYXBwbGljYXRpb24gdG8gaGF2ZSB0aGUgYEdVSUxEX01FTUJFUlNgIHByaXZpbGVnZWQgaW50ZW50IGVuYWJsZWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2xpc3QtdGhyZWFkLW1lbWJlcnN9XG4gICAqL1xuICBnZXRUaHJlYWRNZW1iZXJzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0VGhyZWFkTWVtYmVycykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGhyZWFkTWVtYmVyPltdPlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiB1c2VycyB0aGF0IHJlYWN0ZWQgd2l0aCBhbiBlbW9qaSB0byBhIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgdG8gZ2V0IHRoZSB1c2VycyBmb3IgaXMgaW4uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZ2V0IHRoZSB1c2VycyBmb3IuXG4gICAqIEBwYXJhbSByZWFjdGlvbiAtIFRoZSByZWFjdGlvbiBmb3Igd2hpY2ggdG8gZ2V0IHRoZSB1c2Vycy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSB1c2Vycy5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkVXNlcn0gb2JqZWN0cyBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtcmVhY3Rpb25zfVxuICAgKi9cbiAgZ2V0UmVhY3Rpb25zOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCByZWFjdGlvbjogc3RyaW5nLCBvcHRpb25zPzogR2V0UmVhY3Rpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRVc2VyPltdPlxuICAvKipcbiAgICogR2V0IGEgdXNlcidzIGRhdGEgZnJvbSB0aGUgYXBpXG4gICAqXG4gICAqIEBwYXJhbSBpZCBUaGUgdXNlcidzIGlkXG4gICAqIEByZXR1cm5zIHtEaXNjb3JkVXNlcn1cbiAgICovXG4gIGdldFVzZXI6IChpZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRVc2VyPj5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB1c2VyIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gb2YgdGhlIHVzZXJcbiAgICogQHJldHVybnMge0Rpc2NvcmRVc2VyfVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIHJlcXVpcmVzIHRoZSBgaWRlbnRpZnlgIHNjb3BlLlxuICAgKlxuICAgKiBUbyBnZXQgdGhlIG1haWwgdGhpcyBhbHNvIHJlcXVpcmVzIHRoZSBgZW1haWxgIHNjb3BlXG4gICAqL1xuICBnZXRDdXJyZW50VXNlcjogKGJlYXJlclRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFVzZXI+PlxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHVzZXIgY29ubmVjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gb2YgdGhlIHVzZXJcbiAgICogQHJldHVybnMge0Rpc2NvcmRDb25uZWN0aW9uW119XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgcmVxdWlyZXMgdGhlIGBjb25uZWN0aW9uc2Agc2NvcGUuXG4gICAqL1xuICBnZXRVc2VyQ29ubmVjdGlvbnM6IChiZWFyZXJUb2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDb25uZWN0aW9uPltdPlxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHVzZXIgYXBwbGljYXRpb24gcm9sZSBjb25uZWN0aW9uIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gb2YgdGhlIHVzZXJcbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uSWQgLSBUaGUgaWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGdldCB0aGUgcm9sZSBjb25uZWN0aW9uXG4gICAqIEByZXR1cm5zIHtEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbn1cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFjY2VzcyB0b2tlbiByZXF1aXJlcyB0aGUgYHJvbGVfY29ubmVjdGlvbnMud3JpdGVgIHNjb3BlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvdXNlciNnZXQtdXNlci1hcHBsaWNhdGlvbi1yb2xlLWNvbm5lY3Rpb259XG4gICAqL1xuICBnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbjogKGJlYXJlclRva2VuOiBzdHJpbmcsIGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4+XG4gIC8qKlxuICAgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2YW5pdHkgdXJsIG9mIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHZhbml0eSB1cmwgaW5mb3JtYXRpb24gZm9yLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFZhbml0eVVybH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBUaGUgYGNvZGVgIHByb3BlcnR5IHdpbGwgYmUgYG51bGxgIGlmIHRoZSBndWlsZCBkb2VzIG5vdCBoYXZlIGEgc2V0IHZhbml0eSB1cmwuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtdmFuaXR5LXVybH1cbiAgICovXG4gIGdldFZhbml0eVVybDogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVmFuaXR5VXJsPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2Ygdm9pY2UgcmVnaW9ucyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgdm9pY2UgcmVnaW9ucyBmb3IuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFZvaWNlUmVnaW9ufSBvYmplY3RzIGFzc29ydGVkIGJ5IHZvaWNlIHJlZ2lvbiBJRC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC12b2ljZS1yZWdpb25zfVxuICAgKi9cbiAgZ2V0Vm9pY2VSZWdpb25zOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRWb2ljZVJlZ2lvbj5bXT5cbiAgLyoqXG4gICAqIEdldHMgYSB3ZWJob29rIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkV2ViaG9va30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uIHVubGVzcyB0aGUgYXBwbGljYXRpb24gbWFraW5nIHRoZSByZXF1ZXN0IG93bnMgdGhlIHdlYmhvb2suXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2dldC13ZWJob29rfVxuICAgKi9cbiAgZ2V0V2ViaG9vazogKHdlYmhvb2tJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPj5cbiAgLyoqXG4gICAqIEdldHMgYSB3ZWJob29rIG1lc3NhZ2UgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGdldCBhIG1lc3NhZ2Ugb2YuXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGdldCB3ZWJob29rIG1lc3NhZ2VzLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gdGhlIElEIG9mIHRoZSB3ZWJob29rIG1lc3NhZ2UgdG8gZ2V0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2dldC13ZWJob29rLW1lc3NhZ2V9XG4gICAqL1xuICBnZXRXZWJob29rTWVzc2FnZTogKFxuICAgIHdlYmhvb2tJZDogQmlnU3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgbWVzc2FnZUlkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9ucz86IEdldFdlYmhvb2tNZXNzYWdlT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgLyoqXG4gICAqIEdldHMgYSB3ZWJob29rIHVzaW5nIHRoZSB3ZWJob29rIHRva2VuLCB0aGVyZWJ5IGJ5cGFzc2luZyB0aGUgbmVlZCBmb3IgYXV0aGVudGljYXRpb24gKyBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBnZXQuXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGdldCB0aGUgd2ViaG9vay5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRXZWJob29rfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LXdlYmhvb2std2l0aC10b2tlbn1cbiAgICovXG4gIGdldFdlYmhvb2tXaXRoVG9rZW46ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9vaz4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSB3ZWxjb21lIHNjcmVlbiBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgd2VsY29tZSBzY3JlZW4gZm9yLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFdlbGNvbWVTY3JlZW59LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB0aGUgd2VsY29tZSBzY3JlZW4gaXMgbm90IGVuYWJsZWQ6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtd2VsY29tZS1zY3JlZW59XG4gICAqL1xuICBnZXRXZWxjb21lU2NyZWVuOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWxjb21lU2NyZWVuPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGd1aWxkIHdpZGdldCBieSBndWlsZCBJRC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgd2lkZ2V0IG9mLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEd1aWxkV2lkZ2V0fS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYW4gYElOVklURV9DUkVBVEVEYCBHYXRld2F5IGV2ZW50IHdoZW4gYW4gaW52aXRlIGNoYW5uZWwgaXMgZGVmaW5lZCBhbmQgYSBuZXcgYEludml0ZWAgaXMgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLXdpZGdldH1cbiAgICovXG4gIGdldFdpZGdldDogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGRXaWRnZXQ+PlxuICAvKipcbiAgICogR2V0cyB0aGUgc2V0dGluZ3Mgb2YgYSBndWlsZCdzIHdpZGdldC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgd2lkZ2V0IG9mLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3N9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC13aWRnZXQtc2V0dGluZ3N9XG4gICAqL1xuICBnZXRXaWRnZXRTZXR0aW5nczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4+XG4gIC8qKlxuICAgKiBBZGRzIHRoZSBib3QgdXNlciB0byBhIHRocmVhZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIGFkZCB0aGUgYm90IHVzZXIgdG8uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSB0aHJlYWQgbm90IGJlIGFyY2hpdmVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2pvaW4tdGhyZWFkfVxuICAgKi9cbiAgam9pblRocmVhZDogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBMZWF2ZXMgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGxlYXZlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9HdWlsZCBEZWxldGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvdXNlciNsZWF2ZS1ndWlsZH1cbiAgICovXG4gIGxlYXZlR3VpbGQ6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGJvdCB1c2VyIGZyb20gYSB0aHJlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRocmVhZCB0byByZW1vdmUgdGhlIGJvdCB1c2VyIGZyb20uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSB0aHJlYWQgbm90IGJlIGFyY2hpdmVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2xlYXZlLXRocmVhZH1cbiAgICovXG4gIGxlYXZlVGhyZWFkOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIENyb3NzLXBvc3RzIGEgbWVzc2FnZSBwb3N0ZWQgaW4gYW4gYW5ub3VuY2VtZW50IGNoYW5uZWwgdG8gc3Vic2NyaWJlZCBjaGFubmVscy5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgYW5ub3VuY2VtZW50IGNoYW5uZWwuXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gY3Jvc3MtcG9zdC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyb3NzLXBvc3RlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFNFTkRfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIElmIG5vdCBjcm9zcy1wb3N0aW5nIG93biBtZXNzYWdlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIENyZWF0ZV8gZXZlbnQgaW4gdGhlIGd1aWxkcyB0aGUgc3Vic2NyaWJlZCBjaGFubmVscyBhcmUgaW4uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2Nyb3NzcG9zdC1tZXNzYWdlfVxuICAgKi9cbiAgcHVibGlzaE1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogUmVtb3ZlcyBhIHJvbGUgZnJvbSBhIG1lbWJlci5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBtZW1iZXIgdG8gcmVtb3ZlIHRoZSByb2xlIGZyb20gaXMgaW4uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgbWVtYmVyIHRvIHJlbW92ZSB0aGUgcm9sZSBmcm9tLlxuICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIHJlbW92ZSBmcm9tIHRoZSBtZW1iZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNyZW1vdmUtZ3VpbGQtbWVtYmVyLXJvbGV9XG4gICAqL1xuICByZW1vdmVSb2xlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgcm9sZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogUmVtb3ZlcyBhIG1lbWJlciBmcm9tIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gcmVtb3ZlIHRoZSB0aHJlYWQgbWVtYmVyIG9mLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIHRocmVhZCBtZW1iZXIgdG8gcmVtb3ZlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB0aGUgdGhyZWFkIGlzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGRQcml2YXRlVGhyZWFkLCByZXF1aXJlcyB0byBiZSB0aGUgY3JlYXRvciBvZiB0aGUgdGhyZWFkLlxuICAgKiBPdGhlcndpc2UsIHJlcXVpcmVzIHRoZSBgTUFOQUdFX1RIUkVBRFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSB0aHJlYWQgbm90IGJlIGFyY2hpdmVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3JlbW92ZS10aHJlYWQtbWVtYmVyfVxuICAgKi9cbiAgcmVtb3ZlVGhyZWFkTWVtYmVyOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgbWVtYmVyIGZyb20gYSBHcm91cCBETS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byByZW1vdmUgdGhlIHJlY2lwaWVudCB1c2VyIG9mLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIHVzZXIgdG8gcmVtb3ZlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNncm91cC1kbS1yZW1vdmUtcmVjaXBpZW50fVxuICAgKi9cbiAgcmVtb3ZlRG1SZWNpcGllbnQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIFNlbmRzIGEgbWVzc2FnZSB0byBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gc2VuZCB0aGUgbWVzc2FnZSBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGF0IHRoZSBib3QgdXNlciBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgaXMgdG8gYmUgc2VudCBpbi5cbiAgICpcbiAgICogSWYgc2VuZGluZyBhIG1lc3NhZ2UgdG8gYSBndWlsZCBjaGFubmVsOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgU0VORF9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgc2VuZGluZyBhIFRUUyBtZXNzYWdlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgU0VORF9UVFNfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIElmIHNlbmRpbmcgYSBtZXNzYWdlIGFzIGEgcmVwbHkgdG8gYW5vdGhlciBtZXNzYWdlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqIC0gVGhlIG1lc3NhZ2UgYmVpbmcgcmVwbGllZCB0byBjYW5ub3QgYmUgYSBzeXN0ZW0gbWVzc2FnZS5cbiAgICpcbiAgICog4pqg77iPIFRoZSBtYXhpbXVtIHNpemUgb2YgYSByZXF1ZXN0IChhY2NvdW50aW5nIGZvciBhbnkgYXR0YWNobWVudHMgYW5kIG1lc3NhZ2UgY29udGVudCkgZm9yIGJvdCB1c2VycyBpcyBfOCBNaUJfLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjY3JlYXRlLW1lc3NhZ2V9XG4gICAqL1xuICBzZW5kTWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVNZXNzYWdlT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBTZW5kcyBhIGZvbGxvdy11cCBtZXNzYWdlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIEludGVyYWN0aW9uIHRva2VucyBhcmUgb25seSB2YWxpZCBmb3IgXzE1IG1pbnV0ZXNfLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBtZW50aW9ucyBhcmUgc3VwcHJlc3NlZC4gVG8gZW5hYmxlIG1lbnRpb25zLCBwYXNzIGEgbWVudGlvbiBvYmplY3Qgd2l0aCB0aGUgY2FsbGJhY2sgZGF0YS5cbiAgICpcbiAgICogVW5saWtlIGBzZW5kTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAqXG4gICAqIEFwcHMgYXJlIGxpbWl0ZWQgdG8gNSBmb2xsb3d1cCBtZXNzYWdlcyBwZXIgaW50ZXJhY3Rpb24gaWYgaXQgd2FzIGluaXRpYXRlZCBmcm9tIGEgdXNlci1pbnN0YWxsZWQgYXBwIGFuZCBpc24ndCBpbnN0YWxsZWQgaW4gdGhlIHNlcnZlclxuICAgKiBZb3UgY2FuIGNoZWNrIGlmIGl0IHdhcyBpbml0aWF0ZWQgZnJvbSBhIHVzZXItaW5zdGFsbGVkIGFwcCB0aGF0IGlzbid0IGluc3RhbGxlZCBpbiB0aGUgc2VydmVyIGJ5IGNoZWNraW5nIGlmIHtAbGluayBEaXNjb3JkSW50ZXJhY3Rpb24uYXV0aG9yaXppbmdfaW50ZWdyYXRpb25fb3duZXJzIHwgYXV0aG9yaXppbmdJbnRlZ3JhdGlvbk93bmVyc30gb25seSBjb250YWlucyB7QGxpbmsgRGlzY29yZEFwcGxpY2F0aW9uSW50ZWdyYXRpb25UeXBlLlVzZXJJbnN0YWxsIHwgVXNlckluc3RhbGx9LlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIENyZWF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjY3JlYXRlLWZvbGxvd3VwLW1lc3NhZ2V9XG4gICAqL1xuICBzZW5kRm9sbG93dXBNZXNzYWdlOiAodG9rZW46IHN0cmluZywgb3B0aW9uczogSW50ZXJhY3Rpb25DYWxsYmFja0RhdGEpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogU2VuZHMgYSByZXNwb25zZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGludGVyYWN0aW9uSWQgLSBUaGUgSUQgb2YgdGhlIGludGVyYWN0aW9uIHRvIHJlc3BvbmQgdG8uXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHRoZSByZXNwb25zZSBvZiB0aGUgY2FsbGJhY2tcbiAgICogQHJldHVybnMgTm90aGluZyBvciB0aGUge0BsaW5rIERpc2NvcmRJbnRlcmFjdGlvbkNhbGxiYWNrUmVzcG9uc2V9IGlmIHdpdGhSZXNwb25zZSBwYXJhbSBpcyB0cnVlXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKaoO+4jyBJbnRlcmFjdGlvbiB0b2tlbnMgYXJlIG9ubHkgdmFsaWQgZm9yIF8xNSBtaW51dGVzXy5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgbWVudGlvbnMgYXJlIHN1cHByZXNzZWQuIFRvIGVuYWJsZSBtZW50aW9ucywgcGFzcyBhIG1lbnRpb24gb2JqZWN0IHdpdGggdGhlIGNhbGxiYWNrIGRhdGEuXG4gICAqXG4gICAqIFVubGlrZSBgc2VuZE1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dDpcbiAgICogLSBOZWVkaW5nIHRvIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCB0aGF0IHRoZSBtZXNzYWdlIGlzIGluLiAoYFJFQURfTUVTU0FHRVNgIHBlcm1pc3Npb24uKVxuICAgKiAtIFJlcXVpcmluZyB0aGUgYE1FU1NBR0VfQ09OVEVOVGAgaW50ZW50LlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIENyZWF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjY3JlYXRlLWludGVyYWN0aW9uLXJlc3BvbnNlfVxuICAgKi9cbiAgc2VuZEludGVyYWN0aW9uUmVzcG9uc2U6IChcbiAgICBpbnRlcmFjdGlvbklkOiBCaWdTdHJpbmcsXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBvcHRpb25zOiBJbnRlcmFjdGlvblJlc3BvbnNlLFxuICAgIHBhcmFtcz86IEludGVyYWN0aW9uQ2FsbGJhY2tPcHRpb25zLFxuICApID0+IFByb21pc2U8dm9pZCB8IENhbWVsaXplPERpc2NvcmRJbnRlcmFjdGlvbkNhbGxiYWNrUmVzcG9uc2U+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRocmVhZCwgdXNpbmcgYW4gZXhpc3RpbmcgbWVzc2FnZSBhcyBpdHMgcG9pbnQgb2Ygb3JpZ2luLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgdGhyZWFkLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIHVzZSBhcyB0aGUgdGhyZWFkJ3MgcG9pbnQgb2Ygb3JpZ2luLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIHRvIHVzZSBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB0aHJlYWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRDaGFubmVsfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgY2FsbGVkIG9uIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXN9Lkd1aWxkVGV4dCwgY3JlYXRlcyBhIHtAbGluayBDaGFubmVsVHlwZXN9Lkd1aWxkUHVibGljVGhyZWFkLlxuICAgKiBJZiBjYWxsZWQgb24gYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGROZXdzLCBjcmVhdGVzIGEge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGROZXdzVGhyZWFkLlxuICAgKiBEb2VzIG5vdCB3b3JrIG9uIGNoYW5uZWxzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlc30uR3VpbGRGb3J1bS5cbiAgICpcbiAgICogVGhlIElEIG9mIHRoZSBjcmVhdGVkIHRocmVhZCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBJRCBvZiB0aGUgc291cmNlIG1lc3NhZ2UuXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3N0YXJ0LXRocmVhZC1mcm9tLW1lc3NhZ2V9XG4gICAqL1xuICBzdGFydFRocmVhZFdpdGhNZXNzYWdlOiAoXG4gICAgY2hhbm5lbElkOiBCaWdTdHJpbmcsXG4gICAgbWVzc2FnZUlkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogU3RhcnRUaHJlYWRXaXRoTWVzc2FnZSxcbiAgICByZWFzb24/OiBzdHJpbmcsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGhyZWFkIHdpdGhvdXQgdXNpbmcgYSBtZXNzYWdlIGFzIHRoZSB0aHJlYWQncyBwb2ludCBvZiBvcmlnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSB0aHJlYWQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgdG8gdXNlIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHRocmVhZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZENoYW5uZWwgfCBUaHJlYWR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBDcmVhdGluZyBhIHByaXZhdGUgdGhyZWFkIHJlcXVpcmVzIHRoZSBzZXJ2ZXIgdG8gYmUgYm9vc3RlZC5cbiAgICpcbiAgICogRmlyZXMgYSBfVGhyZWFkIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjc3RhcnQtdGhyZWFkLXdpdGhvdXQtbWVzc2FnZX1cbiAgICovXG4gIHN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogU3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj5cbiAgLyoqXG4gICAqIEdldCBhIGxpc3Qgb2YgdXNlcnMgdGhhdCB2b3RlZCBmb3IgdGhpcyBzcGVjaWZpYyBhbnN3ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdGhlIG1lc3NhZ2Ugd2l0aCB0aGUgcG9sbCBsaXZlc1xuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIGluIHdoaWNoIHRoZSBwb2xsIGxpdmVzXG4gICAqIEBwYXJhbSBhbnN3ZXJJZCAtIFRoZSBJRCBvZiB0aGUgYW5zd2VyIHRvIGdldCB0aGUgdXNlcnMgdGhhdCB2b3RlZCB0aGF0IGFuc3dlclxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiB1c2VycyB0aGF0IHZvdGVkIGZvciB0aGUgc3BlY2lmaWMgYW5zd2VyLlxuICAgKi9cbiAgZ2V0UG9sbEFuc3dlclZvdGVyczogKFxuICAgIGNoYW5uZWxJZDogQmlnU3RyaW5nLFxuICAgIG1lc3NhZ2VJZDogQmlnU3RyaW5nLFxuICAgIGFuc3dlcklkOiBudW1iZXIsXG4gICAgb3B0aW9ucz86IEdldFBvbGxBbnN3ZXJWb3RlcyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlPj5cbiAgLyoqXG4gICAqIEltbWVkaWF0ZWx5IGVuZHMgdGhlIHBvbGwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdGhlIG1lc3NhZ2Ugd2l0aCB0aGUgcG9sbCBsaXZlc1xuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIGluIHdoaWNoIHRoZSBwb2xsIGxpdmVzXG4gICAqIEByZXR1cm5zIFRoZSBtZXNzYWdlIHdpdGggdGhlIGV4cGlyZWQgcG9sbFxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBZb3UgY2Fubm90IGVuZCBwb2xscyBmcm9tIG90aGVyIHVzZXJzLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudFxuICAgKi9cbiAgZW5kUG9sbDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBTeW5jaHJvbmlzZXMgYSB0ZW1wbGF0ZSB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBzeW5jaHJvbmlzZSBhIHRlbXBsYXRlIG9mLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkVGVtcGxhdGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtdGVtcGxhdGUjZ2V0LWd1aWxkLXRlbXBsYXRlc31cbiAgICovXG4gIHN5bmNHdWlsZFRlbXBsYXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+XG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIHR5cGluZyBpbmRpY2F0b3IgZm9yIHRoZSBzcGVjaWZpZWQgY2hhbm5lbCwgd2hpY2ggZXhwaXJlcyBhZnRlciAxMCBzZWNvbmRzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRvIHRyaWdnZXIgdGhlIHR5cGluZyBpbmRpY2F0b3IuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEdlbmVyYWxseSBib3RzIHNob3VsZCAqKm5vdCoqIHVzZSB0aGlzIHJvdXRlLlxuICAgKiBIb3dldmVyLCBpZiBhIGJvdCBpcyByZXNwb25kaW5nIHRvIGEgY29tbWFuZCBhbmQgZXhwZWN0cyB0aGUgY29tcHV0YXRpb24gdG8gdGFrZSBhIGZldyBzZWNvbmRzLFxuICAgKiB0aGlzIGVuZHBvaW50IG1heSBiZSBjYWxsZWQgdG8gbGV0IHRoZSB1c2VyIGtub3cgdGhhdCB0aGUgYm90IGlzIHByb2Nlc3NpbmcgdGhlaXIgbWVzc2FnZS5cbiAgICpcbiAgICogRmlyZXMgYSBfVHlwaW5nIFN0YXJ0XyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCN0cmlnZ2VyLXR5cGluZy1pbmRpY2F0b3J9XG4gICAqL1xuICB0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIFJlLXJlZ2lzdGVycyB0aGUgbGlzdCBvZiBnbG9iYWwgYXBwbGljYXRpb24gY29tbWFuZHMsIG92ZXJ3cml0aW5nIHRoZSBwcmV2aW91cyBjb21tYW5kcyBjb21wbGV0ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gY29tbWFuZHMgLSBUaGUgbGlzdCBvZiBjb21tYW5kcyB0byB1c2UgdG8gb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBsaXN0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGVuZHBvaW50LlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmR9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY29tbWFuZCBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4p2XIENvbW1hbmRzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBgY29tbWFuZHNgIGFycmF5IHdpbGwgYmUgX19kZWxldGVkX18uXG4gICAqXG4gICAqIOKaoO+4jyBDb21tYW5kcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGV4aXN0IHdpbGwgY291bnQgdG93YXJkcyB0aGUgZGFpbHkgbGltaXQgb2YgXzIwMF8gbmV3IGNvbW1hbmRzLlxuICAgKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBiZWFyZXIgdG9rZW4gdGhlIHRva2VuIG5lZWRzIHRoZSBgYXBwbGljYXRpb25zLmNvbW1hbmRzLnVwZGF0ZWAgc2NvcGUgYW5kIG11c3QgYmUgYSBgQ2xpZW50IGdyYW50YCB0b2tlbi5cbiAgICogIFlvdSB3aWxsIGJlIGFibGUgdG8gdXBkYXRlIG9ubHkgeW91ciBvd24gYXBwbGljYXRpb24gY29tbWFuZHNcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2J1bGstb3ZlcndyaXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kc31cbiAgICovXG4gIHVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHM6IChcbiAgICBjb21tYW5kczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kW10sXG4gICAgb3B0aW9ucz86IFVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZE9wdGlvbnMsXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPltdPlxuICAvKipcbiAgICogUmUtcmVnaXN0ZXJzIHRoZSBsaXN0IG9mIGFwcGxpY2F0aW9uIGNvbW1hbmRzIHJlZ2lzdGVyZWQgaW4gYSBndWlsZCwgb3ZlcndyaXRpbmcgdGhlIHByZXZpb3VzIGNvbW1hbmRzIGNvbXBsZXRlbHkuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB3aG9zZSBsaXN0IG9mIGNvbW1hbmRzIHRvIG92ZXJ3cml0ZS5cbiAgICogQHBhcmFtIGNvbW1hbmRzIC0gVGhlIGxpc3Qgb2YgY29tbWFuZHMgdG8gdXNlIHRvIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgbGlzdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBlbmRwb2ludC5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kfSBvYmplY3RzIGFzc29ydGVkIGJ5IGNvbW1hbmQgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKdlyBDb21tYW5kcyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgYGNvbW1hbmRzYCBhcnJheSB3aWxsIGJlIF9fZGVsZXRlZF9fLlxuICAgKlxuICAgKiDimqDvuI8gQ29tbWFuZHMgdGhhdCBkbyBub3QgYWxyZWFkeSBleGlzdCB3aWxsIGNvdW50IHRvd2FyZHMgdGhlIGRhaWx5IGxpbWl0IG9mIF8yMDBfIG5ldyBjb21tYW5kcy5cbiAgICpcbiAgICogV2hlbiB1c2luZyB0aGUgYmVhcmVyIHRva2VuIHRoZSB0b2tlbiBuZWVkcyB0aGUgYGFwcGxpY2F0aW9ucy5jb21tYW5kcy51cGRhdGVgIHNjb3BlIGFuZCBtdXN0IGJlIGEgYENsaWVudCBncmFudGAgdG9rZW4uXG4gICAqICBZb3Ugd2lsbCBiZSBhYmxlIHRvIHVwZGF0ZSBvbmx5IHlvdXIgb3duIGFwcGxpY2F0aW9uIGNvbW1hbmRzXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNidWxrLW92ZXJ3cml0ZS1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kc31cbiAgICovXG4gIHVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kczogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBjb21tYW5kczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kW10sXG4gICAgb3B0aW9ucz86IFVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kT3B0aW9ucyxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+W10+XG4gIC8qKlxuICAgKiBCYW5zIGEgdXNlciBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBiYW4gdGhlIHVzZXIgZnJvbS5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBiYW4gZnJvbSB0aGUgZ3VpbGQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgYmFuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQkFOX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIEJhbiBBZGRfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNjcmVhdGUtZ3VpbGQtYmFufVxuICAgKi9cbiAgYmFuTWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IENyZWF0ZUd1aWxkQmFuLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEJhbnMgdXAgdG8gMjAwIHVzZXJzIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGJhbiB0aGUgdXNlcnMgZnJvbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgdXNlcnMgdG8gYmFuIGFuZCB0aGUgb3RoZXIgb3B0aW9ucyBmb3IgdGhlIGJhbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYEJBTl9NRU1CRVJTYCBhbmQgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbnMuXG4gICAqXG4gICAqIElmIGFsbCBwcm92aWRlZCB1c2VycyBmYWlsIHRvIGJlIGJhbm5lZCwgZGlzY29yZCB3aWxsIHJlc3BvbmQgd2l0aCBhbiBlcnJvciAoY29kZTogYDUwMDAwMDogRmFpbGVkIHRvIGJhbiB1c2Vyc2ApXG4gICAqXG4gICAqIEZpcmVzIGFzIG1hbnkgX0d1aWxkIEJhbiBBZGRfIGdhdGV3YXkgZXZlbnRzIGFzIG1hbnkgdXNlciB3aGVyZSBiYW5uZWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNidWxrLWd1aWxkLWJhbn1cbiAgICovXG4gIGJ1bGtCYW5NZW1iZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVHdWlsZEJ1bGtCYW4sIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQnVsa0Jhbj4+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgbmlja25hbWUgb2YgdGhlIGJvdCB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgbmlja25hbWUgb2YgdGhlIGJvdCB1c2VyIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgbmlja25hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZE1lbWJlcn1cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfR3VpbGQgTWVtYmVyIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1jdXJyZW50LW1lbWJlcn1cbiAgICovXG4gIGVkaXRCb3RNZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRCb3RNZW1iZXJPcHRpb25zLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcj4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIG1lbWJlcidzIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSBtZW1iZXIgb2YuXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgbWVtYmVyIHRvIGVkaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHVzZXIuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgZW5kcG9pbnQgcmVxdWlyZXMgdmFyaW91cyBwZXJtaXNzaW9ucyBkZXBlbmRpbmcgb24gd2hhdCBpcyBlZGl0ZWQgYWJvdXQgdGhlIG1lbWJlci5cbiAgICogVG8gZmluZCBvdXQgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb24gdG8gZW5hY3QgYSBjaGFuZ2UsIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyBlbmRwb2ludCdzIHtAbGluayBNb2RpZnlHdWlsZE1lbWJlciB8IHBhcmFtZXRlcnN9LlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbW9kaWZ5LWd1aWxkLW1lbWJlcn1cbiAgICovXG4gIGVkaXRNZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBNb2RpZnlHdWlsZE1lbWJlciwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXI+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbWVtYmVyIG9iamVjdCBieSB1c2VyIElELlxuICAgKlxuICBcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbWVtYmVyIG9iamVjdCBmb3IuXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gZ2V0IHRoZSBtZW1iZXIgb2JqZWN0IGZvci5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRNZW1iZXJXaXRoVXNlcn0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtbWVtYmVyfVxuICAgKi9cbiAgZ2V0TWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+PlxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBtZW1iZXIgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBUaGUgYWNjZXNzIHRva2VuIG9mIHRoZSB1c2VyXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIG1lbWJlciBvYmplY3QgZm9yLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZE1lbWJlcldpdGhVc2VyfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGFjY2VzcyB0b2tlbnMgbmVlZHMgdGhlIGBndWlsZHMubWVtYmVycy5yZWFkYCBzY29wZVxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvdXNlciNnZXQtY3VycmVudC11c2VyLWd1aWxkLW1lbWJlcn1cbiAgICovXG4gIGdldEN1cnJlbnRNZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIGJlYXJlclRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lbWJlcldpdGhVc2VyPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgbWVtYmVycyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiBtZW1iZXJzIGZvci5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBtZW1iZXJzLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRNZW1iZXJXaXRoVXNlcn0gb2JqZWN0cyBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYEdVSUxEX01FTUJFUlNgIGludGVudC5cbiAgICpcbiAgICog4pqg77iPIEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byB1c2UgdGhpcyBlbmRwb2ludCB3aXRoIHZlcnkgbGFyZ2UgYm90cy4gSW5zdGVhZCwgb3B0IHRvIHVzZSBgZmV0Y2hNZW1iZXJzKClgOlxuICAgKiBSRVNUIGNvbW11bmljYXRpb24gb25seSBwZXJtaXRzIDUwIHJlcXVlc3RzIHRvIGJlIG1hZGUgcGVyIHNlY29uZCwgd2hpbGUgZ2F0ZXdheXMgYWxsb3cgZm9yIHVwIHRvIDEyMCByZXF1ZXN0c1xuICAgKiBwZXIgbWludXRlIHBlciBzaGFyZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9yYXRlLWxpbWl0cyNyYXRlLWxpbWl0c30uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNsaXN0LWd1aWxkLW1lbWJlcnN9XG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3JlcXVlc3QtZ3VpbGQtbWVtYmVyc31cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL3JhdGUtbGltaXRzI3JhdGUtbGltaXRzfVxuICAgKi9cbiAgZ2V0TWVtYmVyczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTGlzdEd1aWxkTWVtYmVycykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+W10+XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc2VyaWFsaXplZCBhY3Rpdml0eSBpbnN0YW5jZSwgaWYgaXQgZXhpc3RzLiBVc2VmdWwgZm9yIHByZXZlbnRpbmcgdW53YW50ZWQgYWN0aXZpdHkgc2Vzc2lvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIElEIG9mIHRoZSBhcHBsaWNhdGlvblxuICAgKiBAcGFyYW0gaW5zdGFuY2VJZCAtIFRoZSBJRCBvZiB0aGUgYWN0aXZpdHkgaW5zdGFuY2VcbiAgICovXG4gIGdldEFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZTogKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZywgaW5zdGFuY2VJZDogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBY3Rpdml0eUluc3RhbmNlPj5cbiAgLyoqXG4gICAqIEtpY2tzIGEgbWVtYmVyIGZyb20gYSBndWlsZC5cbiAgICpcbiAgXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBraWNrIHRoZSBtZW1iZXIgZnJvbS5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8ga2ljayBmcm9tIHRoZSBndWlsZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYEtJQ0tfTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgTWVtYmVyIFJlbW92ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI3JlbW92ZS1ndWlsZC1tZW1iZXJ9XG4gICAqL1xuICBraWNrTWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBQaW5zIGEgbWVzc2FnZSBpbiBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgd2hlcmUgdGhlIG1lc3NhZ2UgaXMgdG8gYmUgcGlubmVkLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIHBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFBJTl9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfQ2hhbm5lbCBQaW5zIFVwZGF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9tZXNzYWdlI3Bpbi1tZXNzYWdlfVxuICAgKi9cbiAgcGluTWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgdGhlIHByb2Nlc3Mgb2YgcHJ1bmluZyBpbmFjdGl2ZSBtZW1iZXJzLlxuICAgKlxuICBcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIHBydW5lIHRoZSBtZW1iZXJzIG9mLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcHJ1bmluZyBvZiBtZW1iZXJzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBbiBvcHRpb25hbCByZWFzb24gZm9yIHRoZSBhY3Rpb24sIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEEgbnVtYmVyIGluZGljYXRpbmcgaG93IG1hbnkgbWVtYmVycyB3ZXJlIHBydW5lZC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIGFuZCBgS0lDS19NRU1CRVJTYCBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICog4p2XIFJlcXVlc3RzIHRvIHRoaXMgZW5kcG9pbnQgd2lsbCB0aW1lIG91dCBmb3IgbGFyZ2UgZ3VpbGRzLiBUbyBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcsIHNldCB0aGUge0BsaW5rIEJlZ2luR3VpbGRQcnVuZS5jb21wdXRlUHJ1bmVDb3VudH0gcHJvcGVydHkgb2YgdGhlIG9wdGlvbnMgb2JqZWN0IHBhcmFtZXRlciB0byBgZmFsc2VgLiBUaGlzIHdpbGwgYmVnaW4gdGhlIHByb2Nlc3Mgb2YgcHJ1bmluZywgYW5kIGltbWVkaWF0ZWx5IHJldHVybiBgdW5kZWZpbmVkYCwgcmF0aGVyIHRoYW4gd2FpdCBmb3IgdGhlIHByb2Nlc3MgdG8gY29tcGxldGUgYmVmb3JlIHJldHVybmluZyB0aGUgYWN0dWFsIGNvdW50IG9mIG1lbWJlcnMgdGhhdCBoYXZlIGJlZW4ga2lja2VkLlxuICAgKlxuICAgKiDimqDvuI8gQnkgZGVmYXVsdCwgdGhpcyBwcm9jZXNzIHdpbGwgbm90IHJlbW92ZSBtZW1iZXJzIHdpdGggYSByb2xlLiBUbyBpbmNsdWRlIHRoZSBtZW1iZXJzIHdobyBoYXZlIGEgX3BhcnRpY3VsYXIgc3Vic2V0IG9mIHJvbGVzXywgc3BlY2lmeSB0aGUgcm9sZShzKSBpbiB0aGUge0BsaW5rIEJlZ2luR3VpbGRQcnVuZS5pbmNsdWRlUm9sZXMgfCBpbmNsdWRlUm9sZXN9IHByb3BlcnR5IG9mIHRoZSBvcHRpb25zIG9iamVjdCBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBSZW1vdmVfIGdhdGV3YXkgZXZlbnQgZm9yIGV2ZXJ5IG1lbWJlciBraWNrZWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNiZWdpbi1ndWlsZC1wcnVuZX1cbiAgICovXG4gIHBydW5lTWVtYmVyczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQmVnaW5HdWlsZFBydW5lLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgbWVtYmVycyB3aG9zZSB1c2VybmFtZXMgb3Igbmlja25hbWVzIHN0YXJ0IHdpdGggYSBwcm92aWRlZCBzdHJpbmcuXG4gICAqXG4gIFxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gc2VhcmNoIGluLlxuICAgKiBAcGFyYW0gcXVlcnkgLSBUaGUgc3RyaW5nIHRvIG1hdGNoIHVzZXJuYW1lcyBvciBuaWNrbmFtZXMgYWdhaW5zdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3Igc2VhcmNoaW5nIHRocm91Z2ggdGhlIG1lbWJlcnMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZE1lbWJlcn0gb2JqZWN0cyBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjc2VhcmNoLWd1aWxkLW1lbWJlcnN9XG4gICAqL1xuICBzZWFyY2hNZW1iZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBxdWVyeTogc3RyaW5nLCBvcHRpb25zPzogT21pdDxTZWFyY2hNZW1iZXJzLCAncXVlcnknPikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+W10+XG4gIC8qKlxuICAgKiBVbmJhbnMgYSB1c2VyIGZyb20gYSBndWlsZC5cbiAgICpcbiAgXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byB1bmJhbiB0aGUgdXNlciBpbi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byB1bmJhbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYEJBTl9NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBCYW4gUmVtb3ZlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjcmVtb3ZlLWd1aWxkLWJhbn1cbiAgICovXG4gIHVuYmFuTWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBVbnBpbiBhIG1lc3NhZ2UgaW4gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHdoZXJlIHRoZSBtZXNzYWdlIGlzIHBpbm5lZC5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byB1bnBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gQW4gb3B0aW9uYWwgcmVhc29uIGZvciB0aGUgYWN0aW9uLCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXVkaXQgbG9nLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFBJTl9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfQ2hhbm5lbCBQaW5zIFVwZGF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9tZXNzYWdlI3VucGluLW1lc3NhZ2V9XG4gICAqL1xuICB1bnBpbk1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogR2V0IHRoZSBndWlsZCBvbmJvYXJkaW5nXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIGd1aWxkIHRvIGdldCB0aGUgb25ib2FyZGluZyBmcm9tXG4gICAqL1xuICBnZXRHdWlsZE9uYm9hcmRpbmc6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkT25ib2FyZGluZz4+XG4gIC8qKlxuICAgKiBNb2RpZmllcyB0aGUgb25ib2FyZGluZyBjb25maWd1cmF0aW9uIG9mIHRoZSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgZ3VpbGQgdG8gZWRpdCB0aGUgb25ib2FyZGluZyBmcm9tXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXSAtIEFuIG9wdGlvbmFsIHJlYXNvbiBmb3IgdGhlIGFjdGlvbiwgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGF1ZGl0IGxvZy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIGFuZCBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogT25ib2FyZGluZyBlbmZvcmNlcyBjb25zdHJhaW50cyB3aGVuIGVuYWJsZWQuIFRoZXNlIGNvbnN0cmFpbnRzIGFyZTpcbiAgICogIC0gYXQgbGVhc3QgNyBkZWZhdWx0IGNoYW5uZWxzXG4gICAqICAtIGF0IGxlYXN0IDUgb2YgdGhlIDcgY2hhbm5lbHMgbXVzdCBhbGxvdyBzZW5kaW5nIG1lc3NhZ2VzIHRvIHRoZSBcXEBldmVyeW9uZSByb2xlXG4gICAqXG4gICAqIFRoZSBgbW9kZWAgZmllbGQgbW9kaWZpZXMgd2hhdCBpcyBjb25zaWRlcmVkIHdoZW4gZW5mb3JjaW5nIHRoZXNlIGNvbnN0cmFpbnRzLlxuICAgKi9cbiAgZWRpdEd1aWxkT25ib2FyZGluZzogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogRWRpdEd1aWxkT25ib2FyZGluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+PlxuICAvKipcbiAgICogTW9kaWZpZXMgdGhlIGluY2lkZW50IGFjdGlvbnMgb2YgdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBndWlsZCB0byBlZGl0IHRoZSBpbmNpZGVudCBhY3Rpb25zIGZyb21cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGluY2lkZW50IGFjdGlvbnNcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqL1xuICBtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5R3VpbGRJbmNpZGVudEFjdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEluY2lkZW50c0RhdGE+PlxuICAvKipcbiAgICogUmV0dXJucyBhbGwgZW50aXRsZW1lbnRzIGZvciBhIGdpdmVuIGFwcCwgYWN0aXZlIGFuZCBleHBpcmVkLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBpZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSBlbnRpdGxlbWVudHNcbiAgICogQHBhcmFtIHtHZXRFbnRpdGxlbWVudHN9IFtvcHRpb25zXSAtIFRoZSBvcHRpb25hbCBxdWVyeSBwYXJhbXMgZm9yIHRoZSBlbmRwb2ludFxuICAgKi9cbiAgbGlzdEVudGl0bGVtZW50czogKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldEVudGl0bGVtZW50cykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW50aXRsZW1lbnQ+W10+XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVudGl0bGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBpZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSBlbnRpdGxlbWVudFxuICAgKiBAcGFyYW0gZW50aXRsZW1lbnRJZCAtIFRoZSBpZCBvZiB0aGUgZW50aXRsZW1lbnQgdG8gZ2V0XG4gICAqL1xuICBnZXRFbnRpdGxlbWVudDogKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZywgZW50aXRsZW1lbnRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbnRpdGxlbWVudD4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGVzdCBlbnRpdGxlbWVudCB0byBhIGdpdmVuIFNLVSBmb3IgYSBnaXZlbiBndWlsZCBvciB1c2VyLiBEaXNjb3JkIHdpbGwgYWN0IGFzIHRob3VnaCB0aGF0IHVzZXIgb3IgZ3VpbGQgaGFzIGVudGl0bGVtZW50IHRvIHlvdXIgcHJlbWl1bSBvZmZlcmluZy5cbiAgICpcbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uSWQgLSBUaGUgaWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGNyZWF0ZSB0aGUgZW50aXRsZW1lbnRcbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgb3B0aW9ucyBmb3IgbmV3IGVudGl0bGVtZW50XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFRoaXMgZW5kcG9pbnQgcmV0dXJucyBhIHBhcnRpYWwgZW50aXRsZW1lbnQgb2JqZWN0LlxuICAgKiBJdCB3aWxsIG5vdCBjb250YWluIHN1YnNjcmlwdGlvbl9pZCwgc3RhcnRzX2F0LCBvciBlbmRzX2F0LCBhcyBpdCdzIHZhbGlkIGluIHBlcnBldHVpdHkuXG4gICAqL1xuICBjcmVhdGVUZXN0RW50aXRsZW1lbnQ6IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsIGJvZHk6IENyZWF0ZVRlc3RFbnRpdGxlbWVudCkgPT4gUHJvbWlzZTxQYXJ0aWFsPENhbWVsaXplPERpc2NvcmRFbnRpdGxlbWVudD4+PlxuICAvKipcbiAgICogRGVsZXRlcyBhIGN1cnJlbnRseS1hY3RpdmUgdGVzdCBlbnRpdGxlbWVudC4gRGlzY29yZCB3aWxsIGFjdCBhcyB0aG91Z2ggdGhhdCB1c2VyIG9yIGd1aWxkIG5vIGxvbmdlciBoYXMgZW50aXRsZW1lbnQgdG8geW91ciBwcmVtaXVtIG9mZmVyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBpZCBvZiB0aGUgYXBwbGljYXRpb24gZnJvbSB3aGVyZSBkZWxldGUgdGhlIGVudGl0bGVtZW50XG4gICAqIEBwYXJhbSBlbnRpdGxlbWVudElkIC0gVGhlIGlkIG9mIHRoZSBlbnRpdGxlbWVudCB0byBkZWxldGVcbiAgICovXG4gIGRlbGV0ZVRlc3RFbnRpdGxlbWVudDogKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZywgZW50aXRsZW1lbnRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBGb3IgT25lLVRpbWUgUHVyY2hhc2UgY29uc3VtYWJsZSBTS1VzLCBtYXJrcyBhIGdpdmVuIGVudGl0bGVtZW50IGZvciB0aGUgdXNlciBhcyBjb25zdW1lZC4gVGhlIGVudGl0bGVtZW50IHdpbGwgaGF2ZSBgY29uc3VtZWQ6IHRydWVgIHdoZW4gdXNpbmcge0BsaW5rIGxpc3RFbnRpdGxlbWVudHMgfCBMaXN0IEVudGl0bGVtZW50c31cbiAgICpcbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uSWQgLSBUaGUgaWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGdldCB0aGUgZW50aXRsZW1lbnRcbiAgICogQHBhcmFtIGVudGl0bGVtZW50SWQgLSBUaGUgaWQgb2YgdGhlIGVudGl0bGVtZW50IHRvIGdldFxuICAgKi9cbiAgY29uc3VtZUVudGl0bGVtZW50OiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBlbnRpdGxlbWVudElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIFNLVXMgZm9yIGEgZ2l2ZW4gYXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uSWQgLSBUaGUgaWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGdldCB0aGUgU0tVc1xuICAgKi9cbiAgbGlzdFNrdXM6IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNrdT5bXT5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIHN1YnNjcmlwdGlvbnMgY29udGFpbmluZyB0aGUgU0tVLCBmaWx0ZXJlZCBieSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gc2t1SWQgLSBUaGUgaWQgb2YgdGhlIHNrdSBvZiBnZXQgdGhlIHN1YnNjcmlwdGlvbnMgZm9yXG4gICAqL1xuICBsaXN0U3Vic2NyaXB0aW9uczogKHNrdUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0U2t1U3Vic2NyaXB0aW9uc09wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN1YnNjcmlwdGlvbltdPj5cbiAgLyoqXG4gICAqIEdldCBhIHN1YnNjcmlwdGlvbiBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBza3VJZCAtIFRoZSBpZCBvZiB0aGUgc2t1IG9mIGdldCB0aGUgc3Vic2NyaXB0aW9ucyBmb3JcbiAgICovXG4gIGdldFN1YnNjcmlwdGlvbjogKHNrdUlkOiBCaWdTdHJpbmcsIHN1YnNjcmlwdGlvbklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN1YnNjcmlwdGlvbj4+XG4gIC8qKlxuICAgKiBTZW5kIGEgc291bmRib2FyZCBzb3VuZCB0byBhIHZvaWNlIGNoYW5uZWwgdGhlIHVzZXIgaXMgY29ubmVjdGVkIHRvLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIGlkIG9mIHRoZSB2b2ljZSBjaGFubmVsXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX1ZvaWNlIENoYW5uZWwgRWZmZWN0IFNlbmRfIEdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgU1BFQUtgIGFuZCBgVVNFX1NPVU5EQk9BUkRgIHBlcm1pc3Npb25zLCBhbmQgYWxzbyB0aGUgYFVTRV9FWFRFUk5BTF9TT1VORFNgIHBlcm1pc3Npb24gaWYgdGhlIHNvdW5kIGlzIGZyb20gYSBkaWZmZXJlbnQgc2VydmVyLlxuICAgKiBBZGRpdGlvbmFsbHksIHJlcXVpcmVzIHRoZSB1c2VyIHRvIGJlIGNvbm5lY3RlZCB0byB0aGUgdm9pY2UgY2hhbm5lbCwgaGF2aW5nIGEgdm9pY2Ugc3RhdGUgd2l0aG91dCBgZGVhZmAsIGBzZWxmX2RlYWZgLCBgbXV0ZWAsIG9yIGBzdXBwcmVzc2AgZW5hYmxlZC5cbiAgICovXG4gIHNlbmRTb3VuZGJvYXJkU291bmQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogU2VuZFNvdW5kYm9hcmRTb3VuZCkgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogUmV0dXJucyBhbiBhcnJheSBvZiBzb3VuZGJvYXJkIHNvdW5kIG9iamVjdHMgdGhhdCBjYW4gYmUgdXNlZCBieSBhbGwgdXNlcnMuICovXG4gIGxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kczogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU291bmRib2FyZFNvdW5kPltdPlxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgdGhlIGd1aWxkJ3Mgc291bmRib2FyZCBzb3VuZHMuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIGd1aWxkIHRvIGdldCB0aGUgc291bmRzIGZyb21cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSW5jbHVkZXMgYHVzZXJgIGZpZWxkcyBpZiB0aGUgYm90IGhhcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICovXG4gIGxpc3RHdWlsZFNvdW5kYm9hcmRTb3VuZHM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8eyBpdGVtczogQ2FtZWxpemU8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD5bXSB9PlxuICAvKipcbiAgICogUmV0dXJucyBhIHNvdW5kYm9hcmQgc291bmQgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gc291bmQgaWQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIGd1aWxkIHRvIGdldCB0aGUgc291bmRzIGZyb21cbiAgICogQHBhcmFtIHNvdW5kSWQgLSBUaGUgc291bmQgaWRcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSW5jbHVkZXMgYHVzZXJgIGZpZWxkcyBpZiB0aGUgYm90IGhhcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICovXG4gIGdldEd1aWxkU291bmRib2FyZFNvdW5kOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBzb3VuZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4+XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgc291bmRib2FyZCBzb3VuZCBmb3IgdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHNvdW5kcyBpblxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIGNyZWF0ZSB0aGUgc291bmRcbiAgICogQHBhcmFtIHJlYXNvbiAtIFRoZSBhdWRpdCBsb2cgcmVhc29uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX0d1aWxkIFNvdW5kYm9hcmQgU291bmQgQ3JlYXRlXyBHYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICovXG4gIGNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZCwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTb3VuZGJvYXJkU291bmQ+PlxuICAvKipcbiAgICogTW9kaWZ5IHRoZSBnaXZlbiBzb3VuZGJvYXJkIHNvdW5kLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBndWlsZCB0byBjcmVhdGUgdGhlIHNvdW5kcyBpblxuICAgKiBAcGFyYW0gc291bmRJZCAtIFRoZSBzb3VuZCBpZCB0byB1cGRhdGVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byB1cGRhdGUgdGhlIHNvdW5kXG4gICAqIEBwYXJhbSByZWFzb24gLSBUaGUgYXVkaXQgbG9nIHJlYXNvblxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9HdWlsZCBTb3VuZGJvYXJkIFNvdW5kIFVwZGF0ZV8gR2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogRm9yIHNvdW5kcyBjcmVhdGVkIGJ5IHRoZSBjdXJyZW50IHVzZXIsIHJlcXVpcmVzIGVpdGhlciB0aGUgYENSRUFURV9HVUlMRF9FWFBSRVNTSU9OU2Agb3IgYE1BTkFHRV9HVUlMRF9FWFBSRVNTSU9OU2AgcGVybWlzc2lvbi5cbiAgICogRm9yIG90aGVyIHNvdW5kcywgcmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqL1xuICBtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZDogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBzb3VuZElkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogTW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQsXG4gICAgcmVhc29uPzogc3RyaW5nLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4+XG4gIC8qKlxuICAgKiBEZWxldGUgdGhlIGdpdmVuIHNvdW5kYm9hcmQgc291bmQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgc291bmRzIGluXG4gICAqIEBwYXJhbSBzb3VuZElkIC0gVGhlIHNvdW5kIGlkIHRvIGRlbGV0ZVxuICAgKiBAcGFyYW0gcmVhc29uIC0gVGhlIGF1ZGl0IGxvZyByZWFzb25cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfR3VpbGQgU291bmRib2FyZCBTb3VuZCBEZWxldGVfIEdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEZvciBzb3VuZHMgY3JlYXRlZCBieSB0aGUgY3VycmVudCB1c2VyLCByZXF1aXJlcyBlaXRoZXIgdGhlIGBDUkVBVEVfR1VJTERfRVhQUkVTU0lPTlNgIG9yIGBNQU5BR0VfR1VJTERfRVhQUkVTU0lPTlNgIHBlcm1pc3Npb24uXG4gICAqIEZvciBvdGhlciBzb3VuZHMsIHJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEX0VYUFJFU1NJT05TYCBwZXJtaXNzaW9uLlxuICAgKi9cbiAgZGVsZXRlR3VpbGRTb3VuZGJvYXJkU291bmQ6IChndWlsZElkOiBCaWdTdHJpbmcsIHNvdW5kSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBhcHBsaWNhdGlvbiByb2xlIGNvbm5lY3Rpb24gbWV0YWRhdGEgb2JqZWN0cyBmb3IgdGhlIGdpdmVuIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb25JZCAtIFRoZSBhcHBsaWNhdGlvbiB0byBnZXQgdGhlIHJvbGUgY29ubmVjdGlvbnMgZnJvbVxuICAgKiBAcmV0dXJucyBBIGxpc3Qgb2YgYXBwbGljYXRpb24gcm9sZSBjb25uZWN0aW9uIG1ldGFkYXRhIG9iamVjdHNcbiAgICovXG4gIGxpc3RBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkczogKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhPltdPlxuICAvKipcbiAgICogVXBkYXRlcyBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgYXBwbGljYXRpb24gcm9sZSBjb25uZWN0aW9uIG1ldGFkYXRhIG9iamVjdHMgZm9yIHRoZSBnaXZlbiBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uSWQgLSBUaGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSByb2xlIGNvbm5lY3Rpb25zIGZyb21cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byB1cGRhdGUgdGhlIHJvbGUgY29ubmVjdGlvbnNcbiAgICogQHJldHVybnMgQSBsaXN0IG9mIGFwcGxpY2F0aW9uIHJvbGUgY29ubmVjdGlvbiBtZXRhZGF0YSBvYmplY3RzXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEFuIGFwcGxpY2F0aW9uIGNhbiBoYXZlIGEgbWF4aW11bSBvZiA1IG1ldGFkYXRhIHJlY29yZHMuXG4gICAqL1xuICB1cGRhdGVBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkczogKFxuICAgIGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhPltdLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YT5bXT5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgbG9iYnksIGFkZGluZyBhbnkgb2YgdGhlIHNwZWNpZmllZCBtZW1iZXJzIHRvIGl0LCBpZiBwcm92aWRlZC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byBjcmVhdGUgdGhlIGxvYmJ5XG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGxvYmJ5XG4gICAqL1xuICBjcmVhdGVMb2JieTogKG9wdGlvbnM6IENyZWF0ZUxvYmJ5KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRMb2JieT4+XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbG9iYnkgb2JqZWN0IGZvciB0aGUgc3BlY2lmaWVkIGxvYmJ5IGlkLCBpZiBpdCBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBsb2JieUlkIC0gVGhlIElEIG9mIHRoZSBsb2JieSB0byBnZXRcbiAgICogQHJldHVybnMgVGhlIGxvYmJ5IG9iamVjdFxuICAgKi9cbiAgZ2V0TG9iYnk6IChsb2JieUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZExvYmJ5Pj5cbiAgLyoqXG4gICAqIE1vZGlmaWVzIHRoZSBzcGVjaWZpZWQgbG9iYnkgd2l0aCBuZXcgdmFsdWVzLCBpZiBwcm92aWRlZC5cbiAgICpcbiAgICogQHBhcmFtIGxvYmJ5SWQgLSBUaGUgSUQgb2YgdGhlIGxvYmJ5IHRvIG1vZGlmeVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbG9iYnlcbiAgICogQHJldHVybnMgVGhlIG1vZGlmaWVkIGxvYmJ5XG4gICAqL1xuICBtb2RpZnlMb2JieTogKGxvYmJ5SWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5TG9iYnkpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZExvYmJ5Pj5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHNwZWNpZmllZCBsb2JieSBpZiBpdCBleGlzdHMuXG4gICAqXG4gICAqIEl0IGlzIHNhZmUgdG8gY2FsbCBldmVuIGlmIHRoZSBsb2JieSBpcyBhbHJlYWR5IGRlbGV0ZWQgYXMgd2VsbC5cbiAgICpcbiAgICogQHBhcmFtIGxvYmJ5SWQgLSBUaGUgSUQgb2YgdGhlIGxvYmJ5IHRvIGRlbGV0ZVxuICAgKiBAcmV0dXJucyBOb3RoaW5nXG4gICAqL1xuICBkZWxldGVMb2JieTogKGxvYmJ5SWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogQWRkcyB0aGUgcHJvdmlkZWQgdXNlciB0byB0aGUgc3BlY2lmaWVkIGxvYmJ5LiBJZiBjYWxsZWQgd2hlbiB0aGUgdXNlciBpcyBhbHJlYWR5IGEgbWVtYmVyIG9mIHRoZSBsb2JieSB3aWxsIHVwZGF0ZSBmaWVsZHMgc3VjaCBhcyBtZXRhZGF0YSBvbiB0aGF0IHVzZXIgaW5zdGVhZC5cbiAgICpcbiAgICogQHBhcmFtIGxvYmJ5SWQgLSBUaGUgSUQgb2YgdGhlIGxvYmJ5IHRvIGFkZCB0aGUgdXNlciB0b1xuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIGFkZCB0byB0aGUgbG9iYnlcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byBhZGQgdGhlIHVzZXIgdG8gdGhlIGxvYmJ5XG4gICAqIEByZXR1cm5zIFRoZSBsb2JieSBtZW1iZXIgb2JqZWN0XG4gICAqL1xuICBhZGRNZW1iZXJUb0xvYmJ5OiAobG9iYnlJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQWRkTG9iYnlNZW1iZXIpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZExvYmJ5TWVtYmVyPj5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIHByb3ZpZGVkIHVzZXIgZnJvbSB0aGUgc3BlY2lmaWVkIGxvYmJ5LiBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBldmVuIGlmIHRoZSB1c2VyIGlzIG5vIGxvbmdlciBhIG1lbWJlciBvZiB0aGUgbG9iYnksIGJ1dCB3aWxsIGZhaWwgaWYgdGhlIGxvYmJ5IGRvZXMgbm90IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0gbG9iYnlJZCAtIFRoZSBJRCBvZiB0aGUgbG9iYnkgdG8gcmVtb3ZlIHRoZSB1c2VyIGZyb21cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byByZW1vdmUgZnJvbSB0aGUgbG9iYnlcbiAgICogQHJldHVybnMgTm90aGluZ1xuICAgKi9cbiAgcmVtb3ZlTWVtYmVyRnJvbUxvYmJ5OiAobG9iYnlJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgY3VycmVudCB1c2VyIGZyb20gdGhlIHNwZWNpZmllZCBsb2JieS4gSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgZXZlbiBpZiB0aGUgdXNlciBpcyBubyBsb25nZXIgYSBtZW1iZXIgb2YgdGhlIGxvYmJ5LCBidXQgd2lsbCBmYWlsIGlmIHRoZSBsb2JieSBkb2VzIG5vdCBleGlzdC5cbiAgICpcbiAgICogQHBhcmFtIGxvYmJ5SWQgLSBUaGUgSUQgb2YgdGhlIGxvYmJ5IHRvIHJlbW92ZSB0aGUgdXNlciBmcm9tXG4gICAqIEBwYXJhbSBiZWFyZXJUb2tlbiAtIFRoZSBhY2Nlc3MgdG9rZW4gb2YgdGhlIHVzZXJcbiAgICogQHJldHVybnMgTm90aGluZ1xuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIHJlcXVpcmVzIGEgYmVhcmVyIHRva2VuIGZvciBhdXRob3JpemF0aW9uXG4gICAqL1xuICBsZWF2ZUxvYmJ5OiAobG9iYnlJZDogQmlnU3RyaW5nLCBiZWFyZXJUb2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBMaW5rcyBhbiBleGlzdGluZyB0ZXh0IGNoYW5uZWwgdG8gYSBsb2JieS5cbiAgICpcbiAgICogQHBhcmFtIGxvYmJ5SWQgLSBUaGUgSUQgb2YgdGhlIGxvYmJ5IHRvIGxpbmsgdGhlIGNoYW5uZWwgdG9cbiAgICogQHBhcmFtIGJlYXJlclRva2VuIC0gVGhlIGFjY2VzcyB0b2tlbiBvZiB0aGUgdXNlclxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIGxpbmsgdGhlIGNoYW5uZWwgdG8gdGhlIGxvYmJ5XG4gICAqIEByZXR1cm5zIFRoZSB1cGRhdGVkIGxvYmJ5IG9iamVjdFxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVc2VzIGJlYXJlciB0b2tlbiBmb3IgYXV0aG9yaXphdGlvbiBhbmQgdGhlIHVzZXIgbXVzdCBiZSBhIGxvYmJ5IG1lbWJlciB3aXRoIHRoZSBDYW5MaW5rTG9iYnkgbG9iYnkgbWVtYmVyIGZsYWcuXG4gICAqL1xuICBsaW5rQ2hhbm5lbFRvTG9iYnk6IChsb2JieUlkOiBCaWdTdHJpbmcsIGJlYXJlclRva2VuOiBzdHJpbmcsIG9wdGlvbnM6IExpbmtDaGFubmVsVG9Mb2JieSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTG9iYnk+PlxuICAvKipcbiAgICogVW5saW5rcyBhbnkgY3VycmVudGx5IGxpbmtlZCBjaGFubmVscyBmcm9tIHRoZSBzcGVjaWZpZWQgbG9iYnkuXG4gICAqXG4gICAqIEBwYXJhbSBsb2JieUlkIC0gVGhlIElEIG9mIHRoZSBsb2JieSB0byB1bmxpbmsgdGhlIGNoYW5uZWwgZnJvbVxuICAgKiBAcGFyYW0gYmVhcmVyVG9rZW4gLSBUaGUgYWNjZXNzIHRva2VuIG9mIHRoZSB1c2VyXG4gICAqIEByZXR1cm5zIFRoZSB1cGRhdGVkIGxvYmJ5IG9iamVjdFxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVc2VzIGJlYXJlciB0b2tlbiBmb3IgYXV0aG9yaXphdGlvbiBhbmQgdGhlIHVzZXIgbXVzdCBiZSBhIGxvYmJ5IG1lbWJlciB3aXRoIHRoZSBDYW5MaW5rTG9iYnkgbG9iYnkgbWVtYmVyIGZsYWcuXG4gICAqL1xuICB1bmxpbmtDaGFubmVsVG9Mb2JieTogKGxvYmJ5SWQ6IEJpZ1N0cmluZywgYmVhcmVyVG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTG9iYnk+PlxufVxuXG5leHBvcnQgdHlwZSBSZXF1ZXN0TWV0aG9kcyA9ICdHRVQnIHwgJ1BPU1QnIHwgJ0RFTEVURScgfCAnUEFUQ0gnIHwgJ1BVVCdcbmV4cG9ydCB0eXBlIEFwaVZlcnNpb25zID0gOSB8IDEwXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zIHtcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgYm9keT86IGFueVxuICB1bmF1dGhvcml6ZWQ/OiBib29sZWFuXG4gIHJlYXNvbj86IHN0cmluZ1xuICBmaWxlcz86IEZpbGVDb250ZW50W11cbn1cblxuZXhwb3J0IHR5cGUgTWFrZVJlcXVlc3RPcHRpb25zID0gT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdtZXRob2QnPiAmIFBpY2s8U2VuZFJlcXVlc3RPcHRpb25zLCAncnVuVGhyb3VnaFF1ZXVlJz5cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0Qm9keSB7XG4gIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgYm9keT86IHN0cmluZyB8IEZvcm1EYXRhXG4gIG1ldGhvZDogUmVxdWVzdE1ldGhvZHNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZW5kUmVxdWVzdE9wdGlvbnMge1xuICAvKiogVGhlIHJvdXRlIHRvIHNlbmQgdGhlIHJlcXVlc3QgdG8uICovXG4gIHJvdXRlOiBzdHJpbmdcbiAgLyoqIFRoZSBtZXRob2QgdG8gdXNlIGZvciBzZW5kaW5nIHRoZSByZXF1ZXN0LiAqL1xuICBtZXRob2Q6IFJlcXVlc3RNZXRob2RzXG4gIC8qKiBUaGUgYW1vdW50IG9mIHRpbWVzIHRoaXMgcmVxdWVzdCBoYXMgYmVlbiByZXRyaWVkLiAqL1xuICByZXRyeUNvdW50OiBudW1iZXJcbiAgLyoqIEhhbmRsZXIgdG8gcmV0cnkgYSByZXF1ZXN0IHNob3VsZCBpdCBiZSByYXRlIGxpbWl0ZWQuICovXG4gIHJldHJ5UmVxdWVzdD86IChvcHRpb25zOiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIFJlc29sdmUgaGFuZGxlciB3aGVuIGEgcmVxdWVzdCBzdWNjZWVkcy4gKi9cbiAgcmVzb2x2ZTogKHZhbHVlOiBSZXN0UmVxdWVzdFJlc3BvbnNlKSA9PiB2b2lkXG4gIC8qKiBSZWplY3QgaGFuZGxlciB3aGVuIGEgcmVxdWVzdCBmYWlscy4gKi9cbiAgcmVqZWN0OiAodmFsdWU6IFJlc3RSZXF1ZXN0UmVqZWN0aW9uKSA9PiB2b2lkXG4gIC8qKiBJZiB0aGlzIHJlcXVlc3QgaGFzIGEgYnVja2V0IGlkIHdoaWNoIGl0IGZhbGxzIHVuZGVyIGZvciByYXRlIGxpbWl0ICovXG4gIGJ1Y2tldElkPzogc3RyaW5nXG4gIC8qKiBBZGRpdGlvbmFsIHJlcXVlc3Qgb3B0aW9ucywgdXNlZCBmb3IgdGhpbmdzIGxpa2Ugb3ZlcnJpZGluZyBhdXRob3JpemF0aW9uIGhlYWRlci4gKi9cbiAgcmVxdWVzdEJvZHlPcHRpb25zPzogQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSByZXF1ZXN0IHNob3VsZCBiZSBydW4gdGhyb3VnaCB0aGUgcXVldWUuXG4gICAqIFVzZWZ1bCBmb3Igcm91dGVzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSByYXRlIGxpbWl0cy5cbiAgICovXG4gIHJ1blRocm91Z2hRdWV1ZT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXN0UmF0ZUxpbWl0ZWRQYXRoIHtcbiAgdXJsOiBzdHJpbmdcbiAgcmVzZXRUaW1lc3RhbXA6IG51bWJlclxuICBidWNrZXRJZD86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RSZXF1ZXN0UmVzcG9uc2Uge1xuICBvazogYm9vbGVhblxuICBzdGF0dXM6IG51bWJlclxuICAvKiogVGhlIHJldHVybmVkIGJvZHkgcGFyc2VkIGlmIGl0IHdhcyBKU09OLCBvdGhlcndpc2UgaXQgd2lsbCBiZSB0aGUgcmF3IGJvZHkgYXMgYSBzdHJpbmcgKi9cbiAgYm9keT86IHN0cmluZyB8IG9iamVjdFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RSZXF1ZXN0UmVqZWN0aW9uIHtcbiAgb2s6IGJvb2xlYW5cbiAgc3RhdHVzOiBudW1iZXJcbiAgLyoqIFRoZSBIVFRQIDEuMSBzdGF0dXMgY29kZSB0ZXh0ICovXG4gIHN0YXR1c1RleHQ/OiBzdHJpbmdcbiAgLyoqIFRoZSByZXR1cm5lZCBib2R5IHBhcnNlZCBpZiBpdCB3YXMgSlNPTiwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgdGhlIHJhdyBib2R5IGFzIGEgc3RyaW5nICovXG4gIGJvZHk/OiBzdHJpbmcgfCBvYmplY3RcbiAgZXJyb3I/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXN0TWFuYWdlckV2ZW50cyB7XG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYSByZXF1ZXN0IGlzIG1hZGUgdG8gdGhlIEFQSS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGJvZHkgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIEFQSSBpcyBhdmFpbGFibGUgaW4gdGhlIGBleHRyYWAgcGFyYW1ldGVyLiBEbyBub3QgY29uc3VtZSB0aGUgYm9keSBpbiB0aGUgYFJlcXVlc3RgIG9iamVjdCBhbmQgdXNlIHRoZSBvbmUgaW4gdGhlIGBleHRyYWAgcGFyYW1ldGVyIGluc3RlYWQuXG4gICAqL1xuICByZXF1ZXN0OiAocmVxdWVzdDogUmVxdWVzdCwgZXh0cmE6IHsgYm9keTogYW55IH0pID0+IHZvaWRcbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhIHJlc3BvbnNlIGlzIHJlY2VpdmVkIGZyb20gdGhlIEFQSS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBpcyBmaXJlZCBmb3IgYm90aCBzdWNjZXNzZnVsIGFuZCBmYWlsZWQgcmVxdWVzdHMsIHlvdSBzaG91bGQgY2hlY2sgdGhlIFJlc3BvbnNlIG9iamVjdCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LlxuICAgKlxuICAgKiBCb3RoIHRoZSByZXF1ZXN0IGFuZCB0aGUgcmVzcG9uc2UgYm9keSBhcmUgYXZhaWxhYmxlIGluIHRoZSBgZXh0cmFgIHBhcmFtZXRlci4gRG8gbm90IGNvbnN1bWUgdGhlIGJvZHkgaW4gdGhlIGBSZXF1ZXN0YCBvciBgUmVzcG9uc2VgIG9iamVjdCBhbmQgdXNlIHRoZSBvbmUgaW4gdGhlIGBleHRyYWAgcGFyYW1ldGVyIGluc3RlYWQuXG4gICAqL1xuICByZXNwb25zZTogKHJlcXVlc3Q6IFJlcXVlc3QsIHJlc3BvbnNlOiBSZXNwb25zZSwgZXh0cmE6IHsgcmVxdWVzdEJvZHk6IGFueTsgcmVzcG9uc2VCb2R5OiBzdHJpbmcgfCBvYmplY3QgfSkgPT4gdm9pZFxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgcmVxdWVzdCBlcnJvcnMgZHVlIHRvIGZldGNoIGVycm9yLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYm9keSB0aGF0IHdhcyBzZW50IHRvIHRoZSBBUEkgaXMgYXZhaWxhYmxlIGluIHRoZSBgZXh0cmFgIHBhcmFtZXRlci5cbiAgICovXG4gIHJlcXVlc3RFcnJvcjogKHJlcXVlc3Q6IFJlcXVlc3QsIGVycm9yOiBhbnksIGV4dHJhOiB7IGJvZHk6IGFueSB9KSA9PiB2b2lkXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdXRHQSxXQXdCQyJ9