@data-client/rest 0.16.1 → 0.16.3

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.
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL1Jlc3RFbmRwb2ludFR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgRW5kcG9pbnRFeHRyYU9wdGlvbnMsXG4gIEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsXG4gIFNjaGVtYSxcbiAgRmV0Y2hGdW5jdGlvbixcbiAgUmVzb2x2ZVR5cGUsXG59IGZyb20gJ0BkYXRhLWNsaWVudC9lbmRwb2ludCc7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbGxlY3Rpb24gfSBmcm9tICcuL2V4dHJhY3RDb2xsZWN0aW9uLmpzJztcbmltcG9ydCB7XG4gIE9wdGlvbnNUb0JvZHlBcmd1bWVudCxcbiAgT3B0aW9uc1RvRnVuY3Rpb24sXG59IGZyb20gJy4vT3B0aW9uc1RvRnVuY3Rpb24uanMnO1xuaW1wb3J0IHsgUGF0aEFyZ3MgfSBmcm9tICcuL3BhdGhUeXBlcy5qcyc7XG5pbXBvcnQgeyBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSAnLi9SZXN0RW5kcG9pbnRUeXBlSGVscC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEluc3RhbmNlQmFzZTxcbiAgRiBleHRlbmRzIEZldGNoRnVuY3Rpb24gPSBGZXRjaEZ1bmN0aW9uLFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gYW55LFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIE8gZXh0ZW5kcyB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk/OiBhbnk7XG4gICAgc2VhcmNoUGFyYW1zPzogYW55O1xuICAgIG1ldGhvZD86IHN0cmluZztcbiAgfSA9IHsgcGF0aDogc3RyaW5nIH0sXG4+IGV4dGVuZHMgRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZTxGLCBTLCBNPiB7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjYm9keSAqL1xuICByZWFkb25seSBib2R5PzogJ2JvZHknIGV4dGVuZHMga2V5b2YgTyA/IE9bJ2JvZHknXSA6IGFueTtcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNzZWFyY2hQYXJhbXMgKi9cbiAgcmVhZG9ubHkgc2VhcmNoUGFyYW1zPzogJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2VhcmNoUGFyYW1zJ11cbiAgOiAvLyB1bmtub3duIGlzIGlkZW50aXR5IHdpdGggJyYnIHR5cGUgb3BlcmF0b3JcbiAgICB1bmtub3duO1xuXG4gIC8qKiBQYXR0ZXJuIHRvIGNvbnN0cnVjdCB1cmwgYmFzZWQgb24gVXJsIFBhcmFtZXRlcnNcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3BhdGhcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IE9bJ3BhdGgnXTtcbiAgLyoqIFByZXBlbmRlZCB0byBhbGwgdXJsc1xuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjdXJsUHJlZml4XG4gICAqL1xuICByZWFkb25seSB1cmxQcmVmaXg6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVxdWVzdEluaXQ6IFJlcXVlc3RJbml0O1xuICAvKiogSFRUUCByZXF1ZXN0IG1ldGhvZFxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjbWV0aG9kXG4gICAqL1xuICByZWFkb25seSBtZXRob2Q6IChPICYgeyBtZXRob2Q6IHN0cmluZyB9KVsnbWV0aG9kJ107XG4gIHJlYWRvbmx5IHNpZ25hbDogQWJvcnRTaWduYWwgfCB1bmRlZmluZWQ7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGFnaW5hdGlvbkZpZWxkICovXG4gIHJlYWRvbmx5IHBhZ2luYXRpb25GaWVsZD86IHN0cmluZztcblxuICAvKiBmZXRjaCBsaWZlY3ljbGVzICovXG4gIC8qIGJlZm9yZS1mZXRjaCAqL1xuICAvKiogQnVpbGRzIHRoZSBVUkwgdG8gZmV0Y2hcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3VybFxuICAgKi9cbiAgdXJsKC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rj4pOiBzdHJpbmc7XG4gIC8qKiBFbmNvZGUgdGhlIHNlYXJjaFBhcmFtcyBjb21wb25lbnQgb2YgdGhlIHVybFxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjc2VhcmNoVG9TdHJpbmdcbiAgICovXG4gIHNlYXJjaFRvU3RyaW5nKHNlYXJjaFBhcmFtczogUmVjb3JkPHN0cmluZywgYW55Pik6IHN0cmluZztcbiAgLyoqIFByZXBhcmVzIFJlcXVlc3RJbml0IHVzZWQgaW4gZmV0Y2guIFRoaXMgaXMgc2VudCB0byBmZXRjaFJlc3BvbnNlKClcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2dldFJlcXVlc3RJbml0XG4gICAqL1xuICBnZXRSZXF1ZXN0SW5pdChcbiAgICB0aGlzOiBhbnksXG4gICAgYm9keT86IFJlcXVlc3RJbml0Wydib2R5J10gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogUHJvbWlzZTxSZXF1ZXN0SW5pdD4gfCBSZXF1ZXN0SW5pdDtcbiAgLyoqIENhbGxlZCBieSBnZXRSZXF1ZXN0SW5pdCB0byBkZXRlcm1pbmUgSFRUUCBIZWFkZXJzXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNnZXRIZWFkZXJzXG4gICAqL1xuICBnZXRIZWFkZXJzKGhlYWRlcnM6IEhlYWRlcnNJbml0KTogUHJvbWlzZTxIZWFkZXJzSW5pdD4gfCBIZWFkZXJzSW5pdDtcbiAgLyogYWZ0ZXItZmV0Y2ggKi9cbiAgLyoqIFBlcmZvcm1zIHRoZSBmZXRjaCBjYWxsXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNmZXRjaFJlc3BvbnNlXG4gICAqL1xuICBmZXRjaFJlc3BvbnNlKGlucHV0OiBSZXF1ZXN0SW5mbywgaW5pdDogUmVxdWVzdEluaXQpOiBQcm9taXNlPFJlc3BvbnNlPjtcbiAgLyoqIFRha2VzIHRoZSBSZXNwb25zZSBhbmQgcGFyc2VzIHZpYSAudGV4dCgpIG9yIC5qc29uKClcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3BhcnNlUmVzcG9uc2VcbiAgICovXG4gIHBhcnNlUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxhbnk+O1xuICAvKiogUGVyZm9ybSBhbnkgdHJhbnNmb3JtcyB3aXRoIHRoZSBwYXJzZWQgcmVzdWx0LlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcHJvY2Vzc1xuICAgKi9cbiAgcHJvY2Vzcyh2YWx1ZTogYW55LCAuLi5hcmdzOiBQYXJhbWV0ZXJzPEY+KTogUmVzb2x2ZVR5cGU8Rj47XG5cbiAgLyogdXRpbGl0aWVzICovXG4gIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIChmZXRjaCkga2V5IG1hdGNoZXMgdGhpcyBlbmRwb2ludC5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3Rlc3RLZXlcbiAgICovXG4gIHRlc3RLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuO1xuXG4gIC8qIGV4dGVuZGVycyAqL1xuICAvLyBUT0RPOiBmaWd1cmUgb3V0IGJldHRlciB3YXkgdGhhbiB3cmFwcGluZyB3aG9sZSBvcHRpb25zIGluIFJlYWRvbmx5PD4gKyBtYWtpbmcgTyBleHRlbmQgZnJvbSB7fVxuICAvLyAgICAgICB0aGlzIGlzIGp1c3QgYSBoYWNrIHRvIGhhbmRsZSB3aGVuIG5vIG1lbWJlcnMgb2YgUGFydGlhbFJlc3RHZW5lcmljcyBhcmUgcHJlc2VudFxuICAvLyAgICAgICBOb3RlOiBVc2luZyBvdmVybG9hZGluZyAobGlrZSBwYWdpbmF0ZWQgZGlkKSBzdHJ1Z2dsZXMgYmVjYXVzZSB0eXBlc2NyaXB0IGRvZXMgbm90IGhhdmUgYSBjbGVhciB3YXkgb2YgZGlzdGluZ3Vpc2hpbmcgb25lXG4gIC8vICAgICAgIHNob3VsZCBiZSB1c2VkIGZyb20gdGhlIG90aGVyIChkdWUgdG8gc2FtZSBwcm9ibGVtIHdpdGggZXZlcnkgbWVtYmVyIGJlaW5nIHBhcnRpYWwpXG4gIC8qKiBDcmVhdGVzIGEgY2hpbGQgZW5kcG9pbnQgdGhhdCBpbmhlcml0cyBmcm9tIHRoaXMgd2hpbGUgb3ZlcnJpZGluZyBwcm92aWRlZCBgb3B0aW9uc2AuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNleHRlbmRcbiAgICovXG4gIGV4dGVuZDxcbiAgICBFIGV4dGVuZHMgUmVzdEluc3RhbmNlQmFzZSxcbiAgICBFeHRlbmRPcHRpb25zIGV4dGVuZHMgUGFydGlhbFJlc3RHZW5lcmljcyB8IHt9LFxuICA+KFxuICAgIHRoaXM6IEUsXG4gICAgb3B0aW9uczogUmVhZG9ubHk8XG4gICAgICBSZXN0RW5kcG9pbnRFeHRlbmRPcHRpb25zPEV4dGVuZE9wdGlvbnMsIEUsIEY+ICYgRXh0ZW5kT3B0aW9uc1xuICAgID4sXG4gICk6IFJlc3RFeHRlbmRlZEVuZHBvaW50PEV4dGVuZE9wdGlvbnMsIEU+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RJbnN0YW5jZTxcbiAgRiBleHRlbmRzIEZldGNoRnVuY3Rpb24gPSBGZXRjaEZ1bmN0aW9uLFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gYW55LFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIE8gZXh0ZW5kcyB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk/OiBhbnk7XG4gICAgc2VhcmNoUGFyYW1zPzogYW55O1xuICAgIG1ldGhvZD86IHN0cmluZztcbiAgICBwYWdpbmF0aW9uRmllbGQ/OiBzdHJpbmc7XG4gIH0gPSB7IHBhdGg6IHN0cmluZyB9LFxuPiBleHRlbmRzIFJlc3RJbnN0YW5jZUJhc2U8RiwgUywgTSwgTz4ge1xuICAvKiogQ3JlYXRlcyBhbiBFbmRwb2ludCB0byBhcHBlbmQgdGhlIG5leHQgcGFnZSBleHRlbmRpbmcgYSBsaXN0IGZvciBwYWdpbmF0aW9uXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwYWdpbmF0ZWRcbiAgICovXG4gIHBhZ2luYXRlZDxcbiAgICBFIGV4dGVuZHMgUmVzdEluc3RhbmNlQmFzZTxGZXRjaEZ1bmN0aW9uLCBhbnksIHVuZGVmaW5lZD4sXG4gICAgQSBleHRlbmRzIGFueVtdLFxuICA+KFxuICAgIHRoaXM6IEUsXG4gICAgcmVtb3ZlQ3Vyc29yOiAoLi4uYXJnczogQSkgPT4gcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dLFxuICApOiBQYWdpbmF0aW9uRW5kcG9pbnQ8RSwgQT47XG4gIHBhZ2luYXRlZDxcbiAgICBFIGV4dGVuZHMgUmVzdEluc3RhbmNlQmFzZTxGZXRjaEZ1bmN0aW9uLCBhbnksIHVuZGVmaW5lZD4sXG4gICAgQyBleHRlbmRzIHN0cmluZyxcbiAgPihcbiAgICB0aGlzOiBFLFxuICAgIGN1cnNvckZpZWxkOiBDLFxuICApOiBQYWdpbmF0aW9uRmllbGRFbmRwb2ludDxFLCBDPjtcbiAgLyoqIENvbmNhdGluYXRlIHRoZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0cyAoR0VUKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjZ2V0UGFnZVxuICAgKi9cbiAgZ2V0UGFnZTogJ3BhZ2luYXRpb25GaWVsZCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICBPWydwYWdpbmF0aW9uRmllbGQnXSBleHRlbmRzIHN0cmluZyA/XG4gICAgICBQYWdpbmF0aW9uRmllbGRFbmRwb2ludDxcbiAgICAgICAgRiAmIHsgc2NoZW1hOiBTOyBzaWRlRWZmZWN0OiBNIH0gJiBPLFxuICAgICAgICBPWydwYWdpbmF0aW9uRmllbGQnXVxuICAgICAgPlxuICAgIDogdW5kZWZpbmVkXG4gIDogdW5kZWZpbmVkO1xuICAvKiogQ3JlYXRlIGEgbmV3IGl0ZW0gKFBPU1QpIGFuZCBgcHVzaGAgdG8gdGhlIGVuZFxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcHVzaFxuICAgKi9cbiAgcHVzaDogQWRkRW5kcG9pbnQ8XG4gICAgRixcbiAgICBFeHRyYWN0Q29sbGVjdGlvbjxTPlsncHVzaCddLFxuICAgIEV4Y2x1ZGU8TywgJ2JvZHknIHwgJ21ldGhvZCc+ICYge1xuICAgICAgYm9keTpcbiAgICAgICAgfCBPcHRpb25zVG9BZGRlckJvZHlBcmd1bWVudDxPPlxuICAgICAgICB8IE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8+W11cbiAgICAgICAgfCBGb3JtRGF0YTtcbiAgICB9XG4gID47XG4gIC8qKiBDcmVhdGUgYSBuZXcgaXRlbSAoUE9TVCkgYW5kIGB1bnNoaWZ0YCB0byB0aGUgYmVnaW5uaW5nXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCN1bnNoaWZ0XG4gICAqL1xuICB1bnNoaWZ0OiBBZGRFbmRwb2ludDxcbiAgICBGLFxuICAgIEV4dHJhY3RDb2xsZWN0aW9uPFM+Wyd1bnNoaWZ0J10sXG4gICAgRXhjbHVkZTxPLCAnYm9keScgfCAnbWV0aG9kJz4gJiB7XG4gICAgICBib2R5OlxuICAgICAgICB8IE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8+XG4gICAgICAgIHwgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8Tz5bXVxuICAgICAgICB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbiAgLyoqIENyZWF0ZSBuZXcgaXRlbShzKSAoUE9TVCkgYW5kIGBPYmplY3QuYXNzaWduYCBtZXJnZVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjYXNzaWduXG4gICAqL1xuICBhc3NpZ246IEFkZEVuZHBvaW50PFxuICAgIEYsXG4gICAgRXh0cmFjdENvbGxlY3Rpb248Uz4sXG4gICAgRXhjbHVkZTxPLCAnYm9keScgfCAnbWV0aG9kJz4gJiB7XG4gICAgICBib2R5OiBSZWNvcmQ8c3RyaW5nLCBPcHRpb25zVG9BZGRlckJvZHlBcmd1bWVudDxPPj4gfCBGb3JtRGF0YTtcbiAgICB9XG4gID47XG4gIC8qKiBSZW1vdmUgaXRlbShzKSAoUEFUQ0gpIGZyb20gY29sbGVjdGlvblxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcmVtb3ZlXG4gICAqL1xuICByZW1vdmU6IFJlbW92ZUVuZHBvaW50PFxuICAgIEYsXG4gICAgRXh0cmFjdENvbGxlY3Rpb248Uz5bJ3JlbW92ZSddLFxuICAgIEV4Y2x1ZGU8TywgJ2JvZHknIHwgJ21ldGhvZCc+ICYge1xuICAgICAgYm9keTpcbiAgICAgICAgfCBPcHRpb25zVG9BZGRlckJvZHlBcmd1bWVudDxPPlxuICAgICAgICB8IE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8+W11cbiAgICAgICAgfCBGb3JtRGF0YTtcbiAgICB9XG4gID47XG4gIC8qKiBNb3ZlIGl0ZW0gYmV0d2VlbiBjb2xsZWN0aW9ucyAoUEFUQ0gpIC0gcmVtb3ZlcyBmcm9tIG9sZCwgYWRkcyB0byBuZXdcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I21vdmVcbiAgICovXG4gIG1vdmU6IE1vdmVFbmRwb2ludDxcbiAgICBGLFxuICAgIEV4dHJhY3RDb2xsZWN0aW9uPFM+Wydtb3ZlJ10sXG4gICAge1xuICAgICAgcGF0aDogJ21vdmVQYXRoJyBleHRlbmRzIGtleW9mIE8gPyBPWydtb3ZlUGF0aCddICYgc3RyaW5nIDogT1sncGF0aCddO1xuICAgICAgYm9keTogT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8Tz4gfCBGb3JtRGF0YTtcbiAgICB9XG4gID47XG59XG5cbmV4cG9ydCB0eXBlIFJlc3RFbmRwb2ludEV4dGVuZE9wdGlvbnM8XG4gIE8gZXh0ZW5kcyBQYXJ0aWFsUmVzdEdlbmVyaWNzLFxuICBFIGV4dGVuZHMgeyBib2R5PzogYW55OyBwYXRoPzogc3RyaW5nOyBzY2hlbWE/OiBTY2hlbWE7IG1ldGhvZD86IHN0cmluZyB9LFxuICBGIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbixcbj4gPSBSZXN0RW5kcG9pbnRPcHRpb25zPFxuICBPcHRpb25zVG9GdW5jdGlvbjxPLCBFLCBGPixcbiAgJ3NjaGVtYScgZXh0ZW5kcyBrZXlvZiBPID8gRXh0cmFjdDxPWydzY2hlbWEnXSwgU2NoZW1hIHwgdW5kZWZpbmVkPlxuICA6IEVbJ3NjaGVtYSddXG4+ICZcbiAgUGFydGlhbDxcbiAgICBPbWl0PFxuICAgICAgRSxcbiAgICAgIEtleW9mUmVzdEVuZHBvaW50IHwga2V5b2YgUGFydGlhbFJlc3RHZW5lcmljcyB8IGtleW9mIFJlc3RFbmRwb2ludE9wdGlvbnNcbiAgICA+XG4gID47XG5cbnR5cGUgT3B0aW9uc1RvUmVzdEVuZHBvaW50PFxuICBPIGV4dGVuZHMgUGFydGlhbFJlc3RHZW5lcmljcyxcbiAgRSBleHRlbmRzIFJlc3RJbnN0YW5jZUJhc2UgJiB7IGJvZHk/OiBhbnk7IHBhZ2luYXRpb25GaWVsZD86IHN0cmluZyB9LFxuICBGIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbixcbj4gPVxuICAncGF0aCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICBSZXN0VHlwZTxcbiAgICAgICdzZWFyY2hQYXJhbXMnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICAgICAgUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj5cbiAgICAgIDogUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+LFxuICAgICAgT3B0aW9uc1RvQm9keUFyZ3VtZW50PFxuICAgICAgICAnYm9keScgZXh0ZW5kcyBrZXlvZiBPID8gTyA6IEUsXG4gICAgICAgICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ21ldGhvZCddIDogRVsnbWV0aG9kJ11cbiAgICAgID4sXG4gICAgICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBPWydzY2hlbWEnXSA6IEVbJ3NjaGVtYSddLFxuICAgICAgJ3NpZGVFZmZlY3QnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgIEV4dHJhY3Q8T1snc2lkZUVmZmVjdCddLCBib29sZWFuIHwgdW5kZWZpbmVkPlxuICAgICAgOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBNZXRob2RUb1NpZGU8T1snbWV0aG9kJ10+XG4gICAgICA6IEVbJ3NpZGVFZmZlY3QnXSxcbiAgICAgIE9bJ3Byb2Nlc3MnXSBleHRlbmRzIHt9ID8gUmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+IDogUmVzb2x2ZVR5cGU8Rj4sXG4gICAgICB7XG4gICAgICAgIHBhdGg6IEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+O1xuICAgICAgICBib2R5OiAnYm9keScgZXh0ZW5kcyBrZXlvZiBPID8gT1snYm9keSddIDogRVsnYm9keSddO1xuICAgICAgICBzZWFyY2hQYXJhbXM6ICdzZWFyY2hQYXJhbXMnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NlYXJjaFBhcmFtcyddXG4gICAgICAgIDogRVsnc2VhcmNoUGFyYW1zJ107XG4gICAgICAgIG1ldGhvZDogJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXTtcbiAgICAgICAgcGFnaW5hdGlvbkZpZWxkOiAncGFnaW5hdGlvbkZpZWxkJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICAgIE9bJ3BhZ2luYXRpb25GaWVsZCddXG4gICAgICAgIDogRVsncGFnaW5hdGlvbkZpZWxkJ107XG4gICAgICB9XG4gICAgPlxuICA6ICdib2R5JyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFJlc3RUeXBlPFxuICAgICAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgICBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj5cbiAgICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPEV4Y2x1ZGU8RVsncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgOiBQYXRoQXJnczxFeGNsdWRlPEVbJ3BhdGgnXSwgdW5kZWZpbmVkPj4sXG4gICAgICBPcHRpb25zVG9Cb2R5QXJndW1lbnQ8XG4gICAgICAgIE8sXG4gICAgICAgICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ21ldGhvZCddIDogRVsnbWV0aG9kJ11cbiAgICAgID4sXG4gICAgICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBPWydzY2hlbWEnXSA6IEVbJ3NjaGVtYSddLFxuICAgICAgJ3NpZGVFZmZlY3QnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgIEV4dHJhY3Q8T1snc2lkZUVmZmVjdCddLCBib29sZWFuIHwgdW5kZWZpbmVkPlxuICAgICAgOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBNZXRob2RUb1NpZGU8T1snbWV0aG9kJ10+XG4gICAgICA6IEVbJ3NpZGVFZmZlY3QnXSxcbiAgICAgIE9bJ3Byb2Nlc3MnXSBleHRlbmRzIHt9ID8gUmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+IDogUmVzb2x2ZVR5cGU8Rj4sXG4gICAgICB7XG4gICAgICAgIHBhdGg6IEVbJ3BhdGgnXTtcbiAgICAgICAgYm9keTogT1snYm9keSddO1xuICAgICAgICBzZWFyY2hQYXJhbXM6ICdzZWFyY2hQYXJhbXMnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NlYXJjaFBhcmFtcyddXG4gICAgICAgIDogRVsnc2VhcmNoUGFyYW1zJ107XG4gICAgICAgIG1ldGhvZDogJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXTtcbiAgICAgICAgcGFnaW5hdGlvbkZpZWxkOiAncGFnaW5hdGlvbkZpZWxkJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICAgIE9bJ3BhZ2luYXRpb25GaWVsZCddXG4gICAgICAgIDogRXh0cmFjdDxFWydwYWdpbmF0aW9uRmllbGQnXSwgc3RyaW5nPjtcbiAgICAgIH1cbiAgICA+XG4gIDogJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICBSZXN0VHlwZTxcbiAgICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICAgIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPEV4Y2x1ZGU8RVsncGF0aCddLCB1bmRlZmluZWQ+PixcbiAgICAgIE9wdGlvbnNUb0JvZHlBcmd1bWVudDxcbiAgICAgICAgRSxcbiAgICAgICAgJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXVxuICAgICAgPixcbiAgICAgICdzY2hlbWEnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NjaGVtYSddIDogRVsnc2NoZW1hJ10sXG4gICAgICAnc2lkZUVmZmVjdCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgRXh0cmFjdDxPWydzaWRlRWZmZWN0J10sIGJvb2xlYW4gfCB1bmRlZmluZWQ+XG4gICAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICAgIDogRVsnc2lkZUVmZmVjdCddLFxuICAgICAgT1sncHJvY2VzcyddIGV4dGVuZHMge30gPyBSZXR1cm5UeXBlPE9bJ3Byb2Nlc3MnXT4gOiBSZXNvbHZlVHlwZTxGPixcbiAgICAgIHtcbiAgICAgICAgcGF0aDogRVsncGF0aCddO1xuICAgICAgICBib2R5OiBFWydib2R5J107XG4gICAgICAgIHNlYXJjaFBhcmFtczogT1snc2VhcmNoUGFyYW1zJ107XG4gICAgICAgIG1ldGhvZDogJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXTtcbiAgICAgICAgcGFnaW5hdGlvbkZpZWxkOiAncGFnaW5hdGlvbkZpZWxkJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICAgIE9bJ3BhZ2luYXRpb25GaWVsZCddXG4gICAgICAgIDogRXh0cmFjdDxFWydwYWdpbmF0aW9uRmllbGQnXSwgc3RyaW5nPjtcbiAgICAgIH1cbiAgICA+XG4gIDogUmVzdEluc3RhbmNlPFxuICAgICAgRixcbiAgICAgICdzY2hlbWEnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NjaGVtYSddIDogRVsnc2NoZW1hJ10sXG4gICAgICAnc2lkZUVmZmVjdCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgRXh0cmFjdDxPWydzaWRlRWZmZWN0J10sIGJvb2xlYW4gfCB1bmRlZmluZWQ+XG4gICAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICAgIDogRVsnc2lkZUVmZmVjdCddLFxuICAgICAge1xuICAgICAgICBwYXRoOiAncGF0aCcgZXh0ZW5kcyBrZXlvZiBPID8gRXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD5cbiAgICAgICAgOiBFWydwYXRoJ107XG4gICAgICAgIGJvZHk6ICdib2R5JyBleHRlbmRzIGtleW9mIE8gPyBPWydib2R5J10gOiBFWydib2R5J107XG4gICAgICAgIHNlYXJjaFBhcmFtczogJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2VhcmNoUGFyYW1zJ11cbiAgICAgICAgOiBFWydzZWFyY2hQYXJhbXMnXTtcbiAgICAgICAgbWV0aG9kOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddO1xuICAgICAgICBwYWdpbmF0aW9uRmllbGQ6ICdwYWdpbmF0aW9uRmllbGQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgICAgT1sncGFnaW5hdGlvbkZpZWxkJ11cbiAgICAgICAgOiBFWydwYWdpbmF0aW9uRmllbGQnXTtcbiAgICAgIH1cbiAgICA+O1xuXG5leHBvcnQgdHlwZSBSZXN0RXh0ZW5kZWRFbmRwb2ludDxcbiAgTyBleHRlbmRzIFBhcnRpYWxSZXN0R2VuZXJpY3MsXG4gIEUgZXh0ZW5kcyBSZXN0SW5zdGFuY2VCYXNlICYgeyBnZXRQYWdlPzogdW5rbm93biB9LFxuPiA9IE9wdGlvbnNUb1Jlc3RFbmRwb2ludDxcbiAgTyxcbiAgRSAmXG4gICAgKEUgZXh0ZW5kcyB7IGdldFBhZ2U6IHsgcGFnaW5hdGlvbkZpZWxkOiBzdHJpbmcgfSB9ID9cbiAgICAgIHsgcGFnaW5hdGlvbkZpZWxkOiBFWydnZXRQYWdlJ11bJ3BhZ2luYXRpb25GaWVsZCddIH1cbiAgICA6IHVua25vd24pLFxuICBSZXN0SW5zdGFuY2U8XG4gICAgKFxuICAgICAgLi4uYXJnczogUGFyYW1ldGVyczxFPlxuICAgICkgPT4gT1sncHJvY2VzcyddIGV4dGVuZHMge30gPyBQcm9taXNlPFJldHVyblR5cGU8T1sncHJvY2VzcyddPj5cbiAgICA6IFJldHVyblR5cGU8RT4sXG4gICAgJ3NjaGVtYScgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2NoZW1hJ10gOiBFWydzY2hlbWEnXSxcbiAgICAnc2lkZUVmZmVjdCcgZXh0ZW5kcyBrZXlvZiBPID8gRXh0cmFjdDxPWydzaWRlRWZmZWN0J10sIGJvb2xlYW4gfCB1bmRlZmluZWQ+XG4gICAgOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBNZXRob2RUb1NpZGU8T1snbWV0aG9kJ10+XG4gICAgOiBFWydzaWRlRWZmZWN0J11cbiAgPlxuPiAmXG4gIE9taXQ8TywgS2V5b2ZSZXN0RW5kcG9pbnQ+ICZcbiAgT21pdDxFLCBLZXlvZlJlc3RFbmRwb2ludCB8IGtleW9mIE8+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnRpYWxSZXN0R2VuZXJpY3Mge1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3BhdGggKi9cbiAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNzY2hlbWEgKi9cbiAgcmVhZG9ubHkgc2NoZW1hPzogU2NoZW1hIHwgdW5kZWZpbmVkO1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I21ldGhvZCAqL1xuICByZWFkb25seSBtZXRob2Q/OiBzdHJpbmc7XG4gIC8qKiBPbmx5IHVzZWQgZm9yIHR5cGVzICovXG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjYm9keSAqL1xuICBib2R5PzogYW55O1xuICAvKiogT25seSB1c2VkIGZvciB0eXBlcyAqL1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3NlYXJjaFBhcmFtcyAqL1xuICBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGFnaW5hdGlvbmZpZWxkICovXG4gIHJlYWRvbmx5IHBhZ2luYXRpb25GaWVsZD86IHN0cmluZztcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwcm9jZXNzICovXG4gIHByb2Nlc3M/KHZhbHVlOiBhbnksIC4uLmFyZ3M6IGFueSk6IGFueTtcbn1cbi8qKiBHZW5lcmljIHR5cGVzIHdoZW4gY29uc3RydWN0aW5nIGEgUmVzdEVuZHBvaW50XG4gKlxuICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2luaGVyaXRhbmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEdlbmVyaWNzIGV4dGVuZHMgUGFydGlhbFJlc3RHZW5lcmljcyB7XG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgUGFnaW5hdGlvbkVuZHBvaW50PFxuICBFIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiAmIFJlc3RHZW5lcmljcyAmIHsgc2lkZUVmZmVjdD86IGJvb2xlYW4gfCB1bmRlZmluZWQgfSxcbiAgQSBleHRlbmRzIGFueVtdLFxuPiA9IFJlc3RJbnN0YW5jZUJhc2U8XG4gIFBhcmFtRmV0Y2hOb0JvZHk8QVswXSwgUmVzb2x2ZVR5cGU8RT4+LFxuICBFWydzY2hlbWEnXSxcbiAgRVsnc2lkZUVmZmVjdCddLFxuICBQaWNrPEUsICdwYXRoJyB8ICdzZWFyY2hQYXJhbXMnIHwgJ2JvZHknPiAmIHtcbiAgICBzZWFyY2hQYXJhbXM6IE9taXQ8QVswXSwga2V5b2YgUGF0aEFyZ3M8RVsncGF0aCddPj47XG4gIH1cbj47XG4vKiogTWVyZ2UgcGFnaW5hdGlvbiBmaWVsZCBDIGludG8gYm9keSwgbWFraW5nIGl0IHJlcXVpcmVkICovXG50eXBlIFBhZ2luYXRpb25JbnRvQm9keTxCb2R5LCBDIGV4dGVuZHMgc3RyaW5nPiA9IEJvZHkgJiB7XG4gIFtLIGluIENdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xufTtcblxuLyoqIFBhZ2luYXRlZCBzZWFyY2hQYXJhbXMgdHlwZSAqL1xudHlwZSBQYWdpbmF0ZWRTZWFyY2hQYXJhbXM8XG4gIEUgZXh0ZW5kcyB7IHNlYXJjaFBhcmFtcz86IGFueTsgcGF0aD86IHN0cmluZyB9LFxuICBDIGV4dGVuZHMgc3RyaW5nLFxuPiA9IHtcbiAgW0sgaW4gQ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG59ICYgRVsnc2VhcmNoUGFyYW1zJ10gJlxuICBQYXRoQXJnczxFeGNsdWRlPEVbJ3BhdGgnXSwgdW5kZWZpbmVkPj47XG5cbi8qKiBzZWFyY2hQYXJhbXMgdmVyc2lvbjogcGFnaW5hdGlvbiBpbiBzZWFyY2hQYXJhbXMsIG9wdGlvbmFsIGJvZHkgc3VwcG9ydCAqL1xudHlwZSBQYWdpbmF0aW9uRmllbGRJblNlYXJjaFBhcmFtczxcbiAgRSBleHRlbmRzIEZldGNoRnVuY3Rpb24gJiBSZXN0R2VuZXJpY3MgJiB7IHNpZGVFZmZlY3Q/OiBib29sZWFuIHwgdW5kZWZpbmVkIH0sXG4gIEMgZXh0ZW5kcyBzdHJpbmcsXG4+ID0gUmVzdEluc3RhbmNlQmFzZTxcbiAgLy8gVW5pb24gYWxsb3dzIGNhbGxpbmcgd2l0aCBqdXN0IHNlYXJjaFBhcmFtcyBvciB3aXRoIHNlYXJjaFBhcmFtcyArIGJvZHlcbiAgfCBQYXJhbUZldGNoTm9Cb2R5PFBhZ2luYXRlZFNlYXJjaFBhcmFtczxFLCBDPiwgUmVzb2x2ZVR5cGU8RT4+XG4gIHwgUGFyYW1GZXRjaFdpdGhCb2R5PFxuICAgICAgUGFnaW5hdGVkU2VhcmNoUGFyYW1zPEUsIEM+LFxuICAgICAgTm9uTnVsbGFibGU8RVsnYm9keSddPixcbiAgICAgIFJlc29sdmVUeXBlPEU+XG4gICAgPixcbiAgRVsnc2NoZW1hJ10sXG4gIEVbJ3NpZGVFZmZlY3QnXSxcbiAgUGljazxFLCAncGF0aCcgfCAnc2VhcmNoUGFyYW1zJyB8ICdib2R5Jz4gJiB7XG4gICAgc2VhcmNoUGFyYW1zOiB7XG4gICAgICBbSyBpbiBDXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbiAgICB9ICYgRVsnc2VhcmNoUGFyYW1zJ107XG4gIH1cbj4gJiB7IHBhZ2luYXRpb25GaWVsZDogQyB9O1xuXG4vKiogYm9keSB2ZXJzaW9uOiBwYWdpbmF0aW9uIGZpZWxkIGlzIGluIGJvZHkgKGJvZHkgcmVxdWlyZWQpICovXG50eXBlIFBhZ2luYXRpb25GaWVsZEluQm9keTxcbiAgRSBleHRlbmRzIEZldGNoRnVuY3Rpb24gJiBSZXN0R2VuZXJpY3MgJiB7IHNpZGVFZmZlY3Q/OiBib29sZWFuIHwgdW5kZWZpbmVkIH0sXG4gIEMgZXh0ZW5kcyBzdHJpbmcsXG4+ID0gUmVzdEluc3RhbmNlQmFzZTxcbiAgUGFyYW1GZXRjaFdpdGhCb2R5PFxuICAgIEVbJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8RXhjbHVkZTxFWydwYXRoJ10sIHVuZGVmaW5lZD4+LFxuICAgIFBhZ2luYXRpb25JbnRvQm9keTxFWydib2R5J10sIEM+LFxuICAgIFJlc29sdmVUeXBlPEU+XG4gID4sXG4gIEVbJ3NjaGVtYSddLFxuICBFWydzaWRlRWZmZWN0J10sXG4gIFBpY2s8RSwgJ3BhdGgnIHwgJ3NlYXJjaFBhcmFtcyc+ICYge1xuICAgIGJvZHk6IFBhZ2luYXRpb25JbnRvQm9keTxFWydib2R5J10sIEM+O1xuICB9XG4+ICYgeyBwYWdpbmF0aW9uRmllbGQ6IEMgfTtcblxuLyoqIFJldHJpZXZlcyB0aGUgbmV4dCBwYWdlIG9mIHJlc3VsdHMgYnkgcGFnaW5hdGlvbiBmaWVsZCAqL1xuZXhwb3J0IHR5cGUgUGFnaW5hdGlvbkZpZWxkRW5kcG9pbnQ8XG4gIEUgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uICYgUmVzdEdlbmVyaWNzICYgeyBzaWRlRWZmZWN0PzogYm9vbGVhbiB8IHVuZGVmaW5lZCB9LFxuICBDIGV4dGVuZHMgc3RyaW5nLFxuPiA9XG4gIC8vIElmIGJvZHkgY2FuIGJlIHVuZGVmaW5lZCBvciBwYWdpbmF0aW9uIGZpZWxkIG5vdCBpbiBib2R5LCB1c2Ugc2VhcmNoUGFyYW1zXG4gIHVuZGVmaW5lZCBleHRlbmRzIEVbJ2JvZHknXSA/IFBhZ2luYXRpb25GaWVsZEluU2VhcmNoUGFyYW1zPEUsIEM+XG4gIDogLy8gSWYgcGFnaW5hdGlvbiBmaWVsZCBDIGlzIGEga2V5IG9mIGJvZHksIG1lcmdlIGludG8gYm9keVxuICBDIGV4dGVuZHMga2V5b2YgRVsnYm9keSddID8gUGFnaW5hdGlvbkZpZWxkSW5Cb2R5PEUsIEM+XG4gIDogLy8gT3RoZXJ3aXNlIHVzZSBzZWFyY2hQYXJhbXNcbiAgICBQYWdpbmF0aW9uRmllbGRJblNlYXJjaFBhcmFtczxFLCBDPjtcblxuZXhwb3J0IHR5cGUgQWRkRW5kcG9pbnQ8XG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uID0gRmV0Y2hGdW5jdGlvbixcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IGFueSxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keTogYW55O1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiBhbnkgfSxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICBSZXN0RmV0Y2g8XG4gICAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICAgIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgIDogUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+LFxuICAgIE9bJ2JvZHknXSxcbiAgICBSZXNvbHZlVHlwZTxGPlxuICA+LFxuICBTLFxuICB0cnVlLFxuICBPbWl0PE8sICdtZXRob2QnPiAmIHsgbWV0aG9kOiAnUE9TVCcgfVxuPjtcbmV4cG9ydCB0eXBlIFJlbW92ZUVuZHBvaW50PFxuICBGIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiA9IEZldGNoRnVuY3Rpb24sXG4gIFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQgPSBhbnksXG4gIE8gZXh0ZW5kcyB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk6IGFueTtcbiAgICBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gIH0gPSB7IHBhdGg6IHN0cmluZzsgYm9keTogYW55IH0sXG4+ID0gUmVzdEluc3RhbmNlQmFzZTxcbiAgUmVzdEZldGNoPFxuICAgICdzZWFyY2hQYXJhbXMnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgICBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj5cbiAgICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj5cbiAgICA6IFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PixcbiAgICBPWydib2R5J10sXG4gICAgUmVzb2x2ZVR5cGU8Rj5cbiAgPixcbiAgUyxcbiAgdHJ1ZSxcbiAgT21pdDxPLCAnbWV0aG9kJz4gJiB7IG1ldGhvZDogJ1BBVENIJyB9XG4+O1xuZXhwb3J0IHR5cGUgTW92ZUVuZHBvaW50PFxuICBGIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiA9IEZldGNoRnVuY3Rpb24sXG4gIFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQgPSBhbnksXG4gIE8gZXh0ZW5kcyB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk6IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiBhbnkgfSxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICBSZXN0RmV0Y2g8UGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+LCBPWydib2R5J10sIFJlc29sdmVUeXBlPEY+PixcbiAgUyxcbiAgdHJ1ZSxcbiAgT21pdDxPLCAnbWV0aG9kJyB8ICdzZWFyY2hQYXJhbXMnPiAmIHsgbWV0aG9kOiAnUEFUQ0gnIH1cbj47XG5cbnR5cGUgT3B0aW9uc0JvZHlEZWZhdWx0PE8gZXh0ZW5kcyBSZXN0R2VuZXJpY3M+ID1cbiAgJ2JvZHknIGV4dGVuZHMga2V5b2YgTyA/IE9cbiAgOiBPWydtZXRob2QnXSBleHRlbmRzICdQT1NUJyB8ICdQVVQnIHwgJ1BBVENIJyA/IE8gJiB7IGJvZHk6IGFueSB9XG4gIDogTyAmIHsgYm9keTogdW5kZWZpbmVkIH07XG5cbnR5cGUgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8TyBleHRlbmRzIHsgYm9keT86IGFueSB9PiA9XG4gICdib2R5JyBleHRlbmRzIGtleW9mIE8gPyBPWydib2R5J10gOiBhbnk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEVuZHBvaW50T3B0aW9uczxcbiAgRiBleHRlbmRzIEZldGNoRnVuY3Rpb24gPSBGZXRjaEZ1bmN0aW9uLFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuPiBleHRlbmRzIEVuZHBvaW50RXh0cmFPcHRpb25zPEY+IHtcbiAgLyoqIFByZXBlbmRlZCB0byBhbGwgdXJsc1xuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjdXJsUHJlZml4XG4gICAqL1xuICB1cmxQcmVmaXg/OiBzdHJpbmc7XG4gIHJlcXVlc3RJbml0PzogUmVxdWVzdEluaXQ7XG4gIC8qKiBDYWxsZWQgYnkgZ2V0UmVxdWVzdEluaXQgdG8gZGV0ZXJtaW5lIEhUVFAgSGVhZGVyc1xuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjZ2V0SGVhZGVyc1xuICAgKi9cbiAgZ2V0SGVhZGVycz8oaGVhZGVyczogSGVhZGVyc0luaXQpOiBQcm9taXNlPEhlYWRlcnNJbml0PiB8IEhlYWRlcnNJbml0O1xuICAvKiogUHJlcGFyZXMgUmVxdWVzdEluaXQgdXNlZCBpbiBmZXRjaC4gVGhpcyBpcyBzZW50IHRvIGZldGNoUmVzcG9uc2UoKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjZ2V0UmVxdWVzdEluaXRcbiAgICovXG4gIGdldFJlcXVlc3RJbml0Pyhib2R5OiBhbnkpOiBQcm9taXNlPFJlcXVlc3RJbml0PiB8IFJlcXVlc3RJbml0O1xuICAvKiogUGVyZm9ybXMgdGhlIGZldGNoIGNhbGxcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2ZldGNoUmVzcG9uc2VcbiAgICovXG4gIGZldGNoUmVzcG9uc2U/KGlucHV0OiBSZXF1ZXN0SW5mbywgaW5pdDogUmVxdWVzdEluaXQpOiBQcm9taXNlPGFueT47XG4gIC8qKiBUYWtlcyB0aGUgUmVzcG9uc2UgYW5kIHBhcnNlcyB2aWEgLnRleHQoKSBvciAuanNvbigpXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwYXJzZVJlc3BvbnNlXG4gICAqL1xuICBwYXJzZVJlc3BvbnNlPyhyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPGFueT47XG5cbiAgc2lkZUVmZmVjdD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICBmZXRjaD86IEY7XG4gIGtleT8oLi4uYXJnczogUGFyYW1ldGVyczxGPik6IHN0cmluZztcbiAgdXJsPyguLi5hcmdzOiBQYXJhbWV0ZXJzPEY+KTogc3RyaW5nO1xuICB1cGRhdGU/OiBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uPEYsIFM+O1xufVxuXG5leHBvcnQgdHlwZSBSZXN0RW5kcG9pbnRDb25zdHJ1Y3Rvck9wdGlvbnM8TyBleHRlbmRzIFJlc3RHZW5lcmljcyA9IGFueT4gPVxuICBSZXN0RW5kcG9pbnRPcHRpb25zPFxuICAgIFJlc3RGZXRjaDxcbiAgICAgICdzZWFyY2hQYXJhbXMnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICAgICAgUGF0aEFyZ3M8T1sncGF0aCddPlxuICAgICAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8T1sncGF0aCddPlxuICAgICAgOiBQYXRoQXJnczxPWydwYXRoJ10+LFxuICAgICAgT3B0aW9uc1RvQm9keUFyZ3VtZW50PFxuICAgICAgICBPLFxuICAgICAgICAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXVxuICAgICAgICA6IE8gZXh0ZW5kcyB7IHNpZGVFZmZlY3Q6IHRydWUgfSA/ICdQT1NUJ1xuICAgICAgICA6ICdHRVQnXG4gICAgICA+LFxuICAgICAgT1sncHJvY2VzcyddIGV4dGVuZHMge30gPyBSZXR1cm5UeXBlPE9bJ3Byb2Nlc3MnXT5cbiAgICAgIDogYW55IC8qRGVub3JtYWxpemU8T1snc2NoZW1hJ10+Ki9cbiAgICA+LFxuICAgIE9bJ3NjaGVtYSddXG4gID47XG5cbi8qKiBTaW1wbGlmaWVzIGVuZHBvaW50IGRlZmluaXRpb25zIHRoYXQgZm9sbG93IFJFU1QgcGF0dGVybnNcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXN0RW5kcG9pbnQ8XG4gIE8gZXh0ZW5kcyBSZXN0R2VuZXJpY3MgPSBhbnksXG4+IGV4dGVuZHMgUmVzdEluc3RhbmNlPFxuICBSZXN0RmV0Y2g8XG4gICAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICAgIFBhdGhBcmdzPE9bJ3BhdGgnXT5cbiAgICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxPWydwYXRoJ10+XG4gICAgOiBQYXRoQXJnczxPWydwYXRoJ10+LFxuICAgIE9wdGlvbnNUb0JvZHlBcmd1bWVudDxcbiAgICAgIE8sXG4gICAgICAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXVxuICAgICAgOiBPIGV4dGVuZHMgeyBzaWRlRWZmZWN0OiB0cnVlIH0gPyAnUE9TVCdcbiAgICAgIDogJ0dFVCdcbiAgICA+LFxuICAgIE9bJ3Byb2Nlc3MnXSBleHRlbmRzIHt9ID8gUmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+XG4gICAgOiBhbnkgLypEZW5vcm1hbGl6ZTxPWydzY2hlbWEnXT4qL1xuICA+LFxuICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBPWydzY2hlbWEnXSA6IHVuZGVmaW5lZCxcbiAgJ3NpZGVFZmZlY3QnIGV4dGVuZHMga2V5b2YgTyA/IEV4dHJhY3Q8T1snc2lkZUVmZmVjdCddLCBib29sZWFuIHwgdW5kZWZpbmVkPlxuICA6IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT4sXG4gICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE9cbiAgOiBPICYge1xuICAgICAgbWV0aG9kOiBPIGV4dGVuZHMgeyBzaWRlRWZmZWN0OiB0cnVlIH0gPyAnUE9TVCcgOiAnR0VUJztcbiAgICB9XG4+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEVuZHBvaW50Q29uc3RydWN0b3Ige1xuICAvKiogU2ltcGxpZmllcyBlbmRwb2ludCBkZWZpbml0aW9ucyB0aGF0IGZvbGxvdyBSRVNUIHBhdHRlcm5zXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludFxuICAgKi9cbiAgbmV3IDxPIGV4dGVuZHMgUmVzdEdlbmVyaWNzID0gYW55Pih7XG4gICAgbWV0aG9kLFxuICAgIHNpZGVFZmZlY3QsXG4gICAgbmFtZSxcbiAgICAuLi5vcHRpb25zXG4gIH06IFJlc3RFbmRwb2ludENvbnN0cnVjdG9yT3B0aW9uczxPPiAmIFJlYWRvbmx5PE8+KTogUmVzdEVuZHBvaW50PE8+O1xuICByZWFkb25seSBwcm90b3R5cGU6IFJlc3RJbnN0YW5jZUJhc2U7XG59XG5cbmV4cG9ydCB0eXBlIE1ldGhvZFRvU2lkZTxNPiA9XG4gIE0gZXh0ZW5kcyBzdHJpbmcgP1xuICAgIE0gZXh0ZW5kcyAnR0VUJyA/XG4gICAgICB1bmRlZmluZWRcbiAgICA6IHRydWVcbiAgOiB1bmRlZmluZWQ7XG5cbi8qKiBSZXN0RW5kcG9pbnQgdHlwZXMgc2ltcGxpZmllZCAqL1xuZXhwb3J0IHR5cGUgUmVzdFR5cGU8XG4gIFVybFBhcmFtcyA9IGFueSxcbiAgQm9keSA9IGFueSxcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgTSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBSID0gYW55LFxuICBPIGV4dGVuZHMge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5PzogYW55O1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgICBwYWdpbmF0aW9uRmllbGQ/OiBzdHJpbmc7XG4gIH0gPSB7IHBhdGg6IHN0cmluZzsgcGFnaW5hdGlvbkZpZWxkOiBzdHJpbmcgfSxcbj4gPSBJZlR5cGVTY3JpcHRMb29zZU51bGw8XG4gIFJlc3RJbnN0YW5jZTxSZXN0RmV0Y2g8VXJsUGFyYW1zLCBCb2R5LCBSPiwgUywgTSwgTz4sXG4gIEJvZHkgZXh0ZW5kcyB7fSA/IFJlc3RUeXBlV2l0aEJvZHk8VXJsUGFyYW1zLCBTLCBNLCBCb2R5LCBSLCBPPlxuICA6IFJlc3RUeXBlTm9Cb2R5PFVybFBhcmFtcywgUywgTSwgUiwgTz5cbj47XG5cbmV4cG9ydCB0eXBlIFJlc3RUeXBlV2l0aEJvZHk8XG4gIFVybFBhcmFtcyA9IGFueSxcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgTSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBCb2R5ID0gYW55LFxuICBSID0gYW55IC8qRGVub3JtYWxpemU8Uz4qLyxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keT86IGFueTtcbiAgICBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gIH0gPSB7IHBhdGg6IHN0cmluZzsgYm9keTogYW55IH0sXG4+ID0gUmVzdEluc3RhbmNlPFBhcmFtRmV0Y2hXaXRoQm9keTxVcmxQYXJhbXMsIEJvZHksIFI+LCBTLCBNLCBPPjtcblxuZXhwb3J0IHR5cGUgUmVzdFR5cGVOb0JvZHk8XG4gIFVybFBhcmFtcyA9IGFueSxcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgTSBleHRlbmRzIGJvb2xlYW4gfCB1bmRlZmluZWQgPSBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBSID0gYW55IC8qRGVub3JtYWxpemU8Uz4qLyxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keT86IHVuZGVmaW5lZDtcbiAgICBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gIH0gPSB7IHBhdGg6IHN0cmluZzsgYm9keTogdW5kZWZpbmVkIH0sXG4+ID0gUmVzdEluc3RhbmNlPFBhcmFtRmV0Y2hOb0JvZHk8VXJsUGFyYW1zLCBSPiwgUywgTSwgTz47XG5cbi8qKiBTaW1wbGUgcGFyYW1ldGVycywgYW5kIGJvZHkgZmV0Y2ggZnVuY3Rpb25zICovXG5leHBvcnQgdHlwZSBSZXN0RmV0Y2g8XG4gIFVybFBhcmFtcyxcbiAgQm9keSA9IHt9LFxuICBSZXNvbHZlID0gYW55LFxuPiA9IElmVHlwZVNjcmlwdExvb3NlTnVsbDxcbiAgfCBQYXJhbUZldGNoTm9Cb2R5PFVybFBhcmFtcywgUmVzb2x2ZT5cbiAgfCBQYXJhbUZldGNoV2l0aEJvZHk8VXJsUGFyYW1zLCBCb2R5LCBSZXNvbHZlPixcbiAgQm9keSBleHRlbmRzIHt9ID8gUGFyYW1GZXRjaFdpdGhCb2R5PFVybFBhcmFtcywgQm9keSwgUmVzb2x2ZT5cbiAgOiBQYXJhbUZldGNoTm9Cb2R5PFVybFBhcmFtcywgUmVzb2x2ZT5cbj47XG5cbmV4cG9ydCB0eXBlIFBhcmFtRmV0Y2hXaXRoQm9keTxQLCBCID0ge30sIFIgPSBhbnk+ID1cbiAgLy8gd2UgbXVzdCBhbHdheXMgYWxsb3cgdW5kZWZpbmVkIGluIGEgdW5pb24gYW5kIGdpdmUgaXQgYSB0eXBlIHdpdGhvdXQgcGFyYW1zXG4gIFAgZXh0ZW5kcyB1bmRlZmluZWQgPyAodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgYm9keTogQikgPT4gUHJvbWlzZTxSPlxuICA6IC8vIGV2ZW4gd2l0aCBsb29zZSBudWxsLCB0aGlzIHdpbGwgb25seSBiZSB0cnVlIHdoZW4gYWxsIG1lbWJlcnMgYXJlIG9wdGlvbmFsXG4gIHt9IGV4dGVuZHMgUCA/XG4gICAgLy8gdGhpcyBzYWZlbHkgaGFuZGxlcyBQYXRoQXJncyB3aXRoIG5vIG1lbWJlcnMgdGhhdCByZXN1bHRzIGluIGEgc2ltcGxlIGB1bmtub3duYCB0eXBlXG4gICAga2V5b2YgUCBleHRlbmRzIG5ldmVyID9cbiAgICAgICh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlLCBib2R5OiBCKSA9PiBQcm9taXNlPFI+XG4gICAgOiB8ICgodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgcGFyYW1zOiBQLCBib2R5OiBCKSA9PiBQcm9taXNlPFI+KVxuICAgICAgfCAoKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsIGJvZHk6IEIpID0+IFByb21pc2U8Uj4pXG4gIDogKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsIHBhcmFtczogUCwgYm9keTogQikgPT4gUHJvbWlzZTxSPjtcblxuZXhwb3J0IHR5cGUgUGFyYW1GZXRjaE5vQm9keTxQLCBSID0gYW55PiA9XG4gIC8vIHdlIG11c3QgYWx3YXlzIGFsbG93IHVuZGVmaW5lZCBpbiBhIHVuaW9uIGFuZCBnaXZlIGl0IGEgdHlwZSB3aXRob3V0IHBhcmFtc1xuICBQIGV4dGVuZHMgdW5kZWZpbmVkID8gKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UpID0+IFByb21pc2U8Uj5cbiAgOiAvLyBldmVuIHdpdGggbG9vc2UgbnVsbCwgdGhpcyB3aWxsIG9ubHkgYmUgdHJ1ZSB3aGVuIGFsbCBtZW1iZXJzIGFyZSBvcHRpb25hbFxuICB7fSBleHRlbmRzIFAgP1xuICAgIC8vIHRoaXMgc2FmZWx5IGhhbmRsZXMgUGF0aEFyZ3Mgd2l0aCBubyBtZW1iZXJzIHRoYXQgcmVzdWx0cyBpbiBhIHNpbXBsZSBgdW5rbm93bmAgdHlwZVxuICAgIGtleW9mIFAgZXh0ZW5kcyBuZXZlciA/XG4gICAgICAodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSkgPT4gUHJvbWlzZTxSPlxuICAgIDogfCAoKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsIHBhcmFtczogUCkgPT4gUHJvbWlzZTxSPilcbiAgICAgIHwgKCh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlKSA9PiBQcm9taXNlPFI+KVxuICA6ICh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlLCBwYXJhbXM6IFApID0+IFByb21pc2U8Uj47XG5cbi8vIHNhbWUgYWxnb3JpdGhtLCBidXQgZm9yIEFyZ3MgKGFrYSByZWFkb25seSBhbnlbXSlcbmV4cG9ydCB0eXBlIFBhcmFtVG9BcmdzPFA+ID1cbiAgUCBleHRlbmRzIHVuZGVmaW5lZCA/IFtdXG4gIDoge30gZXh0ZW5kcyBQID9cbiAgICBrZXlvZiBQIGV4dGVuZHMgbmV2ZXIgP1xuICAgICAgW11cbiAgICA6IFtdIHwgW1BdXG4gIDogW1BdO1xuXG50eXBlIElmVHlwZVNjcmlwdExvb3NlTnVsbDxZLCBOPiA9IDEgfCB1bmRlZmluZWQgZXh0ZW5kcyAxID8gWSA6IE47XG5cbmV4cG9ydCB0eXBlIEtleW9mUmVzdEVuZHBvaW50ID0ga2V5b2YgUmVzdEluc3RhbmNlO1xuXG5leHBvcnQgdHlwZSBGcm9tRmFsbEJhY2s8SyBleHRlbmRzIGtleW9mIEUsIE8sIEU+ID1cbiAgSyBleHRlbmRzIGtleW9mIE8gPyBPW0tdIDogRVtLXTtcblxuZXhwb3J0IHR5cGUgRmV0Y2hNdXRhdGU8XG4gIEEgZXh0ZW5kcyByZWFkb25seSBhbnlbXSA9IFthbnksIHt9XSB8IFt7fV0sXG4gIFIgPSBhbnksXG4+ID0gKHRoaXM6IFJlc3RJbnN0YW5jZSwgLi4uYXJnczogQSkgPT4gUHJvbWlzZTxSPjtcblxuZXhwb3J0IHR5cGUgRmV0Y2hHZXQ8QSBleHRlbmRzIHJlYWRvbmx5IGFueVtdID0gW2FueV0sIFIgPSBhbnk+ID0gKFxuICB0aGlzOiBSZXN0SW5zdGFuY2UsXG4gIC4uLmFyZ3M6IEFcbikgPT4gUHJvbWlzZTxSPjtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdHM8TywgRD4gPSB7XG4gIFtLIGluIGtleW9mIE8gfCBrZXlvZiBEXTogSyBleHRlbmRzIGtleW9mIE8gPyBFeGNsdWRlPE9bS10sIHVuZGVmaW5lZD5cbiAgOiBEW0V4dHJhY3Q8Sywga2V5b2YgRD5dO1xufTtcblxuZXhwb3J0IHR5cGUgR2V0RW5kcG9pbnQ8XG4gIE8gZXh0ZW5kcyB7XG4gICAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHNjaGVtYTogU2NoZW1hO1xuICAgIC8qKiBPbmx5IHVzZWQgZm9yIHR5cGVzICovXG4gICAgcmVhZG9ubHkgc2VhcmNoUGFyYW1zPzogYW55O1xuICAgIHJlYWRvbmx5IHBhZ2luYXRpb25GaWVsZD86IHN0cmluZztcbiAgfSA9IHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgc2NoZW1hOiBTY2hlbWE7XG4gIH0sXG4+ID0gUmVzdFR5cGVOb0JvZHk8XG4gICdzZWFyY2hQYXJhbXMnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgIFBhdGhBcmdzPE9bJ3BhdGgnXT5cbiAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8T1sncGF0aCddPlxuICA6IFBhdGhBcmdzPE9bJ3BhdGgnXT4sXG4gIE9bJ3NjaGVtYSddLFxuICB1bmRlZmluZWQsXG4gIGFueSxcbiAgTyAmIHsgbWV0aG9kOiAnR0VUJyB9XG4+O1xuXG5leHBvcnQgdHlwZSBNdXRhdGVFbmRwb2ludDxcbiAgTyBleHRlbmRzIHtcbiAgICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc2NoZW1hOiBTY2hlbWE7XG4gICAgLyoqIE9ubHkgdXNlZCBmb3IgdHlwZXMgKi9cbiAgICByZWFkb25seSBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gICAgLyoqIE9ubHkgdXNlZCBmb3IgdHlwZXMgKi9cbiAgICByZWFkb25seSBib2R5PzogYW55O1xuICB9ID0ge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5OiBhbnk7XG4gICAgc2NoZW1hOiBTY2hlbWE7XG4gIH0sXG4+ID0gUmVzdFR5cGVXaXRoQm9keTxcbiAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgUGF0aEFyZ3M8T1sncGF0aCddPlxuICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxPWydwYXRoJ10+XG4gIDogUGF0aEFyZ3M8T1sncGF0aCddPixcbiAgT1snc2NoZW1hJ10sXG4gIHRydWUsXG4gIE9bJ2JvZHknXSxcbiAgYW55LFxuICBPICYgeyBib2R5OiBhbnk7IG1ldGhvZDogJ1BPU1QnIHwgJ1BVVCcgfCAnUEFUQ0gnIHwgJ0RFTEVURScgfVxuPjtcbiJdLCJtYXBwaW5ncyI6IiIsImlnbm9yZUxpc3QiOltdfQ==
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL1Jlc3RFbmRwb2ludFR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgRW5kcG9pbnRFeHRyYU9wdGlvbnMsXG4gIEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsXG4gIFNjaGVtYSxcbiAgRmV0Y2hGdW5jdGlvbixcbiAgUmVzb2x2ZVR5cGUsXG59IGZyb20gJ0BkYXRhLWNsaWVudC9lbmRwb2ludCc7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbGxlY3Rpb24gfSBmcm9tICcuL2V4dHJhY3RDb2xsZWN0aW9uLmpzJztcbmltcG9ydCB7XG4gIE9wdGlvbnNUb0JvZHlBcmd1bWVudCxcbiAgT3B0aW9uc1RvRnVuY3Rpb24sXG59IGZyb20gJy4vT3B0aW9uc1RvRnVuY3Rpb24uanMnO1xuaW1wb3J0IHsgUGF0aEFyZ3MsIFNvZnRQYXRoQXJncyB9IGZyb20gJy4vcGF0aFR5cGVzLmpzJztcbmltcG9ydCB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuL1Jlc3RFbmRwb2ludFR5cGVIZWxwLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXN0SW5zdGFuY2VCYXNlPFxuICBGIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiA9IEZldGNoRnVuY3Rpb24sXG4gIFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQgPSBhbnksXG4gIE0gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keT86IGFueTtcbiAgICBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gICAgbWV0aG9kPzogc3RyaW5nO1xuICB9ID0geyBwYXRoOiBzdHJpbmcgfSxcbj4gZXh0ZW5kcyBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlPEYsIFMsIE0+IHtcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNib2R5ICovXG4gIHJlYWRvbmx5IGJvZHk/OiAnYm9keScgZXh0ZW5kcyBrZXlvZiBPID8gT1snYm9keSddIDogYW55O1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3NlYXJjaFBhcmFtcyAqL1xuICByZWFkb25seSBzZWFyY2hQYXJhbXM/OiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gPyBPWydzZWFyY2hQYXJhbXMnXVxuICA6IC8vIHVua25vd24gaXMgaWRlbnRpdHkgd2l0aCAnJicgdHlwZSBvcGVyYXRvclxuICAgIHVua25vd247XG5cbiAgLyoqIFBhdHRlcm4gdG8gY29uc3RydWN0IHVybCBiYXNlZCBvbiBVcmwgUGFyYW1ldGVyc1xuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogT1sncGF0aCddO1xuICAvKiogUHJlcGVuZGVkIHRvIGFsbCB1cmxzXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCN1cmxQcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHVybFByZWZpeDogc3RyaW5nO1xuICByZWFkb25seSByZXF1ZXN0SW5pdDogUmVxdWVzdEluaXQ7XG4gIC8qKiBIVFRQIHJlcXVlc3QgbWV0aG9kXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNtZXRob2RcbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZDogKE8gJiB7IG1ldGhvZDogc3RyaW5nIH0pWydtZXRob2QnXTtcbiAgcmVhZG9ubHkgc2lnbmFsOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZDtcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwYWdpbmF0aW9uRmllbGQgKi9cbiAgcmVhZG9ubHkgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nO1xuXG4gIC8qIGZldGNoIGxpZmVjeWNsZXMgKi9cbiAgLyogYmVmb3JlLWZldGNoICovXG4gIC8qKiBCdWlsZHMgdGhlIFVSTCB0byBmZXRjaFxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjdXJsXG4gICAqL1xuICB1cmwoLi4uYXJnczogUGFyYW1ldGVyczxGPik6IHN0cmluZztcbiAgLyoqIEVuY29kZSB0aGUgc2VhcmNoUGFyYW1zIGNvbXBvbmVudCBvZiB0aGUgdXJsXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNzZWFyY2hUb1N0cmluZ1xuICAgKi9cbiAgc2VhcmNoVG9TdHJpbmcoc2VhcmNoUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nO1xuICAvKiogUHJlcGFyZXMgUmVxdWVzdEluaXQgdXNlZCBpbiBmZXRjaC4gVGhpcyBpcyBzZW50IHRvIGZldGNoUmVzcG9uc2UoKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjZ2V0UmVxdWVzdEluaXRcbiAgICovXG4gIGdldFJlcXVlc3RJbml0KFxuICAgIHRoaXM6IGFueSxcbiAgICBib2R5PzogUmVxdWVzdEluaXRbJ2JvZHknXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiBQcm9taXNlPFJlcXVlc3RJbml0PiB8IFJlcXVlc3RJbml0O1xuICAvKiogQ2FsbGVkIGJ5IGdldFJlcXVlc3RJbml0IHRvIGRldGVybWluZSBIVFRQIEhlYWRlcnNcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2dldEhlYWRlcnNcbiAgICovXG4gIGdldEhlYWRlcnMoaGVhZGVyczogSGVhZGVyc0luaXQpOiBQcm9taXNlPEhlYWRlcnNJbml0PiB8IEhlYWRlcnNJbml0O1xuICAvKiBhZnRlci1mZXRjaCAqL1xuICAvKiogUGVyZm9ybXMgdGhlIGZldGNoIGNhbGxcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2ZldGNoUmVzcG9uc2VcbiAgICovXG4gIGZldGNoUmVzcG9uc2UoaW5wdXQ6IFJlcXVlc3RJbmZvLCBpbml0OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+O1xuICAvKiogVGFrZXMgdGhlIFJlc3BvbnNlIGFuZCBwYXJzZXMgdmlhIC50ZXh0KCkgb3IgLmpzb24oKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGFyc2VSZXNwb25zZVxuICAgKi9cbiAgcGFyc2VSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPGFueT47XG4gIC8qKiBQZXJmb3JtIGFueSB0cmFuc2Zvcm1zIHdpdGggdGhlIHBhcnNlZCByZXN1bHQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwcm9jZXNzXG4gICAqL1xuICBwcm9jZXNzKHZhbHVlOiBhbnksIC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rj4pOiBSZXNvbHZlVHlwZTxGPjtcblxuICAvKiB1dGlsaXRpZXMgKi9cbiAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgKGZldGNoKSBrZXkgbWF0Y2hlcyB0aGlzIGVuZHBvaW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjdGVzdEtleVxuICAgKi9cbiAgdGVzdEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgLyogZXh0ZW5kZXJzICovXG4gIC8vIFRPRE86IGZpZ3VyZSBvdXQgYmV0dGVyIHdheSB0aGFuIHdyYXBwaW5nIHdob2xlIG9wdGlvbnMgaW4gUmVhZG9ubHk8PiArIG1ha2luZyBPIGV4dGVuZCBmcm9tIHt9XG4gIC8vICAgICAgIHRoaXMgaXMganVzdCBhIGhhY2sgdG8gaGFuZGxlIHdoZW4gbm8gbWVtYmVycyBvZiBQYXJ0aWFsUmVzdEdlbmVyaWNzIGFyZSBwcmVzZW50XG4gIC8vICAgICAgIE5vdGU6IFVzaW5nIG92ZXJsb2FkaW5nIChsaWtlIHBhZ2luYXRlZCBkaWQpIHN0cnVnZ2xlcyBiZWNhdXNlIHR5cGVzY3JpcHQgZG9lcyBub3QgaGF2ZSBhIGNsZWFyIHdheSBvZiBkaXN0aW5ndWlzaGluZyBvbmVcbiAgLy8gICAgICAgc2hvdWxkIGJlIHVzZWQgZnJvbSB0aGUgb3RoZXIgKGR1ZSB0byBzYW1lIHByb2JsZW0gd2l0aCBldmVyeSBtZW1iZXIgYmVpbmcgcGFydGlhbClcbiAgLyoqIENyZWF0ZXMgYSBjaGlsZCBlbmRwb2ludCB0aGF0IGluaGVyaXRzIGZyb20gdGhpcyB3aGlsZSBvdmVycmlkaW5nIHByb3ZpZGVkIGBvcHRpb25zYC5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2V4dGVuZFxuICAgKi9cbiAgZXh0ZW5kPFxuICAgIEUgZXh0ZW5kcyBSZXN0SW5zdGFuY2VCYXNlLFxuICAgIEV4dGVuZE9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsUmVzdEdlbmVyaWNzIHwge30sXG4gID4oXG4gICAgdGhpczogRSxcbiAgICBvcHRpb25zOiBSZWFkb25seTxcbiAgICAgIFJlc3RFbmRwb2ludEV4dGVuZE9wdGlvbnM8RXh0ZW5kT3B0aW9ucywgRSwgRj4gJiBFeHRlbmRPcHRpb25zXG4gICAgPixcbiAgKTogUmVzdEV4dGVuZGVkRW5kcG9pbnQ8RXh0ZW5kT3B0aW9ucywgRT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEluc3RhbmNlPFxuICBGIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiA9IEZldGNoRnVuY3Rpb24sXG4gIFMgZXh0ZW5kcyBTY2hlbWEgfCB1bmRlZmluZWQgPSBhbnksXG4gIE0gZXh0ZW5kcyBib29sZWFuIHwgdW5kZWZpbmVkID0gYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keT86IGFueTtcbiAgICBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gICAgbWV0aG9kPzogc3RyaW5nO1xuICAgIHBhZ2luYXRpb25GaWVsZD86IHN0cmluZztcbiAgfSA9IHsgcGF0aDogc3RyaW5nIH0sXG4+IGV4dGVuZHMgUmVzdEluc3RhbmNlQmFzZTxGLCBTLCBNLCBPPiB7XG4gIC8qKiBDcmVhdGVzIGFuIEVuZHBvaW50IHRvIGFwcGVuZCB0aGUgbmV4dCBwYWdlIGV4dGVuZGluZyBhIGxpc3QgZm9yIHBhZ2luYXRpb25cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3BhZ2luYXRlZFxuICAgKi9cbiAgcGFnaW5hdGVkPFxuICAgIEUgZXh0ZW5kcyBSZXN0SW5zdGFuY2VCYXNlPEZldGNoRnVuY3Rpb24sIGFueSwgdW5kZWZpbmVkPixcbiAgICBBIGV4dGVuZHMgYW55W10sXG4gID4oXG4gICAgdGhpczogRSxcbiAgICByZW1vdmVDdXJzb3I6ICguLi5hcmdzOiBBKSA9PiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0sXG4gICk6IFBhZ2luYXRpb25FbmRwb2ludDxFLCBBPjtcbiAgcGFnaW5hdGVkPFxuICAgIEUgZXh0ZW5kcyBSZXN0SW5zdGFuY2VCYXNlPEZldGNoRnVuY3Rpb24sIGFueSwgdW5kZWZpbmVkPixcbiAgICBDIGV4dGVuZHMgc3RyaW5nLFxuICA+KFxuICAgIHRoaXM6IEUsXG4gICAgY3Vyc29yRmllbGQ6IEMsXG4gICk6IFBhZ2luYXRpb25GaWVsZEVuZHBvaW50PEUsIEM+O1xuICAvKiogQ29uY2F0aW5hdGUgdGhlIG5leHQgcGFnZSBvZiByZXN1bHRzIChHRVQpXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNnZXRQYWdlXG4gICAqL1xuICBnZXRQYWdlOiAncGFnaW5hdGlvbkZpZWxkJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIE9bJ3BhZ2luYXRpb25GaWVsZCddIGV4dGVuZHMgc3RyaW5nID9cbiAgICAgIFBhZ2luYXRpb25GaWVsZEVuZHBvaW50PFxuICAgICAgICBGICYgeyBzY2hlbWE6IFM7IHNpZGVFZmZlY3Q6IE0gfSAmIE8sXG4gICAgICAgIE9bJ3BhZ2luYXRpb25GaWVsZCddXG4gICAgICA+XG4gICAgOiB1bmRlZmluZWRcbiAgOiB1bmRlZmluZWQ7XG4gIC8qKiBDcmVhdGUgYSBuZXcgaXRlbSAoUE9TVCkgYW5kIGBwdXNoYCB0byB0aGUgZW5kXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwdXNoXG4gICAqL1xuICBwdXNoOiBBZGRFbmRwb2ludDxcbiAgICBGLFxuICAgIEV4dHJhY3RDb2xsZWN0aW9uPFM+WydwdXNoJ10sXG4gICAgRXhjbHVkZTxPLCAnYm9keScgfCAnbWV0aG9kJz4gJiB7XG4gICAgICBib2R5OlxuICAgICAgICB8IE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8+XG4gICAgICAgIHwgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8Tz5bXVxuICAgICAgICB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbiAgLyoqIENyZWF0ZSBhIG5ldyBpdGVtIChQT1NUKSBhbmQgYHVuc2hpZnRgIHRvIHRoZSBiZWdpbm5pbmdcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3Vuc2hpZnRcbiAgICovXG4gIHVuc2hpZnQ6IEFkZEVuZHBvaW50PFxuICAgIEYsXG4gICAgRXh0cmFjdENvbGxlY3Rpb248Uz5bJ3Vuc2hpZnQnXSxcbiAgICBFeGNsdWRlPE8sICdib2R5JyB8ICdtZXRob2QnPiAmIHtcbiAgICAgIGJvZHk6XG4gICAgICAgIHwgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8Tz5cbiAgICAgICAgfCBPcHRpb25zVG9BZGRlckJvZHlBcmd1bWVudDxPPltdXG4gICAgICAgIHwgRm9ybURhdGE7XG4gICAgfVxuICA+O1xuICAvKiogQ3JlYXRlIG5ldyBpdGVtKHMpIChQT1NUKSBhbmQgYE9iamVjdC5hc3NpZ25gIG1lcmdlXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNhc3NpZ25cbiAgICovXG4gIGFzc2lnbjogQWRkRW5kcG9pbnQ8XG4gICAgRixcbiAgICBFeHRyYWN0Q29sbGVjdGlvbjxTPixcbiAgICBFeGNsdWRlPE8sICdib2R5JyB8ICdtZXRob2QnPiAmIHtcbiAgICAgIGJvZHk6IFJlY29yZDxzdHJpbmcsIE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8+PiB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbiAgLyoqIFJlbW92ZSBpdGVtKHMpIChQQVRDSCkgZnJvbSBjb2xsZWN0aW9uXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNyZW1vdmVcbiAgICovXG4gIHJlbW92ZTogUmVtb3ZlRW5kcG9pbnQ8XG4gICAgRixcbiAgICBFeHRyYWN0Q29sbGVjdGlvbjxTPlsncmVtb3ZlJ10sXG4gICAgRXhjbHVkZTxPLCAnYm9keScgfCAnbWV0aG9kJz4gJiB7XG4gICAgICBib2R5OlxuICAgICAgICB8IE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8+XG4gICAgICAgIHwgT3B0aW9uc1RvQWRkZXJCb2R5QXJndW1lbnQ8Tz5bXVxuICAgICAgICB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbiAgLyoqIE1vdmUgaXRlbSBiZXR3ZWVuIGNvbGxlY3Rpb25zIChQQVRDSCkgLSByZW1vdmVzIGZyb20gb2xkLCBhZGRzIHRvIG5ld1xuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjbW92ZVxuICAgKi9cbiAgbW92ZTogTW92ZUVuZHBvaW50PFxuICAgIEYsXG4gICAgRXh0cmFjdENvbGxlY3Rpb248Uz5bJ21vdmUnXSxcbiAgICB7XG4gICAgICBwYXRoOiAnbW92ZVBhdGgnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ21vdmVQYXRoJ10gJiBzdHJpbmcgOiBPWydwYXRoJ107XG4gICAgICBib2R5OiBPcHRpb25zVG9BZGRlckJvZHlBcmd1bWVudDxPPiB8IEZvcm1EYXRhO1xuICAgIH1cbiAgPjtcbn1cblxuZXhwb3J0IHR5cGUgUmVzdEVuZHBvaW50RXh0ZW5kT3B0aW9uczxcbiAgTyBleHRlbmRzIFBhcnRpYWxSZXN0R2VuZXJpY3MsXG4gIEUgZXh0ZW5kcyB7IGJvZHk/OiBhbnk7IHBhdGg/OiBzdHJpbmc7IHNjaGVtYT86IFNjaGVtYTsgbWV0aG9kPzogc3RyaW5nIH0sXG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uLFxuPiA9IFJlc3RFbmRwb2ludE9wdGlvbnM8XG4gIE9wdGlvbnNUb0Z1bmN0aW9uPE8sIEUsIEY+LFxuICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBFeHRyYWN0PE9bJ3NjaGVtYSddLCBTY2hlbWEgfCB1bmRlZmluZWQ+XG4gIDogRVsnc2NoZW1hJ11cbj4gJlxuICBQYXJ0aWFsPFxuICAgIE9taXQ8XG4gICAgICBFLFxuICAgICAgS2V5b2ZSZXN0RW5kcG9pbnQgfCBrZXlvZiBQYXJ0aWFsUmVzdEdlbmVyaWNzIHwga2V5b2YgUmVzdEVuZHBvaW50T3B0aW9uc1xuICAgID5cbiAgPjtcblxudHlwZSBPcHRpb25zVG9SZXN0RW5kcG9pbnQ8XG4gIE8gZXh0ZW5kcyBQYXJ0aWFsUmVzdEdlbmVyaWNzLFxuICBFIGV4dGVuZHMgUmVzdEluc3RhbmNlQmFzZSAmIHsgYm9keT86IGFueTsgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nIH0sXG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uLFxuPiA9XG4gICdwYXRoJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFJlc3RUeXBlPFxuICAgICAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgICBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj5cbiAgICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgOiBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj4sXG4gICAgICBPcHRpb25zVG9Cb2R5QXJndW1lbnQ8XG4gICAgICAgICdib2R5JyBleHRlbmRzIGtleW9mIE8gPyBPIDogRSxcbiAgICAgICAgJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXVxuICAgICAgPixcbiAgICAgICdzY2hlbWEnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NjaGVtYSddIDogRVsnc2NoZW1hJ10sXG4gICAgICAnc2lkZUVmZmVjdCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgRXh0cmFjdDxPWydzaWRlRWZmZWN0J10sIGJvb2xlYW4gfCB1bmRlZmluZWQ+XG4gICAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICAgIDogRVsnc2lkZUVmZmVjdCddLFxuICAgICAgT1sncHJvY2VzcyddIGV4dGVuZHMge30gPyBSZXR1cm5UeXBlPE9bJ3Byb2Nlc3MnXT4gOiBSZXNvbHZlVHlwZTxGPixcbiAgICAgIHtcbiAgICAgICAgcGF0aDogRXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD47XG4gICAgICAgIGJvZHk6ICdib2R5JyBleHRlbmRzIGtleW9mIE8gPyBPWydib2R5J10gOiBFWydib2R5J107XG4gICAgICAgIHNlYXJjaFBhcmFtczogJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2VhcmNoUGFyYW1zJ11cbiAgICAgICAgOiBFWydzZWFyY2hQYXJhbXMnXTtcbiAgICAgICAgbWV0aG9kOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddO1xuICAgICAgICBwYWdpbmF0aW9uRmllbGQ6ICdwYWdpbmF0aW9uRmllbGQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgICAgT1sncGFnaW5hdGlvbkZpZWxkJ11cbiAgICAgICAgOiBFWydwYWdpbmF0aW9uRmllbGQnXTtcbiAgICAgIH1cbiAgICA+XG4gIDogJ2JvZHknIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgUmVzdFR5cGU8XG4gICAgICAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgICAgIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8RXhjbHVkZTxFWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgICA6IFBhdGhBcmdzPEV4Y2x1ZGU8RVsncGF0aCddLCB1bmRlZmluZWQ+PixcbiAgICAgIE9wdGlvbnNUb0JvZHlBcmd1bWVudDxcbiAgICAgICAgTyxcbiAgICAgICAgJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1snbWV0aG9kJ10gOiBFWydtZXRob2QnXVxuICAgICAgPixcbiAgICAgICdzY2hlbWEnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ3NjaGVtYSddIDogRVsnc2NoZW1hJ10sXG4gICAgICAnc2lkZUVmZmVjdCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgRXh0cmFjdDxPWydzaWRlRWZmZWN0J10sIGJvb2xlYW4gfCB1bmRlZmluZWQ+XG4gICAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICAgIDogRVsnc2lkZUVmZmVjdCddLFxuICAgICAgT1sncHJvY2VzcyddIGV4dGVuZHMge30gPyBSZXR1cm5UeXBlPE9bJ3Byb2Nlc3MnXT4gOiBSZXNvbHZlVHlwZTxGPixcbiAgICAgIHtcbiAgICAgICAgcGF0aDogRVsncGF0aCddO1xuICAgICAgICBib2R5OiBPWydib2R5J107XG4gICAgICAgIHNlYXJjaFBhcmFtczogJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2VhcmNoUGFyYW1zJ11cbiAgICAgICAgOiBFWydzZWFyY2hQYXJhbXMnXTtcbiAgICAgICAgbWV0aG9kOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddO1xuICAgICAgICBwYWdpbmF0aW9uRmllbGQ6ICdwYWdpbmF0aW9uRmllbGQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgICAgT1sncGFnaW5hdGlvbkZpZWxkJ11cbiAgICAgICAgOiBFeHRyYWN0PEVbJ3BhZ2luYXRpb25GaWVsZCddLCBzdHJpbmc+O1xuICAgICAgfVxuICAgID5cbiAgOiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFJlc3RUeXBlPFxuICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8RXhjbHVkZTxFWydwYXRoJ10sIHVuZGVmaW5lZD4+LFxuICAgICAgT3B0aW9uc1RvQm9keUFyZ3VtZW50PFxuICAgICAgICBFLFxuICAgICAgICAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddXG4gICAgICA+LFxuICAgICAgJ3NjaGVtYScgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2NoZW1hJ10gOiBFWydzY2hlbWEnXSxcbiAgICAgICdzaWRlRWZmZWN0JyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBFeHRyYWN0PE9bJ3NpZGVFZmZlY3QnXSwgYm9vbGVhbiB8IHVuZGVmaW5lZD5cbiAgICAgIDogJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gTWV0aG9kVG9TaWRlPE9bJ21ldGhvZCddPlxuICAgICAgOiBFWydzaWRlRWZmZWN0J10sXG4gICAgICBPWydwcm9jZXNzJ10gZXh0ZW5kcyB7fSA/IFJldHVyblR5cGU8T1sncHJvY2VzcyddPiA6IFJlc29sdmVUeXBlPEY+LFxuICAgICAge1xuICAgICAgICBwYXRoOiBFWydwYXRoJ107XG4gICAgICAgIGJvZHk6IEVbJ2JvZHknXTtcbiAgICAgICAgc2VhcmNoUGFyYW1zOiBPWydzZWFyY2hQYXJhbXMnXTtcbiAgICAgICAgbWV0aG9kOiAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEVbJ21ldGhvZCddO1xuICAgICAgICBwYWdpbmF0aW9uRmllbGQ6ICdwYWdpbmF0aW9uRmllbGQnIGV4dGVuZHMga2V5b2YgTyA/XG4gICAgICAgICAgT1sncGFnaW5hdGlvbkZpZWxkJ11cbiAgICAgICAgOiBFeHRyYWN0PEVbJ3BhZ2luYXRpb25GaWVsZCddLCBzdHJpbmc+O1xuICAgICAgfVxuICAgID5cbiAgOiBSZXN0SW5zdGFuY2U8XG4gICAgICBGLFxuICAgICAgJ3NjaGVtYScgZXh0ZW5kcyBrZXlvZiBPID8gT1snc2NoZW1hJ10gOiBFWydzY2hlbWEnXSxcbiAgICAgICdzaWRlRWZmZWN0JyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBFeHRyYWN0PE9bJ3NpZGVFZmZlY3QnXSwgYm9vbGVhbiB8IHVuZGVmaW5lZD5cbiAgICAgIDogJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gTWV0aG9kVG9TaWRlPE9bJ21ldGhvZCddPlxuICAgICAgOiBFWydzaWRlRWZmZWN0J10sXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICdwYXRoJyBleHRlbmRzIGtleW9mIE8gPyBFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPlxuICAgICAgICA6IEVbJ3BhdGgnXTtcbiAgICAgICAgYm9keTogJ2JvZHknIGV4dGVuZHMga2V5b2YgTyA/IE9bJ2JvZHknXSA6IEVbJ2JvZHknXTtcbiAgICAgICAgc2VhcmNoUGFyYW1zOiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gPyBPWydzZWFyY2hQYXJhbXMnXVxuICAgICAgICA6IEVbJ3NlYXJjaFBhcmFtcyddO1xuICAgICAgICBtZXRob2Q6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE9bJ21ldGhvZCddIDogRVsnbWV0aG9kJ107XG4gICAgICAgIHBhZ2luYXRpb25GaWVsZDogJ3BhZ2luYXRpb25GaWVsZCcgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgICAgICBPWydwYWdpbmF0aW9uRmllbGQnXVxuICAgICAgICA6IEVbJ3BhZ2luYXRpb25GaWVsZCddO1xuICAgICAgfVxuICAgID47XG5cbmV4cG9ydCB0eXBlIFJlc3RFeHRlbmRlZEVuZHBvaW50PFxuICBPIGV4dGVuZHMgUGFydGlhbFJlc3RHZW5lcmljcyxcbiAgRSBleHRlbmRzIFJlc3RJbnN0YW5jZUJhc2UgJiB7IGdldFBhZ2U/OiB1bmtub3duIH0sXG4+ID0gT3B0aW9uc1RvUmVzdEVuZHBvaW50PFxuICBPLFxuICBFICZcbiAgICAoRSBleHRlbmRzIHsgZ2V0UGFnZTogeyBwYWdpbmF0aW9uRmllbGQ6IHN0cmluZyB9IH0gP1xuICAgICAgeyBwYWdpbmF0aW9uRmllbGQ6IEVbJ2dldFBhZ2UnXVsncGFnaW5hdGlvbkZpZWxkJ10gfVxuICAgIDogdW5rbm93biksXG4gIFJlc3RJbnN0YW5jZTxcbiAgICAoXG4gICAgICAuLi5hcmdzOiBQYXJhbWV0ZXJzPEU+XG4gICAgKSA9PiBPWydwcm9jZXNzJ10gZXh0ZW5kcyB7fSA/IFByb21pc2U8UmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+PlxuICAgIDogUmV0dXJuVHlwZTxFPixcbiAgICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBPWydzY2hlbWEnXSA6IEVbJ3NjaGVtYSddLFxuICAgICdzaWRlRWZmZWN0JyBleHRlbmRzIGtleW9mIE8gPyBFeHRyYWN0PE9bJ3NpZGVFZmZlY3QnXSwgYm9vbGVhbiB8IHVuZGVmaW5lZD5cbiAgICA6ICdtZXRob2QnIGV4dGVuZHMga2V5b2YgTyA/IE1ldGhvZFRvU2lkZTxPWydtZXRob2QnXT5cbiAgICA6IEVbJ3NpZGVFZmZlY3QnXVxuICA+XG4+ICZcbiAgT21pdDxPLCBLZXlvZlJlc3RFbmRwb2ludD4gJlxuICBPbWl0PEUsIEtleW9mUmVzdEVuZHBvaW50IHwga2V5b2YgTz47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGlhbFJlc3RHZW5lcmljcyB7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGF0aCAqL1xuICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3NjaGVtYSAqL1xuICByZWFkb25seSBzY2hlbWE/OiBTY2hlbWEgfCB1bmRlZmluZWQ7XG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjbWV0aG9kICovXG4gIHJlYWRvbmx5IG1ldGhvZD86IHN0cmluZztcbiAgLyoqIE9ubHkgdXNlZCBmb3IgdHlwZXMgKi9cbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNib2R5ICovXG4gIGJvZHk/OiBhbnk7XG4gIC8qKiBPbmx5IHVzZWQgZm9yIHR5cGVzICovXG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjc2VhcmNoUGFyYW1zICovXG4gIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNwYWdpbmF0aW9uZmllbGQgKi9cbiAgcmVhZG9ubHkgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nO1xuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3Byb2Nlc3MgKi9cbiAgcHJvY2Vzcz8odmFsdWU6IGFueSwgLi4uYXJnczogYW55KTogYW55O1xufVxuLyoqIEdlbmVyaWMgdHlwZXMgd2hlbiBjb25zdHJ1Y3RpbmcgYSBSZXN0RW5kcG9pbnRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjaW5oZXJpdGFuY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXN0R2VuZXJpY3MgZXh0ZW5kcyBQYXJ0aWFsUmVzdEdlbmVyaWNzIHtcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uRW5kcG9pbnQ8XG4gIEUgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uICYgUmVzdEdlbmVyaWNzICYgeyBzaWRlRWZmZWN0PzogYm9vbGVhbiB8IHVuZGVmaW5lZCB9LFxuICBBIGV4dGVuZHMgYW55W10sXG4+ID0gUmVzdEluc3RhbmNlQmFzZTxcbiAgUGFyYW1GZXRjaE5vQm9keTxBWzBdLCBSZXNvbHZlVHlwZTxFPj4sXG4gIEVbJ3NjaGVtYSddLFxuICBFWydzaWRlRWZmZWN0J10sXG4gIFBpY2s8RSwgJ3BhdGgnIHwgJ3NlYXJjaFBhcmFtcycgfCAnYm9keSc+ICYge1xuICAgIHNlYXJjaFBhcmFtczogT21pdDxBWzBdLCBrZXlvZiBQYXRoQXJnczxFWydwYXRoJ10+PjtcbiAgfVxuPjtcbi8qKiBNZXJnZSBwYWdpbmF0aW9uIGZpZWxkIEMgaW50byBib2R5LCBtYWtpbmcgaXQgcmVxdWlyZWQgKi9cbnR5cGUgUGFnaW5hdGlvbkludG9Cb2R5PEJvZHksIEMgZXh0ZW5kcyBzdHJpbmc+ID0gQm9keSAmIHtcbiAgW0sgaW4gQ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG59O1xuXG4vKiogUGFnaW5hdGVkIHNlYXJjaFBhcmFtcyB0eXBlICovXG50eXBlIFBhZ2luYXRlZFNlYXJjaFBhcmFtczxcbiAgRSBleHRlbmRzIHsgc2VhcmNoUGFyYW1zPzogYW55OyBwYXRoPzogc3RyaW5nIH0sXG4gIEMgZXh0ZW5kcyBzdHJpbmcsXG4+ID0ge1xuICBbSyBpbiBDXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbn0gJiBFWydzZWFyY2hQYXJhbXMnXSAmXG4gIFBhdGhBcmdzPEV4Y2x1ZGU8RVsncGF0aCddLCB1bmRlZmluZWQ+PjtcblxuLyoqIHNlYXJjaFBhcmFtcyB2ZXJzaW9uOiBwYWdpbmF0aW9uIGluIHNlYXJjaFBhcmFtcywgb3B0aW9uYWwgYm9keSBzdXBwb3J0ICovXG50eXBlIFBhZ2luYXRpb25GaWVsZEluU2VhcmNoUGFyYW1zPFxuICBFIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiAmIFJlc3RHZW5lcmljcyAmIHsgc2lkZUVmZmVjdD86IGJvb2xlYW4gfCB1bmRlZmluZWQgfSxcbiAgQyBleHRlbmRzIHN0cmluZyxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICAvLyBVbmlvbiBhbGxvd3MgY2FsbGluZyB3aXRoIGp1c3Qgc2VhcmNoUGFyYW1zIG9yIHdpdGggc2VhcmNoUGFyYW1zICsgYm9keVxuICB8IFBhcmFtRmV0Y2hOb0JvZHk8UGFnaW5hdGVkU2VhcmNoUGFyYW1zPEUsIEM+LCBSZXNvbHZlVHlwZTxFPj5cbiAgfCBQYXJhbUZldGNoV2l0aEJvZHk8XG4gICAgICBQYWdpbmF0ZWRTZWFyY2hQYXJhbXM8RSwgQz4sXG4gICAgICBOb25OdWxsYWJsZTxFWydib2R5J10+LFxuICAgICAgUmVzb2x2ZVR5cGU8RT5cbiAgICA+LFxuICBFWydzY2hlbWEnXSxcbiAgRVsnc2lkZUVmZmVjdCddLFxuICBQaWNrPEUsICdwYXRoJyB8ICdzZWFyY2hQYXJhbXMnIHwgJ2JvZHknPiAmIHtcbiAgICBzZWFyY2hQYXJhbXM6IHtcbiAgICAgIFtLIGluIENdOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuO1xuICAgIH0gJiBFWydzZWFyY2hQYXJhbXMnXTtcbiAgfVxuPiAmIHsgcGFnaW5hdGlvbkZpZWxkOiBDIH07XG5cbi8qKiBib2R5IHZlcnNpb246IHBhZ2luYXRpb24gZmllbGQgaXMgaW4gYm9keSAoYm9keSByZXF1aXJlZCkgKi9cbnR5cGUgUGFnaW5hdGlvbkZpZWxkSW5Cb2R5PFxuICBFIGV4dGVuZHMgRmV0Y2hGdW5jdGlvbiAmIFJlc3RHZW5lcmljcyAmIHsgc2lkZUVmZmVjdD86IGJvb2xlYW4gfCB1bmRlZmluZWQgfSxcbiAgQyBleHRlbmRzIHN0cmluZyxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICBQYXJhbUZldGNoV2l0aEJvZHk8XG4gICAgRVsnc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxFeGNsdWRlPEVbJ3BhdGgnXSwgdW5kZWZpbmVkPj4sXG4gICAgUGFnaW5hdGlvbkludG9Cb2R5PEVbJ2JvZHknXSwgQz4sXG4gICAgUmVzb2x2ZVR5cGU8RT5cbiAgPixcbiAgRVsnc2NoZW1hJ10sXG4gIEVbJ3NpZGVFZmZlY3QnXSxcbiAgUGljazxFLCAncGF0aCcgfCAnc2VhcmNoUGFyYW1zJz4gJiB7XG4gICAgYm9keTogUGFnaW5hdGlvbkludG9Cb2R5PEVbJ2JvZHknXSwgQz47XG4gIH1cbj4gJiB7IHBhZ2luYXRpb25GaWVsZDogQyB9O1xuXG4vKiogUmV0cmlldmVzIHRoZSBuZXh0IHBhZ2Ugb2YgcmVzdWx0cyBieSBwYWdpbmF0aW9uIGZpZWxkICovXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uRmllbGRFbmRwb2ludDxcbiAgRSBleHRlbmRzIEZldGNoRnVuY3Rpb24gJiBSZXN0R2VuZXJpY3MgJiB7IHNpZGVFZmZlY3Q/OiBib29sZWFuIHwgdW5kZWZpbmVkIH0sXG4gIEMgZXh0ZW5kcyBzdHJpbmcsXG4+ID1cbiAgLy8gSWYgYm9keSBjYW4gYmUgdW5kZWZpbmVkIG9yIHBhZ2luYXRpb24gZmllbGQgbm90IGluIGJvZHksIHVzZSBzZWFyY2hQYXJhbXNcbiAgdW5kZWZpbmVkIGV4dGVuZHMgRVsnYm9keSddID8gUGFnaW5hdGlvbkZpZWxkSW5TZWFyY2hQYXJhbXM8RSwgQz5cbiAgOiAvLyBJZiBwYWdpbmF0aW9uIGZpZWxkIEMgaXMgYSBrZXkgb2YgYm9keSwgbWVyZ2UgaW50byBib2R5XG4gIEMgZXh0ZW5kcyBrZXlvZiBFWydib2R5J10gPyBQYWdpbmF0aW9uRmllbGRJbkJvZHk8RSwgQz5cbiAgOiAvLyBPdGhlcndpc2UgdXNlIHNlYXJjaFBhcmFtc1xuICAgIFBhZ2luYXRpb25GaWVsZEluU2VhcmNoUGFyYW1zPEUsIEM+O1xuXG5leHBvcnQgdHlwZSBBZGRFbmRwb2ludDxcbiAgRiBleHRlbmRzIEZldGNoRnVuY3Rpb24gPSBGZXRjaEZ1bmN0aW9uLFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gYW55LFxuICBPIGV4dGVuZHMge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5OiBhbnk7XG4gICAgc2VhcmNoUGFyYW1zPzogYW55O1xuICB9ID0geyBwYXRoOiBzdHJpbmc7IGJvZHk6IGFueSB9LFxuPiA9IFJlc3RJbnN0YW5jZUJhc2U8XG4gIFJlc3RGZXRjaDxcbiAgICAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgICA6IE9bJ3NlYXJjaFBhcmFtcyddICYgUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+XG4gICAgOiBQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj4sXG4gICAgT1snYm9keSddLFxuICAgIFJlc29sdmVUeXBlPEY+XG4gID4sXG4gIFMsXG4gIHRydWUsXG4gIE9taXQ8TywgJ21ldGhvZCc+ICYgeyBtZXRob2Q6ICdQT1NUJyB9XG4+O1xuZXhwb3J0IHR5cGUgUmVtb3ZlRW5kcG9pbnQ8XG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uID0gRmV0Y2hGdW5jdGlvbixcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IGFueSxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keTogYW55O1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiBhbnkgfSxcbj4gPSBSZXN0SW5zdGFuY2VCYXNlPFxuICBSZXN0RmV0Y2g8XG4gICAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICAgIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPEV4Y2x1ZGU8T1sncGF0aCddLCB1bmRlZmluZWQ+PlxuICAgIDogUGF0aEFyZ3M8RXhjbHVkZTxPWydwYXRoJ10sIHVuZGVmaW5lZD4+LFxuICAgIE9bJ2JvZHknXSxcbiAgICBSZXNvbHZlVHlwZTxGPlxuICA+LFxuICBTLFxuICB0cnVlLFxuICBPbWl0PE8sICdtZXRob2QnPiAmIHsgbWV0aG9kOiAnUEFUQ0gnIH1cbj47XG5leHBvcnQgdHlwZSBNb3ZlRW5kcG9pbnQ8XG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uID0gRmV0Y2hGdW5jdGlvbixcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IGFueSxcbiAgTyBleHRlbmRzIHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgYm9keTogYW55O1xuICB9ID0geyBwYXRoOiBzdHJpbmc7IGJvZHk6IGFueSB9LFxuPiA9IFJlc3RJbnN0YW5jZUJhc2U8XG4gIFJlc3RGZXRjaDxQYXRoQXJnczxFeGNsdWRlPE9bJ3BhdGgnXSwgdW5kZWZpbmVkPj4sIE9bJ2JvZHknXSwgUmVzb2x2ZVR5cGU8Rj4+LFxuICBTLFxuICB0cnVlLFxuICBPbWl0PE8sICdtZXRob2QnIHwgJ3NlYXJjaFBhcmFtcyc+ICYgeyBtZXRob2Q6ICdQQVRDSCcgfVxuPjtcblxudHlwZSBPcHRpb25zQm9keURlZmF1bHQ8TyBleHRlbmRzIFJlc3RHZW5lcmljcz4gPVxuICAnYm9keScgZXh0ZW5kcyBrZXlvZiBPID8gT1xuICA6IE9bJ21ldGhvZCddIGV4dGVuZHMgJ1BPU1QnIHwgJ1BVVCcgfCAnUEFUQ0gnID8gTyAmIHsgYm9keTogYW55IH1cbiAgOiBPICYgeyBib2R5OiB1bmRlZmluZWQgfTtcblxuLyoqIFdoZW4gYG1ldGhvZGAgaXMgb21pdHRlZCBmcm9tIGBPYCwgaW5mZXIgaXQgKG11c3Qgc3RheSBhbGlnbmVkIHdpdGggYE9wdGlvbnNUb0JvZHlBcmd1bWVudGApLiAqL1xudHlwZSBJbmZlclJlc3RNZXRob2RXaGVuT21pdHRlZDxPIGV4dGVuZHMgUmVzdEdlbmVyaWNzPiA9XG4gIE8gZXh0ZW5kcyB7IHNpZGVFZmZlY3Q6IHRydWUgfSA/ICdQT1NUJ1xuICA6ICdib2R5JyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFtPWydib2R5J11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgJ0dFVCdcbiAgICA6ICdQT1NUJ1xuICA6ICdHRVQnO1xuXG50eXBlIE1ldGhvZEFyZ0ZvckJvZHlJbmZlcmVuY2U8TyBleHRlbmRzIFJlc3RHZW5lcmljcz4gPVxuICAnbWV0aG9kJyBleHRlbmRzIGtleW9mIE8gPyBPWydtZXRob2QnXSA6IEluZmVyUmVzdE1ldGhvZFdoZW5PbWl0dGVkPE8+O1xuXG50eXBlIE9wdGlvbnNUb0FkZGVyQm9keUFyZ3VtZW50PE8gZXh0ZW5kcyB7IGJvZHk/OiBhbnkgfT4gPVxuICAnYm9keScgZXh0ZW5kcyBrZXlvZiBPID8gT1snYm9keSddIDogYW55O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RFbmRwb2ludE9wdGlvbnM8XG4gIEYgZXh0ZW5kcyBGZXRjaEZ1bmN0aW9uID0gRmV0Y2hGdW5jdGlvbixcbiAgUyBleHRlbmRzIFNjaGVtYSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbj4gZXh0ZW5kcyBFbmRwb2ludEV4dHJhT3B0aW9uczxGPiB7XG4gIC8qKiBQcmVwZW5kZWQgdG8gYWxsIHVybHNcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I3VybFByZWZpeFxuICAgKi9cbiAgdXJsUHJlZml4Pzogc3RyaW5nO1xuICByZXF1ZXN0SW5pdD86IFJlcXVlc3RJbml0O1xuICAvKiogQ2FsbGVkIGJ5IGdldFJlcXVlc3RJbml0IHRvIGRldGVybWluZSBIVFRQIEhlYWRlcnNcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2dldEhlYWRlcnNcbiAgICovXG4gIGdldEhlYWRlcnM/KGhlYWRlcnM6IEhlYWRlcnNJbml0KTogUHJvbWlzZTxIZWFkZXJzSW5pdD4gfCBIZWFkZXJzSW5pdDtcbiAgLyoqIFByZXBhcmVzIFJlcXVlc3RJbml0IHVzZWQgaW4gZmV0Y2guIFRoaXMgaXMgc2VudCB0byBmZXRjaFJlc3BvbnNlKClcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50I2dldFJlcXVlc3RJbml0XG4gICAqL1xuICBnZXRSZXF1ZXN0SW5pdD8oYm9keTogYW55KTogUHJvbWlzZTxSZXF1ZXN0SW5pdD4gfCBSZXF1ZXN0SW5pdDtcbiAgLyoqIFBlcmZvcm1zIHRoZSBmZXRjaCBjYWxsXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL3Jlc3QvYXBpL1Jlc3RFbmRwb2ludCNmZXRjaFJlc3BvbnNlXG4gICAqL1xuICBmZXRjaFJlc3BvbnNlPyhpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ6IFJlcXVlc3RJbml0KTogUHJvbWlzZTxhbnk+O1xuICAvKiogVGFrZXMgdGhlIFJlc3BvbnNlIGFuZCBwYXJzZXMgdmlhIC50ZXh0KCkgb3IgLmpzb24oKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9yZXN0L2FwaS9SZXN0RW5kcG9pbnQjcGFyc2VSZXNwb25zZVxuICAgKi9cbiAgcGFyc2VSZXNwb25zZT8ocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxhbnk+O1xuXG4gIHNpZGVFZmZlY3Q/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBuYW1lPzogc3RyaW5nO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgZmV0Y2g/OiBGO1xuICBrZXk/KC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rj4pOiBzdHJpbmc7XG4gIHVybD8oLi4uYXJnczogUGFyYW1ldGVyczxGPik6IHN0cmluZztcbiAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxGLCBTPjtcbn1cblxuLy8gV2hlbiBzdWJjbGFzc2luZyBSZXN0RW5kcG9pbnQgd2l0aCBgTyBleHRlbmRzIFJlc3RHZW5lcmljcyA9IGFueWAsIE8gZGVmYXVsdHNcbi8vIHRvIGBhbnlgLiBUaGUgYHVua25vd24gZXh0ZW5kcyBPID8gYW55YCBndWFyZCBjYXRjaGVzIE89YW55IGJlZm9yZSBpdCByZWFjaGVzXG4vLyBQYXRoQXJncyAoc2VlICMzNzgyKS4gU29mdFBhdGhBcmdzIGNvbGxhcHNlcyBQYXRoQXJnczxzdHJpbmc+IHRvIGB1bmtub3duYFxuLy8gd2hlbiBhIGNvbmNyZXRlIGJvZHkgaXMgcHJlc2VudCwgcHJldmVudGluZyB1bmlvbiBvdmVybG9hZHMgdGhhdCBicmVha1xuLy8gZ2V0T3B0aW1pc3RpY1Jlc3BvbnNlIGNhbGxiYWNrcy4gTWV0aG9kIGluZmVyZW5jZSB0cmVhdHMgZXhwbGljaXQgYm9keSBhcyBQT1NULlxuZXhwb3J0IHR5cGUgUmVzdEVuZHBvaW50Q29uc3RydWN0b3JPcHRpb25zPE8gZXh0ZW5kcyBSZXN0R2VuZXJpY3MgPSBhbnk+ID1cbiAgUmVzdEVuZHBvaW50T3B0aW9uczxcbiAgICBSZXN0RmV0Y2g8XG4gICAgICB1bmtub3duIGV4dGVuZHMgTyA/IGFueVxuICAgICAgOiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgICAgIFNvZnRQYXRoQXJnczxPWydwYXRoJ10+XG4gICAgICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBTb2Z0UGF0aEFyZ3M8T1sncGF0aCddPlxuICAgICAgOiBTb2Z0UGF0aEFyZ3M8T1sncGF0aCddPixcbiAgICAgIE9wdGlvbnNUb0JvZHlBcmd1bWVudDxPLCBNZXRob2RBcmdGb3JCb2R5SW5mZXJlbmNlPE8+PixcbiAgICAgIE9bJ3Byb2Nlc3MnXSBleHRlbmRzIHt9ID8gUmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+XG4gICAgICA6IGFueSAvKkRlbm9ybWFsaXplPE9bJ3NjaGVtYSddPiovXG4gICAgPixcbiAgICBPWydzY2hlbWEnXVxuICA+O1xuXG4vKiogU2ltcGxpZmllcyBlbmRwb2ludCBkZWZpbml0aW9ucyB0aGF0IGZvbGxvdyBSRVNUIHBhdHRlcm5zXG4gKlxuICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEVuZHBvaW50PFxuICBPIGV4dGVuZHMgUmVzdEdlbmVyaWNzID0gYW55LFxuPiBleHRlbmRzIFJlc3RJbnN0YW5jZTxcbiAgUmVzdEZldGNoPFxuICAgIHVua25vd24gZXh0ZW5kcyBPID8gYW55XG4gICAgOiAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgICAgW09bJ3NlYXJjaFBhcmFtcyddXSBleHRlbmRzIFt1bmRlZmluZWRdID9cbiAgICAgICAgUGF0aEFyZ3M8T1sncGF0aCddPlxuICAgICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPE9bJ3BhdGgnXT5cbiAgICA6IFBhdGhBcmdzPE9bJ3BhdGgnXT4sXG4gICAgT3B0aW9uc1RvQm9keUFyZ3VtZW50PE8sIE1ldGhvZEFyZ0ZvckJvZHlJbmZlcmVuY2U8Tz4+LFxuICAgIE9bJ3Byb2Nlc3MnXSBleHRlbmRzIHt9ID8gUmV0dXJuVHlwZTxPWydwcm9jZXNzJ10+XG4gICAgOiBhbnkgLypEZW5vcm1hbGl6ZTxPWydzY2hlbWEnXT4qL1xuICA+LFxuICAnc2NoZW1hJyBleHRlbmRzIGtleW9mIE8gPyBPWydzY2hlbWEnXSA6IHVuZGVmaW5lZCxcbiAgJ3NpZGVFZmZlY3QnIGV4dGVuZHMga2V5b2YgTyA/IEV4dHJhY3Q8T1snc2lkZUVmZmVjdCddLCBib29sZWFuIHwgdW5kZWZpbmVkPlxuICA6IE1ldGhvZFRvU2lkZTxNZXRob2RBcmdGb3JCb2R5SW5mZXJlbmNlPE8+PixcbiAgJ21ldGhvZCcgZXh0ZW5kcyBrZXlvZiBPID8gT1xuICA6IE8gJiB7XG4gICAgICBtZXRob2Q6IEluZmVyUmVzdE1ldGhvZFdoZW5PbWl0dGVkPE8+O1xuICAgIH1cbj4ge31cblxuZXhwb3J0IGludGVyZmFjZSBSZXN0RW5kcG9pbnRDb25zdHJ1Y3RvciB7XG4gIC8qKiBTaW1wbGlmaWVzIGVuZHBvaW50IGRlZmluaXRpb25zIHRoYXQgZm9sbG93IFJFU1QgcGF0dGVybnNcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vcmVzdC9hcGkvUmVzdEVuZHBvaW50XG4gICAqL1xuICBuZXcgPE8gZXh0ZW5kcyBSZXN0R2VuZXJpY3MgPSBhbnk+KHtcbiAgICBtZXRob2QsXG4gICAgc2lkZUVmZmVjdCxcbiAgICBuYW1lLFxuICAgIC4uLm9wdGlvbnNcbiAgfTogUmVzdEVuZHBvaW50Q29uc3RydWN0b3JPcHRpb25zPE8+ICYgUmVhZG9ubHk8Tz4pOiBSZXN0RW5kcG9pbnQ8Tz47XG4gIHJlYWRvbmx5IHByb3RvdHlwZTogUmVzdEluc3RhbmNlQmFzZTtcbn1cblxuZXhwb3J0IHR5cGUgTWV0aG9kVG9TaWRlPE0+ID1cbiAgTSBleHRlbmRzIHN0cmluZyA/XG4gICAgTSBleHRlbmRzICdHRVQnID9cbiAgICAgIHVuZGVmaW5lZFxuICAgIDogdHJ1ZVxuICA6IHVuZGVmaW5lZDtcblxuLyoqIFJlc3RFbmRwb2ludCB0eXBlcyBzaW1wbGlmaWVkICovXG5leHBvcnQgdHlwZSBSZXN0VHlwZTxcbiAgVXJsUGFyYW1zID0gYW55LFxuICBCb2R5ID0gYW55LFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gU2NoZW1hIHwgdW5kZWZpbmVkLFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIFIgPSBhbnksXG4gIE8gZXh0ZW5kcyB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk/OiBhbnk7XG4gICAgc2VhcmNoUGFyYW1zPzogYW55O1xuICAgIHBhZ2luYXRpb25GaWVsZD86IHN0cmluZztcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBwYWdpbmF0aW9uRmllbGQ6IHN0cmluZyB9LFxuPiA9IElmVHlwZVNjcmlwdExvb3NlTnVsbDxcbiAgUmVzdEluc3RhbmNlPFJlc3RGZXRjaDxVcmxQYXJhbXMsIEJvZHksIFI+LCBTLCBNLCBPPixcbiAgQm9keSBleHRlbmRzIHt9ID8gUmVzdFR5cGVXaXRoQm9keTxVcmxQYXJhbXMsIFMsIE0sIEJvZHksIFIsIE8+XG4gIDogUmVzdFR5cGVOb0JvZHk8VXJsUGFyYW1zLCBTLCBNLCBSLCBPPlxuPjtcblxuZXhwb3J0IHR5cGUgUmVzdFR5cGVXaXRoQm9keTxcbiAgVXJsUGFyYW1zID0gYW55LFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gU2NoZW1hIHwgdW5kZWZpbmVkLFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIEJvZHkgPSBhbnksXG4gIFIgPSBhbnkgLypEZW5vcm1hbGl6ZTxTPiovLFxuICBPIGV4dGVuZHMge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5PzogYW55O1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiBhbnkgfSxcbj4gPSBSZXN0SW5zdGFuY2U8UGFyYW1GZXRjaFdpdGhCb2R5PFVybFBhcmFtcywgQm9keSwgUj4sIFMsIE0sIE8+O1xuXG5leHBvcnQgdHlwZSBSZXN0VHlwZU5vQm9keTxcbiAgVXJsUGFyYW1zID0gYW55LFxuICBTIGV4dGVuZHMgU2NoZW1hIHwgdW5kZWZpbmVkID0gU2NoZW1hIHwgdW5kZWZpbmVkLFxuICBNIGV4dGVuZHMgYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIFIgPSBhbnkgLypEZW5vcm1hbGl6ZTxTPiovLFxuICBPIGV4dGVuZHMge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5PzogdW5kZWZpbmVkO1xuICAgIHNlYXJjaFBhcmFtcz86IGFueTtcbiAgfSA9IHsgcGF0aDogc3RyaW5nOyBib2R5OiB1bmRlZmluZWQgfSxcbj4gPSBSZXN0SW5zdGFuY2U8UGFyYW1GZXRjaE5vQm9keTxVcmxQYXJhbXMsIFI+LCBTLCBNLCBPPjtcblxuLyoqIFNpbXBsZSBwYXJhbWV0ZXJzLCBhbmQgYm9keSBmZXRjaCBmdW5jdGlvbnMgKi9cbmV4cG9ydCB0eXBlIFJlc3RGZXRjaDxcbiAgVXJsUGFyYW1zLFxuICBCb2R5ID0ge30sXG4gIFJlc29sdmUgPSBhbnksXG4+ID0gSWZUeXBlU2NyaXB0TG9vc2VOdWxsPFxuICB8IFBhcmFtRmV0Y2hOb0JvZHk8VXJsUGFyYW1zLCBSZXNvbHZlPlxuICB8IFBhcmFtRmV0Y2hXaXRoQm9keTxVcmxQYXJhbXMsIEJvZHksIFJlc29sdmU+LFxuICBCb2R5IGV4dGVuZHMge30gPyBQYXJhbUZldGNoV2l0aEJvZHk8VXJsUGFyYW1zLCBCb2R5LCBSZXNvbHZlPlxuICA6IFBhcmFtRmV0Y2hOb0JvZHk8VXJsUGFyYW1zLCBSZXNvbHZlPlxuPjtcblxuZXhwb3J0IHR5cGUgUGFyYW1GZXRjaFdpdGhCb2R5PFAsIEIgPSB7fSwgUiA9IGFueT4gPVxuICAvLyB3ZSBtdXN0IGFsd2F5cyBhbGxvdyB1bmRlZmluZWQgaW4gYSB1bmlvbiBhbmQgZ2l2ZSBpdCBhIHR5cGUgd2l0aG91dCBwYXJhbXNcbiAgUCBleHRlbmRzIHVuZGVmaW5lZCA/ICh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlLCBib2R5OiBCKSA9PiBQcm9taXNlPFI+XG4gIDogLy8gZXZlbiB3aXRoIGxvb3NlIG51bGwsIHRoaXMgd2lsbCBvbmx5IGJlIHRydWUgd2hlbiBhbGwgbWVtYmVycyBhcmUgb3B0aW9uYWxcbiAge30gZXh0ZW5kcyBQID9cbiAgICAvLyB0aGlzIHNhZmVseSBoYW5kbGVzIFBhdGhBcmdzIHdpdGggbm8gbWVtYmVycyB0aGF0IHJlc3VsdHMgaW4gYSBzaW1wbGUgYHVua25vd25gIHR5cGVcbiAgICBrZXlvZiBQIGV4dGVuZHMgbmV2ZXIgP1xuICAgICAgKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsIGJvZHk6IEIpID0+IFByb21pc2U8Uj5cbiAgICA6IHwgKCh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlLCBwYXJhbXM6IFAsIGJvZHk6IEIpID0+IFByb21pc2U8Uj4pXG4gICAgICB8ICgodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgYm9keTogQikgPT4gUHJvbWlzZTxSPilcbiAgOiAodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgcGFyYW1zOiBQLCBib2R5OiBCKSA9PiBQcm9taXNlPFI+O1xuXG5leHBvcnQgdHlwZSBQYXJhbUZldGNoTm9Cb2R5PFAsIFIgPSBhbnk+ID1cbiAgLy8gd2UgbXVzdCBhbHdheXMgYWxsb3cgdW5kZWZpbmVkIGluIGEgdW5pb24gYW5kIGdpdmUgaXQgYSB0eXBlIHdpdGhvdXQgcGFyYW1zXG4gIFAgZXh0ZW5kcyB1bmRlZmluZWQgPyAodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSkgPT4gUHJvbWlzZTxSPlxuICA6IC8vIGV2ZW4gd2l0aCBsb29zZSBudWxsLCB0aGlzIHdpbGwgb25seSBiZSB0cnVlIHdoZW4gYWxsIG1lbWJlcnMgYXJlIG9wdGlvbmFsXG4gIHt9IGV4dGVuZHMgUCA/XG4gICAgLy8gdGhpcyBzYWZlbHkgaGFuZGxlcyBQYXRoQXJncyB3aXRoIG5vIG1lbWJlcnMgdGhhdCByZXN1bHRzIGluIGEgc2ltcGxlIGB1bmtub3duYCB0eXBlXG4gICAga2V5b2YgUCBleHRlbmRzIG5ldmVyID9cbiAgICAgICh0aGlzOiBFbmRwb2ludEluc3RhbmNlSW50ZXJmYWNlKSA9PiBQcm9taXNlPFI+XG4gICAgOiB8ICgodGhpczogRW5kcG9pbnRJbnN0YW5jZUludGVyZmFjZSwgcGFyYW1zOiBQKSA9PiBQcm9taXNlPFI+KVxuICAgICAgfCAoKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UpID0+IFByb21pc2U8Uj4pXG4gIDogKHRoaXM6IEVuZHBvaW50SW5zdGFuY2VJbnRlcmZhY2UsIHBhcmFtczogUCkgPT4gUHJvbWlzZTxSPjtcblxuLy8gc2FtZSBhbGdvcml0aG0sIGJ1dCBmb3IgQXJncyAoYWthIHJlYWRvbmx5IGFueVtdKVxuZXhwb3J0IHR5cGUgUGFyYW1Ub0FyZ3M8UD4gPVxuICBQIGV4dGVuZHMgdW5kZWZpbmVkID8gW11cbiAgOiB7fSBleHRlbmRzIFAgP1xuICAgIGtleW9mIFAgZXh0ZW5kcyBuZXZlciA/XG4gICAgICBbXVxuICAgIDogW10gfCBbUF1cbiAgOiBbUF07XG5cbnR5cGUgSWZUeXBlU2NyaXB0TG9vc2VOdWxsPFksIE4+ID0gMSB8IHVuZGVmaW5lZCBleHRlbmRzIDEgPyBZIDogTjtcblxuZXhwb3J0IHR5cGUgS2V5b2ZSZXN0RW5kcG9pbnQgPSBrZXlvZiBSZXN0SW5zdGFuY2U7XG5cbmV4cG9ydCB0eXBlIEZyb21GYWxsQmFjazxLIGV4dGVuZHMga2V5b2YgRSwgTywgRT4gPVxuICBLIGV4dGVuZHMga2V5b2YgTyA/IE9bS10gOiBFW0tdO1xuXG5leHBvcnQgdHlwZSBGZXRjaE11dGF0ZTxcbiAgQSBleHRlbmRzIHJlYWRvbmx5IGFueVtdID0gW2FueSwge31dIHwgW3t9XSxcbiAgUiA9IGFueSxcbj4gPSAodGhpczogUmVzdEluc3RhbmNlLCAuLi5hcmdzOiBBKSA9PiBQcm9taXNlPFI+O1xuXG5leHBvcnQgdHlwZSBGZXRjaEdldDxBIGV4dGVuZHMgcmVhZG9ubHkgYW55W10gPSBbYW55XSwgUiA9IGFueT4gPSAoXG4gIHRoaXM6IFJlc3RJbnN0YW5jZSxcbiAgLi4uYXJnczogQVxuKSA9PiBQcm9taXNlPFI+O1xuXG5leHBvcnQgdHlwZSBEZWZhdWx0czxPLCBEPiA9IHtcbiAgW0sgaW4ga2V5b2YgTyB8IGtleW9mIERdOiBLIGV4dGVuZHMga2V5b2YgTyA/IEV4Y2x1ZGU8T1tLXSwgdW5kZWZpbmVkPlxuICA6IERbRXh0cmFjdDxLLCBrZXlvZiBEPl07XG59O1xuXG5leHBvcnQgdHlwZSBHZXRFbmRwb2ludDxcbiAgTyBleHRlbmRzIHtcbiAgICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc2NoZW1hOiBTY2hlbWE7XG4gICAgLyoqIE9ubHkgdXNlZCBmb3IgdHlwZXMgKi9cbiAgICByZWFkb25seSBzZWFyY2hQYXJhbXM/OiBhbnk7XG4gICAgcmVhZG9ubHkgcGFnaW5hdGlvbkZpZWxkPzogc3RyaW5nO1xuICB9ID0ge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBzY2hlbWE6IFNjaGVtYTtcbiAgfSxcbj4gPSBSZXN0VHlwZU5vQm9keTxcbiAgJ3NlYXJjaFBhcmFtcycgZXh0ZW5kcyBrZXlvZiBPID9cbiAgICBbT1snc2VhcmNoUGFyYW1zJ11dIGV4dGVuZHMgW3VuZGVmaW5lZF0gP1xuICAgICAgUGF0aEFyZ3M8T1sncGF0aCddPlxuICAgIDogT1snc2VhcmNoUGFyYW1zJ10gJiBQYXRoQXJnczxPWydwYXRoJ10+XG4gIDogUGF0aEFyZ3M8T1sncGF0aCddPixcbiAgT1snc2NoZW1hJ10sXG4gIHVuZGVmaW5lZCxcbiAgYW55LFxuICBPICYgeyBtZXRob2Q6ICdHRVQnIH1cbj47XG5cbmV4cG9ydCB0eXBlIE11dGF0ZUVuZHBvaW50PFxuICBPIGV4dGVuZHMge1xuICAgIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbiAgICByZWFkb25seSBzY2hlbWE6IFNjaGVtYTtcbiAgICAvKiogT25seSB1c2VkIGZvciB0eXBlcyAqL1xuICAgIHJlYWRvbmx5IHNlYXJjaFBhcmFtcz86IGFueTtcbiAgICAvKiogT25seSB1c2VkIGZvciB0eXBlcyAqL1xuICAgIHJlYWRvbmx5IGJvZHk/OiBhbnk7XG4gIH0gPSB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk6IGFueTtcbiAgICBzY2hlbWE6IFNjaGVtYTtcbiAgfSxcbj4gPSBSZXN0VHlwZVdpdGhCb2R5PFxuICAnc2VhcmNoUGFyYW1zJyBleHRlbmRzIGtleW9mIE8gP1xuICAgIFtPWydzZWFyY2hQYXJhbXMnXV0gZXh0ZW5kcyBbdW5kZWZpbmVkXSA/XG4gICAgICBQYXRoQXJnczxPWydwYXRoJ10+XG4gICAgOiBPWydzZWFyY2hQYXJhbXMnXSAmIFBhdGhBcmdzPE9bJ3BhdGgnXT5cbiAgOiBQYXRoQXJnczxPWydwYXRoJ10+LFxuICBPWydzY2hlbWEnXSxcbiAgdHJ1ZSxcbiAgT1snYm9keSddLFxuICBhbnksXG4gIE8gJiB7IGJvZHk6IGFueTsgbWV0aG9kOiAnUE9TVCcgfCAnUFVUJyB8ICdQQVRDSCcgfCAnREVMRVRFJyB9XG4+O1xuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
@@ -2,6 +2,7 @@ import { PathFunction, ParamData } from 'path-to-regexp';
2
2
  import { ShortenPath } from './pathTypes.js';
3
3
  export declare function getUrlBase(path: string): PathFunction<ParamData>;
4
4
  export declare function getUrlTokens(path: string): Set<string>;
5
+ export declare function getPathRegex(path: string): RegExp;
5
6
  export declare function isPojo(obj: unknown): obj is Record<string, any>;
6
7
  export declare function shortenPath<S extends string>(path: S): ShortenPath<S>;
7
8
  //# sourceMappingURL=RestHelpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RestHelpers.d.ts","sourceRoot":"","sources":["../src/RestHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,YAAY,EAAgB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAKhE;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAKtD;AAuBD,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAK/D;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAarE"}
1
+ {"version":3,"file":"RestHelpers.d.ts","sourceRoot":"","sources":["../src/RestHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAIZ,SAAS,EACV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAKhE;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAKtD;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;AAuBD,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAK/D;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAarE"}
@@ -1,4 +1,4 @@
1
- import { compile, parse } from 'path-to-regexp';
1
+ import { compile, parse, pathToRegexp } from 'path-to-regexp';
2
2
  const urlBaseCache = Object.create(null);
3
3
  export function getUrlBase(path) {
4
4
  if (!(path in urlBaseCache)) {
@@ -13,6 +13,13 @@ export function getUrlTokens(path) {
13
13
  }
14
14
  return urlTokensCache[path];
15
15
  }
16
+ const pathRegexCache = Object.create(null);
17
+ export function getPathRegex(path) {
18
+ if (!(path in pathRegexCache)) {
19
+ pathRegexCache[path] = pathToRegexp(path).regexp;
20
+ }
21
+ return pathRegexCache[path];
22
+ }
16
23
  function tokenMap(tokens) {
17
24
  const tokenNames = new Set();
18
25
  for (const token of tokens) {
@@ -45,4 +52,4 @@ export function shortenPath(path) {
45
52
  if (shortUrlRoot[shortUrlRoot.length - 1] === '/') shortUrlRoot = shortUrlRoot.substring(0, shortUrlRoot.length - 1);
46
53
  return shortUrlRoot;
47
54
  }
48
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21waWxlIiwicGFyc2UiLCJ1cmxCYXNlQ2FjaGUiLCJPYmplY3QiLCJjcmVhdGUiLCJnZXRVcmxCYXNlIiwicGF0aCIsInVybFRva2Vuc0NhY2hlIiwiZ2V0VXJsVG9rZW5zIiwidG9rZW5NYXAiLCJ0b2tlbnMiLCJ0b2tlbk5hbWVzIiwiU2V0IiwidG9rZW4iLCJ0eXBlIiwiYWRkIiwibmFtZSIsInByb3RvIiwicHJvdG90eXBlIiwiZ3BvIiwiZ2V0UHJvdG90eXBlT2YiLCJpc1Bvam8iLCJvYmoiLCJzaG9ydGVuUGF0aCIsImxhc3RUb2tlbkluZGV4IiwiTWF0aCIsIm1heCIsImxhc3RJbmRleE9mIiwiRXJyb3IiLCJzaG9ydFVybFJvb3QiLCJzdWJzdHJpbmciLCJsZW5ndGgiXSwic291cmNlcyI6WyIuLi9zcmMvUmVzdEhlbHBlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcGlsZSwgUGF0aEZ1bmN0aW9uLCBwYXJzZSwgVG9rZW4sIFBhcmFtRGF0YSB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcblxuaW1wb3J0IHsgU2hvcnRlblBhdGggfSBmcm9tICcuL3BhdGhUeXBlcy5qcyc7XG5cbmNvbnN0IHVybEJhc2VDYWNoZTogUmVjb3JkPHN0cmluZywgUGF0aEZ1bmN0aW9uPG9iamVjdD4+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRVcmxCYXNlKHBhdGg6IHN0cmluZyk6IFBhdGhGdW5jdGlvbjxQYXJhbURhdGE+IHtcbiAgaWYgKCEocGF0aCBpbiB1cmxCYXNlQ2FjaGUpKSB7XG4gICAgdXJsQmFzZUNhY2hlW3BhdGhdID0gY29tcGlsZShwYXRoKTtcbiAgfVxuICByZXR1cm4gdXJsQmFzZUNhY2hlW3BhdGhdO1xufVxuXG5jb25zdCB1cmxUb2tlbnNDYWNoZTogUmVjb3JkPHN0cmluZywgU2V0PHN0cmluZz4+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRVcmxUb2tlbnMocGF0aDogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICBpZiAoIShwYXRoIGluIHVybFRva2Vuc0NhY2hlKSkge1xuICAgIHVybFRva2Vuc0NhY2hlW3BhdGhdID0gdG9rZW5NYXAocGFyc2UocGF0aCkudG9rZW5zKTtcbiAgfVxuICByZXR1cm4gdXJsVG9rZW5zQ2FjaGVbcGF0aF07XG59XG5cbmZ1bmN0aW9uIHRva2VuTWFwKHRva2VuczogVG9rZW5bXSk6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgdG9rZW5OYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgY2FzZSAncGFyYW0nOlxuICAgICAgY2FzZSAnd2lsZGNhcmQnOlxuICAgICAgICB0b2tlbk5hbWVzLmFkZCh0b2tlbi5uYW1lKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdncm91cCc6XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiB0b2tlbk1hcCh0b2tlbi50b2tlbnMpKSB7XG4gICAgICAgICAgdG9rZW5OYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiB0b2tlbk5hbWVzO1xufVxuXG5jb25zdCBwcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCBncG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Bvam8ob2JqOiB1bmtub3duKTogb2JqIGlzIFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBncG8ob2JqKSA9PT0gcHJvdG87XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG9ydGVuUGF0aDxTIGV4dGVuZHMgc3RyaW5nPihwYXRoOiBTKTogU2hvcnRlblBhdGg8Uz4ge1xuICBjb25zdCBsYXN0VG9rZW5JbmRleCA9IE1hdGgubWF4KHBhdGgubGFzdEluZGV4T2YoJzonKSwgcGF0aC5sYXN0SW5kZXhPZignKicpKTtcbiAgaWYgKGxhc3RUb2tlbkluZGV4ID09PSAtMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnUmVzb3VyY2UgcGF0aCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgOnBhcmFtZXRlciBvciAqd2lsZGNhcmQnLFxuICAgICk7XG4gIGxldCBzaG9ydFVybFJvb3Q6IFNob3J0ZW5QYXRoPFM+ID0gcGF0aC5zdWJzdHJpbmcoMCwgbGFzdFRva2VuSW5kZXgpIGFzIGFueTtcbiAgaWYgKHNob3J0VXJsUm9vdFtzaG9ydFVybFJvb3QubGVuZ3RoIC0gMV0gPT09ICcvJylcbiAgICBzaG9ydFVybFJvb3QgPSBzaG9ydFVybFJvb3Quc3Vic3RyaW5nKFxuICAgICAgMCxcbiAgICAgIHNob3J0VXJsUm9vdC5sZW5ndGggLSAxLFxuICAgICkgYXMgU2hvcnRlblBhdGg8Uz47XG4gIHJldHVybiBzaG9ydFVybFJvb3Q7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQU8sRUFBZ0JDLEtBQUssUUFBMEIsZ0JBQWdCO0FBSS9FLE1BQU1DLFlBQWtELEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM5RSxPQUFPLFNBQVNDLFVBQVVBLENBQUNDLElBQVksRUFBMkI7RUFDaEUsSUFBSSxFQUFFQSxJQUFJLElBQUlKLFlBQVksQ0FBQyxFQUFFO0lBQzNCQSxZQUFZLENBQUNJLElBQUksQ0FBQyxHQUFHTixPQUFPLENBQUNNLElBQUksQ0FBQztFQUNwQztFQUNBLE9BQU9KLFlBQVksQ0FBQ0ksSUFBSSxDQUFDO0FBQzNCO0FBRUEsTUFBTUMsY0FBMkMsR0FBR0osTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ3ZFLE9BQU8sU0FBU0ksWUFBWUEsQ0FBQ0YsSUFBWSxFQUFlO0VBQ3RELElBQUksRUFBRUEsSUFBSSxJQUFJQyxjQUFjLENBQUMsRUFBRTtJQUM3QkEsY0FBYyxDQUFDRCxJQUFJLENBQUMsR0FBR0csUUFBUSxDQUFDUixLQUFLLENBQUNLLElBQUksQ0FBQyxDQUFDSSxNQUFNLENBQUM7RUFDckQ7RUFDQSxPQUFPSCxjQUFjLENBQUNELElBQUksQ0FBQztBQUM3QjtBQUVBLFNBQVNHLFFBQVFBLENBQUNDLE1BQWUsRUFBZTtFQUM5QyxNQUFNQyxVQUFVLEdBQUcsSUFBSUMsR0FBRyxDQUFTLENBQUM7RUFDcEMsS0FBSyxNQUFNQyxLQUFLLElBQUlILE1BQU0sRUFBRTtJQUMxQixRQUFRRyxLQUFLLENBQUNDLElBQUk7TUFDaEIsS0FBSyxPQUFPO01BQ1osS0FBSyxVQUFVO1FBQ2JILFVBQVUsQ0FBQ0ksR0FBRyxDQUFDRixLQUFLLENBQUNHLElBQUksQ0FBQztRQUMxQjtNQUNGLEtBQUssT0FBTztRQUNWLEtBQUssTUFBTUEsSUFBSSxJQUFJUCxRQUFRLENBQUNJLEtBQUssQ0FBQ0gsTUFBTSxDQUFDLEVBQUU7VUFDekNDLFVBQVUsQ0FBQ0ksR0FBRyxDQUFDQyxJQUFJLENBQUM7UUFDdEI7UUFDQTtJQUNKO0VBQ0Y7RUFDQSxPQUFPTCxVQUFVO0FBQ25CO0FBRUEsTUFBTU0sS0FBSyxHQUFHZCxNQUFNLENBQUNlLFNBQVM7QUFDOUIsTUFBTUMsR0FBRyxHQUFHaEIsTUFBTSxDQUFDaUIsY0FBYztBQUVqQyxPQUFPLFNBQVNDLE1BQU1BLENBQUNDLEdBQVksRUFBOEI7RUFDL0QsSUFBSUEsR0FBRyxLQUFLLElBQUksSUFBSSxPQUFPQSxHQUFHLEtBQUssUUFBUSxFQUFFO0lBQzNDLE9BQU8sS0FBSztFQUNkO0VBQ0EsT0FBT0gsR0FBRyxDQUFDRyxHQUFHLENBQUMsS0FBS0wsS0FBSztBQUMzQjtBQUVBLE9BQU8sU0FBU00sV0FBV0EsQ0FBbUJqQixJQUFPLEVBQWtCO0VBQ3JFLE1BQU1rQixjQUFjLEdBQUdDLElBQUksQ0FBQ0MsR0FBRyxDQUFDcEIsSUFBSSxDQUFDcUIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFckIsSUFBSSxDQUFDcUIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzdFLElBQUlILGNBQWMsS0FBSyxDQUFDLENBQUMsRUFDdkIsTUFBTSxJQUFJSSxLQUFLLENBQ2IsNkRBQ0YsQ0FBQztFQUNILElBQUlDLFlBQTRCLEdBQUd2QixJQUFJLENBQUN3QixTQUFTLENBQUMsQ0FBQyxFQUFFTixjQUFjLENBQVE7RUFDM0UsSUFBSUssWUFBWSxDQUFDQSxZQUFZLENBQUNFLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQy9DRixZQUFZLEdBQUdBLFlBQVksQ0FBQ0MsU0FBUyxDQUNuQyxDQUFDLEVBQ0RELFlBQVksQ0FBQ0UsTUFBTSxHQUFHLENBQ3hCLENBQW1CO0VBQ3JCLE9BQU9GLFlBQVk7QUFDckIiLCJpZ25vcmVMaXN0IjpbXX0=
55
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21waWxlIiwicGFyc2UiLCJwYXRoVG9SZWdleHAiLCJ1cmxCYXNlQ2FjaGUiLCJPYmplY3QiLCJjcmVhdGUiLCJnZXRVcmxCYXNlIiwicGF0aCIsInVybFRva2Vuc0NhY2hlIiwiZ2V0VXJsVG9rZW5zIiwidG9rZW5NYXAiLCJ0b2tlbnMiLCJwYXRoUmVnZXhDYWNoZSIsImdldFBhdGhSZWdleCIsInJlZ2V4cCIsInRva2VuTmFtZXMiLCJTZXQiLCJ0b2tlbiIsInR5cGUiLCJhZGQiLCJuYW1lIiwicHJvdG8iLCJwcm90b3R5cGUiLCJncG8iLCJnZXRQcm90b3R5cGVPZiIsImlzUG9qbyIsIm9iaiIsInNob3J0ZW5QYXRoIiwibGFzdFRva2VuSW5kZXgiLCJNYXRoIiwibWF4IiwibGFzdEluZGV4T2YiLCJFcnJvciIsInNob3J0VXJsUm9vdCIsInN1YnN0cmluZyIsImxlbmd0aCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9SZXN0SGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb21waWxlLFxuICBQYXRoRnVuY3Rpb24sXG4gIHBhcnNlLFxuICBwYXRoVG9SZWdleHAsXG4gIFRva2VuLFxuICBQYXJhbURhdGEsXG59IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcblxuaW1wb3J0IHsgU2hvcnRlblBhdGggfSBmcm9tICcuL3BhdGhUeXBlcy5qcyc7XG5cbmNvbnN0IHVybEJhc2VDYWNoZTogUmVjb3JkPHN0cmluZywgUGF0aEZ1bmN0aW9uPG9iamVjdD4+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRVcmxCYXNlKHBhdGg6IHN0cmluZyk6IFBhdGhGdW5jdGlvbjxQYXJhbURhdGE+IHtcbiAgaWYgKCEocGF0aCBpbiB1cmxCYXNlQ2FjaGUpKSB7XG4gICAgdXJsQmFzZUNhY2hlW3BhdGhdID0gY29tcGlsZShwYXRoKTtcbiAgfVxuICByZXR1cm4gdXJsQmFzZUNhY2hlW3BhdGhdO1xufVxuXG5jb25zdCB1cmxUb2tlbnNDYWNoZTogUmVjb3JkPHN0cmluZywgU2V0PHN0cmluZz4+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRVcmxUb2tlbnMocGF0aDogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICBpZiAoIShwYXRoIGluIHVybFRva2Vuc0NhY2hlKSkge1xuICAgIHVybFRva2Vuc0NhY2hlW3BhdGhdID0gdG9rZW5NYXAocGFyc2UocGF0aCkudG9rZW5zKTtcbiAgfVxuICByZXR1cm4gdXJsVG9rZW5zQ2FjaGVbcGF0aF07XG59XG5cbmNvbnN0IHBhdGhSZWdleENhY2hlOiBSZWNvcmQ8c3RyaW5nLCBSZWdFeHA+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoUmVnZXgocGF0aDogc3RyaW5nKTogUmVnRXhwIHtcbiAgaWYgKCEocGF0aCBpbiBwYXRoUmVnZXhDYWNoZSkpIHtcbiAgICBwYXRoUmVnZXhDYWNoZVtwYXRoXSA9IHBhdGhUb1JlZ2V4cChwYXRoKS5yZWdleHA7XG4gIH1cbiAgcmV0dXJuIHBhdGhSZWdleENhY2hlW3BhdGhdO1xufVxuXG5mdW5jdGlvbiB0b2tlbk1hcCh0b2tlbnM6IFRva2VuW10pOiBTZXQ8c3RyaW5nPiB7XG4gIGNvbnN0IHRva2VuTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3BhcmFtJzpcbiAgICAgIGNhc2UgJ3dpbGRjYXJkJzpcbiAgICAgICAgdG9rZW5OYW1lcy5hZGQodG9rZW4ubmFtZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgdG9rZW5NYXAodG9rZW4udG9rZW5zKSkge1xuICAgICAgICAgIHRva2VuTmFtZXMuYWRkKG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdG9rZW5OYW1lcztcbn1cblxuY29uc3QgcHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3QgZ3BvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQb2pvKG9iajogdW5rbm93bik6IG9iaiBpcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ3BvKG9iaikgPT09IHByb3RvO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvcnRlblBhdGg8UyBleHRlbmRzIHN0cmluZz4ocGF0aDogUyk6IFNob3J0ZW5QYXRoPFM+IHtcbiAgY29uc3QgbGFzdFRva2VuSW5kZXggPSBNYXRoLm1heChwYXRoLmxhc3RJbmRleE9mKCc6JyksIHBhdGgubGFzdEluZGV4T2YoJyonKSk7XG4gIGlmIChsYXN0VG9rZW5JbmRleCA9PT0gLTEpXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ1Jlc291cmNlIHBhdGggcmVxdWlyZXMgYXQgbGVhc3Qgb25lIDpwYXJhbWV0ZXIgb3IgKndpbGRjYXJkJyxcbiAgICApO1xuICBsZXQgc2hvcnRVcmxSb290OiBTaG9ydGVuUGF0aDxTPiA9IHBhdGguc3Vic3RyaW5nKDAsIGxhc3RUb2tlbkluZGV4KSBhcyBhbnk7XG4gIGlmIChzaG9ydFVybFJvb3Rbc2hvcnRVcmxSb290Lmxlbmd0aCAtIDFdID09PSAnLycpXG4gICAgc2hvcnRVcmxSb290ID0gc2hvcnRVcmxSb290LnN1YnN0cmluZyhcbiAgICAgIDAsXG4gICAgICBzaG9ydFVybFJvb3QubGVuZ3RoIC0gMSxcbiAgICApIGFzIFNob3J0ZW5QYXRoPFM+O1xuICByZXR1cm4gc2hvcnRVcmxSb290O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSxPQUFPLEVBRVBDLEtBQUssRUFDTEMs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
@@ -3,6 +3,9 @@ type KeyName<K extends string> = CleanKey<K extends `*${infer N}}` ? N : K exten
3
3
  type KeyVal<K extends string> = K extends `*${string}` ? string[] : string | number;
4
4
  /** Parameters for a given path */
5
5
  export type PathArgs<S extends string> = unknown extends S ? any : PathKeys<S> extends never ? unknown : KeysToArgs<PathKeys<S>>;
6
+ /** Like {@link PathArgs} but widened `path: string` collapses to `unknown`,
7
+ * preventing `(params, body) | (body)` union overloads in ParamFetchWithBody. */
8
+ export type SoftPathArgs<P extends string> = unknown extends P ? any : string extends P ? unknown : PathArgs<P>;
6
9
  /** Computes the union of keys for a path string */
7
10
  export type PathKeys<S extends string> = string extends S ? string : S extends `${infer A}\\${':' | '*' | '}'}${infer B}` ? PathKeys<A> | PathKeys<B> : Splits<S, ':'> | Splits<S, '*'>;
8
11
  type Splits<S extends string, M extends ':' | '*'> = S extends `${string}${M}${infer K}${M}${infer R}` ? Splits<`${M}${K}`, M> | Splits<`${M}${R}`, M> : S extends (`${string}${M}${infer K}${'/' | '\\' | '%' | '&' | '*' | ':' | '{' | ';' | ',' | '!' | '@'}${infer R}`) ? Splits<`${M}${K}`, M> | Splits<R, M> : S extends `${string}${M}${infer K}` ? M extends '*' ? `*${K}` : K : never;
@@ -1 +1 @@
1
- {"version":3,"file":"pathTypes.d.ts","sourceRoot":"","sources":["../src/pathTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pathTypes.d.ts","sourceRoot":"","sources":["../src/pathTypes.ts"],"names":[],"mappings":"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"}
package/lib/pathTypes.js CHANGED
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3BhdGhUeXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIENsZWFuS2V5PFMgZXh0ZW5kcyBzdHJpbmc+ID0gUyBleHRlbmRzIGBcIiR7aW5mZXIgS31cImAgPyBLIDogUztcblxudHlwZSBLZXlOYW1lPEsgZXh0ZW5kcyBzdHJpbmc+ID0gQ2xlYW5LZXk8XG4gIEsgZXh0ZW5kcyBgKiR7aW5mZXIgTn19YCA/IE5cbiAgOiBLIGV4dGVuZHMgYCoke2luZmVyIE59YCA/IE5cbiAgOiBLIGV4dGVuZHMgYCR7aW5mZXIgTn19YCA/IE5cbiAgOiBLXG4+O1xuXG50eXBlIEtleVZhbDxLIGV4dGVuZHMgc3RyaW5nPiA9XG4gIEsgZXh0ZW5kcyBgKiR7c3RyaW5nfWAgPyBzdHJpbmdbXSA6IHN0cmluZyB8IG51bWJlcjtcblxuLyoqIFBhcmFtZXRlcnMgZm9yIGEgZ2l2ZW4gcGF0aCAqL1xuZXhwb3J0IHR5cGUgUGF0aEFyZ3M8UyBleHRlbmRzIHN0cmluZz4gPVxuICB1bmtub3duIGV4dGVuZHMgUyA/IGFueVxuICA6IFBhdGhLZXlzPFM+IGV4dGVuZHMgbmV2ZXIgP1xuICAgIC8vIHVua25vd24gaXMgaWRlbnRpdHkgZm9yIGludGVyc2VjdGlvbiAoJyYnKVxuICAgIHVua25vd25cbiAgOiBLZXlzVG9BcmdzPFBhdGhLZXlzPFM+PjtcblxuLyoqIENvbXB1dGVzIHRoZSB1bmlvbiBvZiBrZXlzIGZvciBhIHBhdGggc3RyaW5nICovXG5leHBvcnQgdHlwZSBQYXRoS2V5czxTIGV4dGVuZHMgc3RyaW5nPiA9XG4gIHN0cmluZyBleHRlbmRzIFMgPyBzdHJpbmdcbiAgOiBTIGV4dGVuZHMgYCR7aW5mZXIgQX1cXFxcJHsnOicgfCAnKicgfCAnfSd9JHtpbmZlciBCfWAgP1xuICAgIFBhdGhLZXlzPEE+IHwgUGF0aEtleXM8Qj5cbiAgOiBTcGxpdHM8UywgJzonPiB8IFNwbGl0czxTLCAnKic+O1xuXG50eXBlIFNwbGl0czxTIGV4dGVuZHMgc3RyaW5nLCBNIGV4dGVuZHMgJzonIHwgJyonPiA9XG4gIFMgZXh0ZW5kcyBgJHtzdHJpbmd9JHtNfSR7aW5mZXIgS30ke019JHtpbmZlciBSfWAgP1xuICAgIFNwbGl0czxgJHtNfSR7S31gLCBNPiB8IFNwbGl0czxgJHtNfSR7Un1gLCBNPlxuICA6IFMgZXh0ZW5kcyAoXG4gICAgYCR7c3RyaW5nfSR7TX0ke2luZmVyIEt9JHsnLycgfCAnXFxcXCcgfCAnJScgfCAnJicgfCAnKicgfCAnOicgfCAneycgfCAnOycgfCAnLCcgfCAnIScgfCAnQCd9JHtpbmZlciBSfWBcbiAgKSA/XG4gICAgU3BsaXRzPGAke019JHtLfWAsIE0+IHwgU3BsaXRzPFIsIE0+XG4gIDogUyBleHRlbmRzIGAke3N0cmluZ30ke019JHtpbmZlciBLfWAgP1xuICAgIE0gZXh0ZW5kcyAnKicgP1xuICAgICAgYCoke0t9YFxuICAgIDogS1xuICA6IG5ldmVyO1xuXG5leHBvcnQgdHlwZSBLZXlzVG9BcmdzPEtleSBleHRlbmRzIHN0cmluZz4gPSB7XG4gIFtLIGluIEtleSBhcyBLIGV4dGVuZHMgYCR7c3RyaW5nfX1gID8gS2V5TmFtZTxLPiA6IG5ldmVyXT86IEtleVZhbDxLPjtcbn0gJiAoRXhjbHVkZTxLZXksIGAke3N0cmluZ319YD4gZXh0ZW5kcyBuZXZlciA/IHVua25vd25cbjoge1xuICAgIFtLIGluIEtleSBhcyBLIGV4dGVuZHMgYCR7c3RyaW5nfX1gID8gbmV2ZXIgOiBLZXlOYW1lPEs+XTogS2V5VmFsPEs+O1xuICB9KTtcblxuZXhwb3J0IHR5cGUgUGF0aEFyZ3NBbmRTZWFyY2g8UyBleHRlbmRzIHN0cmluZz4gPVxuICB1bmtub3duIGV4dGVuZHMgUyA/IGFueVxuICA6IEV4Y2x1ZGU8UGF0aEtleXM8Uz4sIGAke3N0cmluZ319YD4gZXh0ZW5kcyBuZXZlciA/XG4gICAgUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbj4gfCB1bmRlZmluZWRcbiAgOiB7XG4gICAgICBbSyBpbiBQYXRoS2V5czxTPiBhcyBLIGV4dGVuZHMgYCR7c3RyaW5nfX1gID8gbmV2ZXJcbiAgICAgIDogS2V5TmFtZTxLPl06IEtleVZhbDxLPjtcbiAgICB9ICYgUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nIHwgc3RyaW5nW10+O1xuXG4vKiogUmVtb3ZlcyB0aGUgbGFzdCA6cGFyYW0gb3IgKndpbGRjYXJkIHRva2VuICovXG5leHBvcnQgdHlwZSBTaG9ydGVuUGF0aDxTIGV4dGVuZHMgc3RyaW5nPiA9XG4gIHN0cmluZyBleHRlbmRzIFMgPyBzdHJpbmdcbiAgOiBTIGV4dGVuZHMgYCR7aW5mZXIgQn06JHtpbmZlciBSfWAgPyBUcmltVG9rZW48YCR7Qn06JHtTaG9ydGVuUGF0aDxSPn1gPlxuICA6IFMgZXh0ZW5kcyBgJHtpbmZlciBCfSoke2luZmVyIFJ9YCA/IFRyaW1Ub2tlbjxgJHtCfSoke1Nob3J0ZW5QYXRoPFI+fWA+XG4gIDogJyc7XG5cbnR5cGUgVHJpbVRva2VuPFMgZXh0ZW5kcyBzdHJpbmc+ID1cbiAgc3RyaW5nIGV4dGVuZHMgUyA/IHN0cmluZ1xuICA6IFMgZXh0ZW5kcyBgJHtpbmZlciBSfTpgID8gUlxuICA6IFMgZXh0ZW5kcyBgJHtpbmZlciBSfSpgID8gUlxuICA6IFM7XG5cbmV4cG9ydCB0eXBlIFJlc291cmNlUGF0aCA9IHN0cmluZzsgLy8gYCR7c3RyaW5nfToke3N0cmluZ31gOyBUT0RPOiBNYXliZSBkbyB0aGlzIGluIHRoZSBmdXR1cmU/IFNlZW1zIHRvIGhhcmQgdG8gdW5kZXJzdGFuZCBmb3Igbm93XG4iXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3BhdGhUeXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIENsZWFuS2V5PFMgZXh0ZW5kcyBzdHJpbmc+ID0gUyBleHRlbmRzIGBcIiR7aW5mZXIgS31cImAgPyBLIDogUztcblxudHlwZSBLZXlOYW1lPEsgZXh0ZW5kcyBzdHJpbmc+ID0gQ2xlYW5LZXk8XG4gIEsgZXh0ZW5kcyBgKiR7aW5mZXIgTn19YCA/IE5cbiAgOiBLIGV4dGVuZHMgYCoke2luZmVyIE59YCA/IE5cbiAgOiBLIGV4dGVuZHMgYCR7aW5mZXIgTn19YCA/IE5cbiAgOiBLXG4+O1xuXG50eXBlIEtleVZhbDxLIGV4dGVuZHMgc3RyaW5nPiA9XG4gIEsgZXh0ZW5kcyBgKiR7c3RyaW5nfWAgPyBzdHJpbmdbXSA6IHN0cmluZyB8IG51bWJlcjtcblxuLyoqIFBhcmFtZXRlcnMgZm9yIGEgZ2l2ZW4gcGF0aCAqL1xuZXhwb3J0IHR5cGUgUGF0aEFyZ3M8UyBleHRlbmRzIHN0cmluZz4gPVxuICB1bmtub3duIGV4dGVuZHMgUyA/IGFueVxuICA6IFBhdGhLZXlzPFM+IGV4dGVuZHMgbmV2ZXIgP1xuICAgIC8vIHVua25vd24gaXMgaWRlbnRpdHkgZm9yIGludGVyc2VjdGlvbiAoJyYnKVxuICAgIHVua25vd25cbiAgOiBLZXlzVG9BcmdzPFBhdGhLZXlzPFM+PjtcblxuLyoqIExpa2Uge0BsaW5rIFBhdGhBcmdzfSBidXQgd2lkZW5lZCBgcGF0aDogc3RyaW5nYCBjb2xsYXBzZXMgdG8gYHVua25vd25gLFxuICogIHByZXZlbnRpbmcgYChwYXJhbXMsIGJvZHkpIHwgKGJvZHkpYCB1bmlvbiBvdmVybG9hZHMgaW4gUGFyYW1GZXRjaFdpdGhCb2R5LiAqL1xuZXhwb3J0IHR5cGUgU29mdFBhdGhBcmdzPFAgZXh0ZW5kcyBzdHJpbmc+ID1cbiAgdW5rbm93biBleHRlbmRzIFAgPyBhbnlcbiAgOiBzdHJpbmcgZXh0ZW5kcyBQID8gdW5rbm93blxuICA6IFBhdGhBcmdzPFA+O1xuXG4vKiogQ29tcHV0ZXMgdGhlIHVuaW9uIG9mIGtleXMgZm9yIGEgcGF0aCBzdHJpbmcgKi9cbmV4cG9ydCB0eXBlIFBhdGhLZXlzPFMgZXh0ZW5kcyBzdHJpbmc+ID1cbiAgc3RyaW5nIGV4dGVuZHMgUyA/IHN0cmluZ1xuICA6IFMgZXh0ZW5kcyBgJHtpbmZlciBBfVxcXFwkeyc6JyB8ICcqJyB8ICd9J30ke2luZmVyIEJ9YCA/XG4gICAgUGF0aEtleXM8QT4gfCBQYXRoS2V5czxCPlxuICA6IFNwbGl0czxTLCAnOic+IHwgU3BsaXRzPFMsICcqJz47XG5cbnR5cGUgU3BsaXRzPFMgZXh0ZW5kcyBzdHJpbmcsIE0gZXh0ZW5kcyAnOicgfCAnKic+ID1cbiAgUyBleHRlbmRzIGAke3N0cmluZ30ke019JHtpbmZlciBLfSR7TX0ke2luZmVyIFJ9YCA/XG4gICAgU3BsaXRzPGAke019JHtLfWAsIE0+IHwgU3BsaXRzPGAke019JHtSfWAsIE0+XG4gIDogUyBleHRlbmRzIChcbiAgICBgJHtzdHJpbmd9JHtNfSR7aW5mZXIgS30keycvJyB8ICdcXFxcJyB8ICclJyB8ICcmJyB8ICcqJyB8ICc6JyB8ICd7JyB8ICc7JyB8ICcsJyB8ICchJyB8ICdAJ30ke2luZmVyIFJ9YFxuICApID9cbiAgICBTcGxpdHM8YCR7TX0ke0t9YCwgTT4gfCBTcGxpdHM8UiwgTT5cbiAgOiBTIGV4dGVuZHMgYCR7c3RyaW5nfSR7TX0ke2luZmVyIEt9YCA/XG4gICAgTSBleHRlbmRzICcqJyA/XG4gICAgICBgKiR7S31gXG4gICAgOiBLXG4gIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIEtleXNUb0FyZ3M8S2V5IGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgW0sgaW4gS2V5IGFzIEsgZXh0ZW5kcyBgJHtzdHJpbmd9fWAgPyBLZXlOYW1lPEs+IDogbmV2ZXJdPzogS2V5VmFsPEs+O1xufSAmIChFeGNsdWRlPEtleSwgYCR7c3RyaW5nfX1gPiBleHRlbmRzIG5ldmVyID8gdW5rbm93blxuOiB7XG4gICAgW0sgaW4gS2V5IGFzIEsgZXh0ZW5kcyBgJHtzdHJpbmd9fWAgPyBuZXZlciA6IEtleU5hbWU8Sz5dOiBLZXlWYWw8Sz47XG4gIH0pO1xuXG5leHBvcnQgdHlwZSBQYXRoQXJnc0FuZFNlYXJjaDxTIGV4dGVuZHMgc3RyaW5nPiA9XG4gIHVua25vd24gZXh0ZW5kcyBTID8gYW55XG4gIDogRXhjbHVkZTxQYXRoS2V5czxTPiwgYCR7c3RyaW5nfX1gPiBleHRlbmRzIG5ldmVyID9cbiAgICBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuPiB8IHVuZGVmaW5lZFxuICA6IHtcbiAgICAgIFtLIGluIFBhdGhLZXlzPFM+IGFzIEsgZXh0ZW5kcyBgJHtzdHJpbmd9fWAgPyBuZXZlclxuICAgICAgOiBLZXlOYW1lPEs+XTogS2V5VmFsPEs+O1xuICAgIH0gJiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmcgfCBzdHJpbmdbXT47XG5cbi8qKiBSZW1vdmVzIHRoZSBsYXN0IDpwYXJhbSBvciAqd2lsZGNhcmQgdG9rZW4gKi9cbmV4cG9ydCB0eXBlIFNob3J0ZW5QYXRoPFMgZXh0ZW5kcyBzdHJpbmc+ID1cbiAgc3RyaW5nIGV4dGVuZHMgUyA/IHN0cmluZ1xuICA6IFMgZXh0ZW5kcyBgJHtpbmZlciBCfToke2luZmVyIFJ9YCA/IFRyaW1Ub2tlbjxgJHtCfToke1Nob3J0ZW5QYXRoPFI+fWA+XG4gIDogUyBleHRlbmRzIGAke2luZmVyIEJ9KiR7aW5mZXIgUn1gID8gVHJpbVRva2VuPGAke0J9KiR7U2hvcnRlblBhdGg8Uj59YD5cbiAgOiAnJztcblxudHlwZSBUcmltVG9rZW48UyBleHRlbmRzIHN0cmluZz4gPVxuICBzdHJpbmcgZXh0ZW5kcyBTID8gc3RyaW5nXG4gIDogUyBleHRlbmRzIGAke2luZmVyIFJ9OmAgPyBSXG4gIDogUyBleHRlbmRzIGAke2luZmVyIFJ9KmAgPyBSXG4gIDogUztcblxuZXhwb3J0IHR5cGUgUmVzb3VyY2VQYXRoID0gc3RyaW5nOyAvLyBgJHtzdHJpbmd9OiR7c3RyaW5nfWA7IFRPRE86IE1heWJlIGRvIHRoaXMgaW4gdGhlIGZ1dHVyZT8gU2VlbXMgdG8gaGFyZCB0byB1bmRlcnN0YW5kIGZvciBub3dcbiJdLCJtYXBwaW5ncyI6IiIsImlnbm9yZUxpc3QiOltdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@data-client/rest",
3
- "version": "0.16.1",
3
+ "version": "0.16.3",
4
4
  "description": "Quickly define typed REST resources and endpoints",
5
5
  "homepage": "https://dataclient.io/rest",
6
6
  "repository": {
@@ -135,7 +135,7 @@
135
135
  "license": "Apache-2.0",
136
136
  "dependencies": {
137
137
  "@babel/runtime": "^7.20.0",
138
- "@data-client/endpoint": "^0.16.0",
138
+ "@data-client/endpoint": "^0.16.3",
139
139
  "path-to-regexp": "^8.1.0"
140
140
  },
141
141
  "devDependencies": {
@@ -1,12 +1,16 @@
1
1
  import { Endpoint } from '@data-client/endpoint';
2
- import { pathToRegexp } from 'path-to-regexp';
3
2
 
4
3
  import extractCollection from './extractCollection.js';
5
4
  import mapCollection from './mapCollection.js';
6
5
  import NetworkError from './NetworkError.js';
7
6
  import { createPaginationSchema } from './paginatedCollections.js';
8
7
  import paramsToString from './paramsToString.js';
9
- import { getUrlBase, getUrlTokens, isPojo } from './RestHelpers.js';
8
+ import {
9
+ getUrlBase,
10
+ getUrlTokens,
11
+ getPathRegex,
12
+ isPojo,
13
+ } from './RestHelpers.js';
10
14
 
11
15
  /** Simplifies endpoint definitions that follow REST patterns
12
16
  *
@@ -196,7 +200,7 @@ Response (first 300 characters): ${text.substring(0, 300)}`;
196
200
  }
197
201
 
198
202
  get pathRegex() {
199
- return pathToRegexp(this.path).regexp;
203
+ return getPathRegex(this.path);
200
204
  }
201
205
 
202
206
  testKey(key) {
@@ -11,7 +11,7 @@ import {
11
11
  OptionsToBodyArgument,
12
12
  OptionsToFunction,
13
13
  } from './OptionsToFunction.js';
14
- import { PathArgs } from './pathTypes.js';
14
+ import { PathArgs, SoftPathArgs } from './pathTypes.js';
15
15
  import { EndpointUpdateFunction } from './RestEndpointTypeHelp.js';
16
16
 
17
17
  export interface RestInstanceBase<
@@ -520,6 +520,18 @@ type OptionsBodyDefault<O extends RestGenerics> =
520
520
  : O['method'] extends 'POST' | 'PUT' | 'PATCH' ? O & { body: any }
521
521
  : O & { body: undefined };
522
522
 
523
+ /** When `method` is omitted from `O`, infer it (must stay aligned with `OptionsToBodyArgument`). */
524
+ type InferRestMethodWhenOmitted<O extends RestGenerics> =
525
+ O extends { sideEffect: true } ? 'POST'
526
+ : 'body' extends keyof O ?
527
+ [O['body']] extends [undefined] ?
528
+ 'GET'
529
+ : 'POST'
530
+ : 'GET';
531
+
532
+ type MethodArgForBodyInference<O extends RestGenerics> =
533
+ 'method' extends keyof O ? O['method'] : InferRestMethodWhenOmitted<O>;
534
+
523
535
  type OptionsToAdderBodyArgument<O extends { body?: any }> =
524
536
  'body' extends keyof O ? O['body'] : any;
525
537
 
@@ -558,20 +570,21 @@ export interface RestEndpointOptions<
558
570
  update?: EndpointUpdateFunction<F, S>;
559
571
  }
560
572
 
573
+ // When subclassing RestEndpoint with `O extends RestGenerics = any`, O defaults
574
+ // to `any`. The `unknown extends O ? any` guard catches O=any before it reaches
575
+ // PathArgs (see #3782). SoftPathArgs collapses PathArgs<string> to `unknown`
576
+ // when a concrete body is present, preventing union overloads that break
577
+ // getOptimisticResponse callbacks. Method inference treats explicit body as POST.
561
578
  export type RestEndpointConstructorOptions<O extends RestGenerics = any> =
562
579
  RestEndpointOptions<
563
580
  RestFetch<
564
- 'searchParams' extends keyof O ?
581
+ unknown extends O ? any
582
+ : 'searchParams' extends keyof O ?
565
583
  [O['searchParams']] extends [undefined] ?
566
- PathArgs<O['path']>
567
- : O['searchParams'] & PathArgs<O['path']>
568
- : PathArgs<O['path']>,
569
- OptionsToBodyArgument<
570
- O,
571
- 'method' extends keyof O ? O['method']
572
- : O extends { sideEffect: true } ? 'POST'
573
- : 'GET'
574
- >,
584
+ SoftPathArgs<O['path']>
585
+ : O['searchParams'] & SoftPathArgs<O['path']>
586
+ : SoftPathArgs<O['path']>,
587
+ OptionsToBodyArgument<O, MethodArgForBodyInference<O>>,
575
588
  O['process'] extends {} ? ReturnType<O['process']>
576
589
  : any /*Denormalize<O['schema']>*/
577
590
  >,
@@ -586,26 +599,22 @@ export interface RestEndpoint<
586
599
  O extends RestGenerics = any,
587
600
  > extends RestInstance<
588
601
  RestFetch<
589
- 'searchParams' extends keyof O ?
602
+ unknown extends O ? any
603
+ : 'searchParams' extends keyof O ?
590
604
  [O['searchParams']] extends [undefined] ?
591
605
  PathArgs<O['path']>
592
606
  : O['searchParams'] & PathArgs<O['path']>
593
607
  : PathArgs<O['path']>,
594
- OptionsToBodyArgument<
595
- O,
596
- 'method' extends keyof O ? O['method']
597
- : O extends { sideEffect: true } ? 'POST'
598
- : 'GET'
599
- >,
608
+ OptionsToBodyArgument<O, MethodArgForBodyInference<O>>,
600
609
  O['process'] extends {} ? ReturnType<O['process']>
601
610
  : any /*Denormalize<O['schema']>*/
602
611
  >,
603
612
  'schema' extends keyof O ? O['schema'] : undefined,
604
613
  'sideEffect' extends keyof O ? Extract<O['sideEffect'], boolean | undefined>
605
- : MethodToSide<O['method']>,
614
+ : MethodToSide<MethodArgForBodyInference<O>>,
606
615
  'method' extends keyof O ? O
607
616
  : O & {
608
- method: O extends { sideEffect: true } ? 'POST' : 'GET';
617
+ method: InferRestMethodWhenOmitted<O>;
609
618
  }
610
619
  > {}
611
620
 
@@ -1,4 +1,11 @@
1
- import { compile, PathFunction, parse, Token, ParamData } from 'path-to-regexp';
1
+ import {
2
+ compile,
3
+ PathFunction,
4
+ parse,
5
+ pathToRegexp,
6
+ Token,
7
+ ParamData,
8
+ } from 'path-to-regexp';
2
9
 
3
10
  import { ShortenPath } from './pathTypes.js';
4
11
 
@@ -18,6 +25,14 @@ export function getUrlTokens(path: string): Set<string> {
18
25
  return urlTokensCache[path];
19
26
  }
20
27
 
28
+ const pathRegexCache: Record<string, RegExp> = Object.create(null);
29
+ export function getPathRegex(path: string): RegExp {
30
+ if (!(path in pathRegexCache)) {
31
+ pathRegexCache[path] = pathToRegexp(path).regexp;
32
+ }
33
+ return pathRegexCache[path];
34
+ }
35
+
21
36
  function tokenMap(tokens: Token[]): Set<string> {
22
37
  const tokenNames = new Set<string>();
23
38
  for (const token of tokens) {
@@ -313,6 +313,20 @@ describe('RestEndpoint', () => {
313
313
  () => ep.url({ id: '5', rest: 'docs/file' });
314
314
  });
315
315
 
316
+ it('should handle escaped special characters in path', () => {
317
+ const ep = new RestEndpoint({
318
+ path: '/users/:login/events/public\\?per_page=50',
319
+ });
320
+ expect(ep.url({ login: 'alice' })).toBe(
321
+ '/users/alice/events/public?per_page=50',
322
+ );
323
+
324
+ const ep2 = new RestEndpoint({
325
+ path: '/search\\?q=hello\\&page=2',
326
+ });
327
+ expect(ep2.url()).toBe('/search?q=hello&page=2');
328
+ });
329
+
316
330
  it('should allow sideEffect overrides', () => {
317
331
  const weirdGetUser = new RestEndpoint({
318
332
  path: 'http\\://test.com/user/:id',
package/src/pathTypes.ts CHANGED
@@ -18,6 +18,13 @@ export type PathArgs<S extends string> =
18
18
  unknown
19
19
  : KeysToArgs<PathKeys<S>>;
20
20
 
21
+ /** Like {@link PathArgs} but widened `path: string` collapses to `unknown`,
22
+ * preventing `(params, body) | (body)` union overloads in ParamFetchWithBody. */
23
+ export type SoftPathArgs<P extends string> =
24
+ unknown extends P ? any
25
+ : string extends P ? unknown
26
+ : PathArgs<P>;
27
+
21
28
  /** Computes the union of keys for a path string */
22
29
  export type PathKeys<S extends string> =
23
30
  string extends S ? string
@@ -1,7 +1,7 @@
1
1
  import type { EndpointExtraOptions, EndpointInstanceInterface, Schema, FetchFunction, ResolveType } from '@data-client/endpoint';
2
2
  import type { ExtractCollection } from './extractCollection.js';
3
3
  import { OptionsToBodyArgument, OptionsToFunction } from './OptionsToFunction.js';
4
- import { PathArgs } from './pathTypes.js';
4
+ import { PathArgs, SoftPathArgs } from './pathTypes.js';
5
5
  import { EndpointUpdateFunction } from './RestEndpointTypeHelp.js';
6
6
  export interface RestInstanceBase<F extends FetchFunction = FetchFunction, S extends Schema | undefined = any, M extends boolean | undefined = boolean | undefined, O extends {
7
7
  path: string;
@@ -280,6 +280,15 @@ export type MoveEndpoint<F extends FetchFunction = FetchFunction, S extends Sche
280
280
  }> = RestInstanceBase<RestFetch<PathArgs<Exclude<O['path'], undefined>>, O['body'], ResolveType<F>>, S, true, Omit<O, 'method' | 'searchParams'> & {
281
281
  method: 'PATCH';
282
282
  }>;
283
+ /** When `method` is omitted from `O`, infer it (must stay aligned with `OptionsToBodyArgument`). */
284
+ type InferRestMethodWhenOmitted<O extends RestGenerics> = O extends {
285
+ sideEffect: true;
286
+ } ? 'POST' : 'body' extends keyof O ? [
287
+ O['body']
288
+ ] extends [
289
+ undefined
290
+ ] ? 'GET' : 'POST' : 'GET';
291
+ type MethodArgForBodyInference<O extends RestGenerics> = 'method' extends keyof O ? O['method'] : InferRestMethodWhenOmitted<O>;
283
292
  type OptionsToAdderBodyArgument<O extends {
284
293
  body?: any;
285
294
  }> = 'body' extends keyof O ? O['body'] : any;
@@ -313,27 +322,21 @@ export interface RestEndpointOptions<F extends FetchFunction = FetchFunction, S
313
322
  url?(...args: Parameters<F>): string;
314
323
  update?: EndpointUpdateFunction<F, S>;
315
324
  }
316
- export type RestEndpointConstructorOptions<O extends RestGenerics = any> = RestEndpointOptions<RestFetch<'searchParams' extends keyof O ? [
325
+ export type RestEndpointConstructorOptions<O extends RestGenerics = any> = RestEndpointOptions<RestFetch<unknown extends O ? any : 'searchParams' extends keyof O ? [
317
326
  O['searchParams']
318
327
  ] extends [
319
328
  undefined
320
- ] ? PathArgs<O['path']> : O['searchParams'] & PathArgs<O['path']> : PathArgs<O['path']>, OptionsToBodyArgument<O, 'method' extends keyof O ? O['method'] : O extends {
321
- sideEffect: true;
322
- } ? 'POST' : 'GET'>, O['process'] extends {} ? ReturnType<O['process']> : any>, O['schema']>;
329
+ ] ? SoftPathArgs<O['path']> : O['searchParams'] & SoftPathArgs<O['path']> : SoftPathArgs<O['path']>, OptionsToBodyArgument<O, MethodArgForBodyInference<O>>, O['process'] extends {} ? ReturnType<O['process']> : any>, O['schema']>;
323
330
  /** Simplifies endpoint definitions that follow REST patterns
324
331
  *
325
332
  * @see https://dataclient.io/rest/api/RestEndpoint
326
333
  */
327
- export interface RestEndpoint<O extends RestGenerics = any> extends RestInstance<RestFetch<'searchParams' extends keyof O ? [
334
+ export interface RestEndpoint<O extends RestGenerics = any> extends RestInstance<RestFetch<unknown extends O ? any : 'searchParams' extends keyof O ? [
328
335
  O['searchParams']
329
336
  ] extends [
330
337
  undefined
331
- ] ? PathArgs<O['path']> : O['searchParams'] & PathArgs<O['path']> : PathArgs<O['path']>, OptionsToBodyArgument<O, 'method' extends keyof O ? O['method'] : O extends {
332
- sideEffect: true;
333
- } ? 'POST' : 'GET'>, O['process'] extends {} ? ReturnType<O['process']> : any>, 'schema' extends keyof O ? O['schema'] : undefined, 'sideEffect' extends keyof O ? Extract<O['sideEffect'], boolean | undefined> : MethodToSide<O['method']>, 'method' extends keyof O ? O : O & {
334
- method: O extends {
335
- sideEffect: true;
336
- } ? 'POST' : 'GET';
338
+ ] ? PathArgs<O['path']> : O['searchParams'] & PathArgs<O['path']> : PathArgs<O['path']>, OptionsToBodyArgument<O, MethodArgForBodyInference<O>>, O['process'] extends {} ? ReturnType<O['process']> : any>, 'schema' extends keyof O ? O['schema'] : undefined, 'sideEffect' extends keyof O ? Extract<O['sideEffect'], boolean | undefined> : MethodToSide<MethodArgForBodyInference<O>>, 'method' extends keyof O ? O : O & {
339
+ method: InferRestMethodWhenOmitted<O>;
337
340
  }> {
338
341
  }
339
342
  export interface RestEndpointConstructor {
@@ -2,6 +2,7 @@ import { PathFunction, ParamData } from 'path-to-regexp';
2
2
  import { ShortenPath } from './pathTypes.js';
3
3
  export declare function getUrlBase(path: string): PathFunction<ParamData>;
4
4
  export declare function getUrlTokens(path: string): Set<string>;
5
+ export declare function getPathRegex(path: string): RegExp;
5
6
  export declare function isPojo(obj: unknown): obj is Record<string, any>;
6
7
  export declare function shortenPath<S extends string>(path: S): ShortenPath<S>;
7
8
  //# sourceMappingURL=RestHelpers.d.ts.map
@@ -6,6 +6,12 @@ export declare type PathArgs<S extends string> = PathKeys<S> extends never
6
6
  ? unknown
7
7
  : KeysToArgs<PathKeys<S>>;
8
8
 
9
+ /** Like PathArgs but widened `path: string` collapses to `unknown` */
10
+ export declare type SoftPathArgs<P extends string> =
11
+ unknown extends P ? any
12
+ : string extends P ? unknown
13
+ : PathArgs<P>;
14
+
9
15
  export declare type KeysToArgs<Key extends string> = {
10
16
  [K in Key]?: string | number;
11
17
  };