@pipeline-builder/api-core 3.4.81 → 3.4.83

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.
@@ -30,6 +30,9 @@ function createFailOpenResult() {
30
30
  remaining: -1,
31
31
  resetAt: new Date().toISOString(),
32
32
  unlimited: true,
33
+ // Tag the sentinel so fail-closed callers can tell an outage apart from a
34
+ // real unlimited (-1) reading. Real quota results never set this.
35
+ failOpen: true,
33
36
  };
34
37
  }
35
38
  /**
@@ -242,4 +245,4 @@ export function reserveQuota(quotaService, orgId, quotaType, authHeader, amount
242
245
  export function decrementQuota(quotaService, orgId, quotaType, authHeader, logWarn, amount = 1, resetAtSnapshot) {
243
246
  quotaService.decrement(orgId, quotaType, authHeader, amount, resetAtSnapshot).catch((err) => logWarn('Quota rollback failed', { error: err instanceof Error ? err.message : String(err) }));
244
247
  }
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvcXVvdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFFekUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQWtCLE1BQU0seUJBQXlCLENBQUM7QUFDcEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCx5RUFBeUU7QUFDekUsTUFBTSxxQkFBcUIsR0FBK0Q7SUFDeEYsbUJBQW1CLEVBQUUsQ0FBQztJQUN0QixVQUFVLEVBQUUsQ0FBQztDQUNkLENBQUM7QUFFRixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFckMsMkVBQTJFO0FBQzNFLGlGQUFpRjtBQUNqRiw0RUFBNEU7QUFDNUUsNkVBQTZFO0FBQzdFLHNFQUFzRTtBQUN0RSw2RUFBNkU7QUFDN0UsaUZBQWlGO0FBQ2pGLDJCQUEyQjtBQUMzQixNQUFNLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEtBQUssTUFBTSxDQUFDO0FBdUUvRTs7R0FFRztBQUNILFNBQVMsb0JBQW9CO0lBQzNCLE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBSTtRQUNiLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDVCxJQUFJLEVBQUUsQ0FBQztRQUNQLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDYixPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7UUFDakMsU0FBUyxFQUFFLElBQUk7S0FDaEIsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLEtBQWEsRUFBRSxVQUFtQixFQUFFLFNB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RSxLQUFLLEVBQUUsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FDOUYsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFFLFlBQTBCLEVBQ3RELEtBQWEsRUFDYixTQUFvQixFQUNwQixVQUFrQixFQUNsQixTQUFpQixDQUFDLEVBQ2xCLFNBQWtCO0lBRWxCLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFFLFlBQTBCLEVBQ3hELEtBQWEsRUFDYixTQUFvQixFQUNwQixVQUFrQixFQUNsQixPQUFrRCxFQUNsRCxTQUFpQixDQUFDLEVBQ2xCLGVBQXdCO0lBRXhCLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVksRUFBRSxFQUFFLENBQ25HLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUM3RixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVTYWZlQ2xpZW50LCB0eXBlIFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi9odHRwLWNsaWVudC5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1b3RhVHlwZSwgUXVvdGFDaGVja1Jlc3VsdCwgU2VydmljZUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBERUZBVUxUX1RJRVIsIGlzVmFsaWRUaWVyLCB0eXBlIFF1b3RhVGllciB9IGZyb20gJy4uL3R5cGVzL3F1b3RhLXRpZXJzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcblxuLyoqIFJldHJ5IG9wdGlvbnMgZm9yIHF1b3RhIGNhbGxzICBmYWlsIGZhc3Qgc2luY2UgcXVvdGEgaXMgZmFpbC1vcGVuLiAqL1xuY29uc3QgUVVPVEFfUkVRVUVTVF9PUFRJT05TOiBQaWNrPFJlcXVlc3RPcHRpb25zLCAnbWF4UmF0ZUxpbWl0UmV0cmllcycgfCAnbWF4UmV0cmllcyc+ID0ge1xuICBtYXhSYXRlTGltaXRSZXRyaWVzOiAxLFxuICBtYXhSZXRyaWVzOiAxLFxufTtcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdxdW90YScpO1xuXG4vLyBgcmVzZXJ2ZWAgZ2F0ZXMgRVhQRU5TSVZFIHJlc291cmNlcyAocGx1Z2luIGJ1aWxkcywgcGlwZWxpbmVzKS4gV2hlbiB0aGVcbi8vIHF1b3RhIHNlcnZpY2UgaXMgcmVhY2hhYmxlIGJ1dCByZXR1cm5zIGFuIGVycm9yIChvZnRlbiBhbiBPVkVSTE9BREVEIHNlcnZpY2UpLFxuLy8gZmFpbGluZyBvcGVuIHdvdWxkIHBpbGUgdW5tZXRlcmVkIGV4cGVuc2l2ZSB3b3JrIG9udG8gaXQgYW5kIGJ5cGFzcyBxdW90YVxuLy8gZW50aXJlbHkg4oCUIHRoZSB0ZXh0Ym9vayBmYWlsLW9wZW4gYmxvdy11cC4gU28gYHJlc2VydmVgIGZhaWxzIENMT1NFRCBvbiBhblxuLy8gZXJyb3JlZCByZXNwb25zZSBieSBkZWZhdWx0LiBPcGVyYXRvcnMgd2hvIHByZWZlciBhdmFpbGFiaWxpdHkgb3ZlclxuLy8gZW5mb3JjZW1lbnQgY2FuIG9wdCBiYWNrIGludG8gZmFpbC1vcGVuIHdpdGggUVVPVEFfUkVTRVJWRV9GQUlMX09QRU49dHJ1ZS5cbi8vIChBIGdlbnVpbmVseSBVTlJFQUNIQUJMRSBzZXJ2aWNlIHN0aWxsIGZhaWxzIG9wZW4g4oCUIHRoYXQncyBhIGNvbmZpcm1lZCBvdXRhZ2UsXG4vLyBub3QgYW4gb3ZlcmxvYWQgc2lnbmFsLilcbmNvbnN0IFFVT1RBX1JFU0VSVkVfRkFJTF9PUEVOID0gcHJvY2Vzcy5lbnYuUVVPVEFfUkVTRVJWRV9GQUlMX09QRU4gPT09ICd0cnVlJztcblxuLyoqXG4gKiBSZXN1bHQgb2YgYSBzeW5jaHJvbm91cyBxdW90YSByZXNlcnZhdGlvbiAgdGhlIGF0b21pYyBjaGVjaytpbmNyZW1lbnRcbiAqIHZhcmlhbnQuIGBleGNlZWRlZDogdHJ1ZWAgbWVhbnMgdGhlIG9wZXJhdGlvbiB3YXMgcmVqZWN0ZWQgYXQgdGhlIERCXG4gKiBsZXZlbDsgdGhlIGNhbGxlciBzaG91bGQgcmV0dXJuIDQyOSB3aXRob3V0IHJ1bm5pbmcgdGhlIGdhdGVkIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YVJlc2VydmVSZXN1bHQge1xuICBleGNlZWRlZDogYm9vbGVhbjtcbiAgcXVvdGE6IHtcbiAgICB0eXBlOiBRdW90YVR5cGU7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICB1c2VkOiBudW1iZXI7XG4gICAgcmVtYWluaW5nOiBudW1iZXI7XG4gICAgcmVzZXRBdD86IHN0cmluZztcbiAgfTtcbn1cblxuLyoqXG4gKiBRdW90YSBzZXJ2aWNlIGNsaWVudCBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFTZXJ2aWNlIHtcbiAgLyoqIENoZWNrIGlmIHF1b3RhIGlzIGF2YWlsYWJsZSAoZmFpbC1vcGVuIG9uIGVycm9yKS4gKi9cbiAgY2hlY2sob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxRdW90YUNoZWNrUmVzdWx0PjtcbiAgLyoqIEluY3JlbWVudCBxdW90YSB1c2FnZS4gUmV0dXJucyBhIHByb21pc2Ugc28gY2FsbGVycyBjYW4gb3B0aW9uYWxseSBoYW5kbGUgZXJyb3JzLiAqL1xuICBpbmNyZW1lbnQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50PzogbnVtYmVyLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQXRvbWljIHJlc2VydmUgIHRoZSBzYW1lIGF0b21pYyBjaGVjaytpbmNyZW1lbnQgYXMgYGluY3JlbWVudGAsIGJ1dFxuICAgKiBwYXJzZXMgdGhlIHJlc3BvbnNlIHNvIGNhbGxlcnMgY2FuIHNlZSB3aGV0aGVyIHRoZSBzbG90IHdhcyBhY3R1YWxseVxuICAgKiByZXNlcnZlZC4gVXNlIHRoaXMgZm9yIGV4cGVuc2l2ZSByZXNvdXJjZXMgd2hlcmUgdGhlIHBvc3QtaG9jIGZpcmUtXG4gICAqIGFuZC1mb3JnZXQgcGF0dGVybiBhbGxvd3MgY29uY3VycmVudCBvdmVyLXNwZW5kLlxuICAgKlxuICAgKiBGYWlsLW9wZW4gc2VtYW50aWNzIG9uIHRyYW5zcG9ydCBlcnJvcnM6IHJldHVybnMgYGV4Y2VlZGVkOiBmYWxzZWAgc29cbiAgICogdGhlIGNhbGxlciBjYW4gcHJvY2VlZCBhbmQgdGhlIHJlcXVlc3QgaXNuJ3QgYmxvY2tlZCBieSBxdW90YS1zZXJ2aWNlXG4gICAqIG91dGFnZXMgKG1hdGNoZXMgYGNoZWNrKClgKS5cbiAgICovXG4gIHJlc2VydmUob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50PzogbnVtYmVyLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPFF1b3RhUmVzZXJ2ZVJlc3VsdD47XG4gIC8qKlxuICAgKiBSb2xsIGJhY2sgYSBwcmV2aW91c2x5IHJlc2VydmVkIHNsb3QuIEZpcmUtYW5kLWZvcmdldCDigJQgbmV2ZXIgdGhyb3dzLlxuICAgKiBQYXNzIGByZXNldEF0U25hcHNob3RgICh0aGUgYHF1b3RhLnJlc2V0QXRgIG9ic2VydmVkIHdoZW4gdGhlIHNsb3Qgd2FzXG4gICAqIHJlc2VydmVkKSB0byBtYWtlIHRoZSByb2xsYmFjayBjb25kaXRpb25hbDogaWYgdGhlIHBlcmlvZCByb2xsZWQgb3ZlclxuICAgKiBiZXR3ZWVuIHJlc2VydmUgYW5kIHJvbGxiYWNrLCB0aGUgc2VydmVyIHNraXBzIHRoZSBkZWNyZW1lbnQgc28gaXQgZG9lc24ndFxuICAgKiBzdGVhbCBjYXBhY2l0eSBmcm9tIHRoZSBuZXcgcGVyaW9kLlxuICAgKi9cbiAgZGVjcmVtZW50KG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIGFtb3VudD86IG51bWJlciwgcmVzZXRBdFNuYXBzaG90Pzogc3RyaW5nLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogVXBkYXRlIHF1b3RhIGxpbWl0cy4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuICovXG4gIHVwZGF0ZUxpbWl0cyhvcmdJZDogc3RyaW5nLCBsaW1pdHM6IFBhcnRpYWw8UmVjb3JkPFF1b3RhVHlwZSwgbnVtYmVyPj4sIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPjtcbiAgLyoqIFJlc2V0IHF1b3RhIHVzYWdlLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gKi9cbiAgcmVzZXQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlPzogUXVvdGFUeXBlLCBhdXRoSGVhZGVyPzogc3RyaW5nLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAvKipcbiAgICogR2V0IHRoZSBvcmcncyBxdW90YSB0aWVyICgnZGV2ZWxvcGVyJyB8ICdwcm8nIHwgJ3VubGltaXRlZCcpLiBVc2VkIGJ5XG4gICAqIHRoZSBwbHVnaW4tYnVpbGQgcXVldWUgcGFydGl0aW9uaW5nIHRvIHJvdXRlIGEgYnVpbGQgdG8gdGhlXG4gICAqIHJpZ2h0IHBlci10aWVyIHF1ZXVlLiBGYWlsLW9wZW4gcmV0dXJucyBERUZBVUxUX1RJRVIgKCdkZXZlbG9wZXInKVxuICAgKiBhIG1pc2NsYXNzaWZpZWQgcHJvL3VubGltaXRlZCBvcmcgd2lsbCBsYW5kIGluIHRoZSBkZXZlbG9wZXIgcXVldWVcbiAgICogYW5kIHN0aWxsIGJ1aWxkLCBqdXN0IHdpdGhvdXQgdGhlIHRpZXItc2NvcGVkIHNjaGVkdWxpbmcgYm9vc3QuXG4gICAqL1xuICBnZXRUaWVyKG9yZ0lkOiBzdHJpbmcsIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxRdW90YVRpZXI+O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHF1b3RhIHNlcnZpY2UgY2xpZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhU2VydmljZUNvbmZpZyB7XG4gIC8qKiBRdW90YSBzZXJ2aWNlIGhvc3QgKGRlZmF1bHQ6IGVudiBRVU9UQV9TRVJWSUNFX0hPU1Qgb3IgJ3F1b3RhJykgKi9cbiAgaG9zdD86IHN0cmluZztcbiAgLyoqIFF1b3RhIHNlcnZpY2UgcG9ydCAoZGVmYXVsdDogZW52IFFVT1RBX1NFUlZJQ0VfUE9SVCBvciAzMDAwKSAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogUmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogNTAwMCkgKi9cbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBmYWlsLW9wZW4gcXVvdGEgcmVzdWx0IChhbGxvd3MgdGhlIHJlcXVlc3QpLlxuICovXG5mdW5jdGlvbiBjcmVhdGVGYWlsT3BlblJlc3VsdCgpOiBRdW90YUNoZWNrUmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICBhbGxvd2VkOiB0cnVlLFxuICAgIGxpbWl0OiAtMSxcbiAgICB1c2VkOiAwLFxuICAgIHJlbWFpbmluZzogLTEsXG4gICAgcmVzZXRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHVubGltaXRlZDogdHJ1ZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBjb21tb24gcmVxdWVzdCBoZWFkZXJzIHdpdGggb3B0aW9uYWwgcmVxdWVzdCBJRCBmb3IgZGlzdHJpYnV0ZWQgdHJhY2luZy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzKG9yZ0lkOiBzdHJpbmcsIGF1dGhIZWFkZXI/OiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyAneC1vcmctaWQnOiBvcmdJZCB9O1xuICBpZiAoYXV0aEhlYWRlcikgaGVhZGVycy5BdXRob3JpemF0aW9uID0gYXV0aEhlYWRlcjtcbiAgaWYgKHJlcXVlc3RJZCkgaGVhZGVyc1snWC1SZXF1ZXN0LUlkJ10gPSByZXF1ZXN0SWQ7XG4gIHJldHVybiBoZWFkZXJzO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHF1b3RhIHNlcnZpY2UgY2xpZW50LlxuICpcbiAqIEBwYXJhbSBjb25maWcgLSBPcHRpb25hbCBzZXJ2aWNlIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIFF1b3RhIHNlcnZpY2UgY2xpZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHF1b3RhU2VydmljZSA9IGNyZWF0ZVF1b3RhU2VydmljZSgpO1xuICpcbiAqIC8vIENoZWNrIHF1b3RhIGJlZm9yZSBwcm9jZXNzaW5nXG4gKiBjb25zdCBxdW90YSA9IGF3YWl0IHF1b3RhU2VydmljZS5jaGVjayhvcmdJZCwgJ2FwaUNhbGxzJywgYXV0aEhlYWRlcik7XG4gKiBpZiAoIXF1b3RhLmFsbG93ZWQpIHtcbiAqIHJldHVybiByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnUXVvdGEgZXhjZWVkZWQnIH0pO1xuICogfVxuICpcbiAqIC8vIEluY3JlbWVudCBxdW90YSBhZnRlciBzdWNjZXNzXG4gKiBxdW90YVNlcnZpY2UuaW5jcmVtZW50KG9yZ0lkLCAnYXBpQ2FsbHMnLCBhdXRoSGVhZGVyKS5jYXRjaChlcnIgPT4gbG9nZ2VyLndhcm4oJ1F1b3RhIGluY3JlbWVudCBmYWlsZWQnLCB7IGVycm9yOiBlcnIgfSkpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVRdW90YVNlcnZpY2UoY29uZmlnOiBRdW90YVNlcnZpY2VDb25maWcgPSB7fSk6IFF1b3RhU2VydmljZSB7XG4gIGNvbnN0IHNlcnZpY2VDb25maWc6IFNlcnZpY2VDb25maWcgPSB7XG4gICAgaG9zdDogY29uZmlnLmhvc3QgPz8gcHJvY2Vzcy5lbnYuUVVPVEFfU0VSVklDRV9IT1NUID8/ICdxdW90YScsXG4gICAgcG9ydDogY29uZmlnLnBvcnQgPz8gcGFyc2VJbnQocHJvY2Vzcy5lbnYuUVVPVEFfU0VSVklDRV9QT1JUID8/ICczMDAwJywgMTApLFxuICAgIHRpbWVvdXQ6IGNvbmZpZy50aW1lb3V0ID8/IDUwMDAsXG4gIH07XG5cbiAgY29uc3QgY2xpZW50ID0gY3JlYXRlU2FmZUNsaWVudChzZXJ2aWNlQ29uZmlnKTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGNoZWNrKG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8UXVvdGFDaGVja1Jlc3VsdD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vJHtlbmNvZGVVUklDb21wb25lbnQocXVvdGFUeXBlKX1gO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8e1xuICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgICBkYXRhPzogeyBxdW90YVR5cGU6IHN0cmluZzsgc3RhdHVzOiBRdW90YUNoZWNrUmVzdWx0IH07XG4gICAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICB9PihwYXRoLCB7IGhlYWRlcnM6IGJ1aWxkSGVhZGVycyhvcmdJZCwgYXV0aEhlYWRlciwgcmVxdWVzdElkKSwgLi4uUVVPVEFfUkVRVUVTVF9PUFRJT05TIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdRVU9UQV9GQUlMX09QRU46IFF1b3RhIHNlcnZpY2UgdW5yZWFjaGFibGUsIGFsbG93aW5nIHJlcXVlc3QnLCB7IG9yZ0lkLCBxdW90YVR5cGUgfSk7XG4gICAgICAgIGVtaXRDb3VudGVyKCdxdW90YV9mYWlsX29wZW5fdG90YWwnLCB7IG9wZXJhdGlvbjogJ2NoZWNrJywgcmVhc29uOiAndW5yZWFjaGFibGUnLCBxdW90YVR5cGUgfSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVGYWlsT3BlblJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwIHx8ICFyZXNwb25zZS5ib2R5LnN1Y2Nlc3MgfHwgIXJlc3BvbnNlLmJvZHkuZGF0YT8uc3RhdHVzKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdRVU9UQV9GQUlMX09QRU46IFF1b3RhIGNoZWNrIHJldHVybmVkIG5vbi1vaywgYWxsb3dpbmcgcmVxdWVzdCcsIHtcbiAgICAgICAgICBvcmdJZCwgcXVvdGFUeXBlLCBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlLCBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICBlbWl0Q291bnRlcigncXVvdGFfZmFpbF9vcGVuX3RvdGFsJywgeyBvcGVyYXRpb246ICdjaGVjaycsIHJlYXNvbjogJ25vbi1vaycsIHF1b3RhVHlwZSB9KTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZhaWxPcGVuUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZS5ib2R5LmRhdGEuc3RhdHVzO1xuICAgIH0sXG5cbiAgICBhc3luYyBpbmNyZW1lbnQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50OiBudW1iZXIgPSAxLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBgL3F1b3Rhcy8ke2VuY29kZVVSSUNvbXBvbmVudChvcmdJZCl9L2luY3JlbWVudGA7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50XG4gICAgICAgIC5wb3N0KHBhdGgsIHsgcXVvdGFUeXBlLCBhbW91bnQgfSwgeyBoZWFkZXJzOiBidWlsZEhlYWRlcnMob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCksIC4uLlFVT1RBX1JFUVVFU1RfT1BUSU9OUyB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBpbmNyZW1lbnQgcXVvdGEnLCB7XG4gICAgICAgICAgb3JnSWQsIHF1b3RhVHlwZSwgYW1vdW50LCBzdGF0dXNDb2RlOiByZXNwb25zZT8uc3RhdHVzQ29kZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1F1b3RhIGluY3JlbWVudGVkJywgeyBvcmdJZCwgcXVvdGFUeXBlLCBhbW91bnQgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc2VydmUob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50OiBudW1iZXIgPSAxLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPFF1b3RhUmVzZXJ2ZVJlc3VsdD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vaW5jcmVtZW50YDtcblxuICAgICAgLy8gMjAwIGNhcnJpZXMgYGRhdGEucXVvdGFgOyA0MjkgKFFVT1RBX0VYQ0VFREVEKSBjYXJyaWVzIGBkZXRhaWxzLnF1b3RhYC5cbiAgICAgIC8vIEJvdGggc2hhcGVzIGFyZSBub3JtYWxpemVkIGludG8gUXVvdGFSZXNlcnZlUmVzdWx0LlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDx7XG4gICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgICAgIGRhdGE/OiB7IHF1b3RhPzogUXVvdGFSZXNlcnZlUmVzdWx0WydxdW90YSddIH07XG4gICAgICAgIGRldGFpbHM/OiB7IHF1b3RhPzogUXVvdGFSZXNlcnZlUmVzdWx0WydxdW90YSddIH07XG4gICAgICAgIGVycm9yQ29kZT86IHN0cmluZztcbiAgICAgIH0+KHBhdGgsIHsgcXVvdGFUeXBlLCBhbW91bnQgfSwgeyBoZWFkZXJzOiBidWlsZEhlYWRlcnMob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCksIC4uLlFVT1RBX1JFUVVFU1RfT1BUSU9OUyB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICBsb2dnZXIud2FybignUVVPVEFfRkFJTF9PUEVOOiBRdW90YSBzZXJ2aWNlIHVucmVhY2hhYmxlIG9uIHJlc2VydmUsIGFsbG93aW5nIHJlcXVlc3QnLCB7IG9yZ0lkLCBxdW90YVR5cGUgfSk7XG4gICAgICAgIGVtaXRDb3VudGVyKCdxdW90YV9mYWlsX29wZW5fdG90YWwnLCB7IG9wZXJhdGlvbjogJ3Jlc2VydmUnLCByZWFzb246ICd1bnJlYWNoYWJsZScsIHF1b3RhVHlwZSB9KTtcbiAgICAgICAgcmV0dXJuIHsgZXhjZWVkZWQ6IGZhbHNlLCBxdW90YTogeyB0eXBlOiBxdW90YVR5cGUsIGxpbWl0OiAtMSwgdXNlZDogMCwgcmVtYWluaW5nOiAtMSB9IH07XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MjkpIHtcbiAgICAgICAgY29uc3QgcSA9IHJlc3BvbnNlLmJvZHkuZGV0YWlscz8ucXVvdGE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXhjZWVkZWQ6IHRydWUsXG4gICAgICAgICAgcXVvdGE6IHEgPz8geyB0eXBlOiBxdW90YVR5cGUsIGxpbWl0OiAwLCB1c2VkOiAwLCByZW1haW5pbmc6IDAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCB8fCAhcmVzcG9uc2UuYm9keS5zdWNjZXNzKSB7XG4gICAgICAgIGlmIChRVU9UQV9SRVNFUlZFX0ZBSUxfT1BFTikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdRVU9UQV9GQUlMX09QRU46IFF1b3RhIHJlc2VydmUgcmV0dXJuZWQgbm9uLW9rLCBhbGxvd2luZyByZXF1ZXN0Jywge1xuICAgICAgICAgICAgb3JnSWQsIHF1b3RhVHlwZSwgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlbWl0Q291bnRlcigncXVvdGFfZmFpbF9vcGVuX3RvdGFsJywgeyBvcGVyYXRpb246ICdyZXNlcnZlJywgcmVhc29uOiAnbm9uLW9rJywgcXVvdGFUeXBlIH0pO1xuICAgICAgICAgIHJldHVybiB7IGV4Y2VlZGVkOiBmYWxzZSwgcXVvdGE6IHsgdHlwZTogcXVvdGFUeXBlLCBsaW1pdDogLTEsIHVzZWQ6IDAsIHJlbWFpbmluZzogLTEgfSB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFNlcnZpY2UgcmVhY2hhYmxlIGJ1dCBkaWRuJ3QgY29uZmlybSB0aGUgcmVzZXJ2YXRpb24g4oaSIGZhaWwgQ0xPU0VELlxuICAgICAgICBsb2dnZXIud2FybignUVVPVEFfRkFJTF9DTE9TRUQ6IFF1b3RhIHJlc2VydmUgcmV0dXJuZWQgbm9uLW9rLCBkZW55aW5nIHJlcXVlc3QnLCB7XG4gICAgICAgICAgb3JnSWQsIHF1b3RhVHlwZSwgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGVtaXRDb3VudGVyKCdxdW90YV9mYWlsX2Nsb3NlZF90b3RhbCcsIHsgb3BlcmF0aW9uOiAncmVzZXJ2ZScsIHJlYXNvbjogJ25vbi1vaycsIHF1b3RhVHlwZSB9KTtcbiAgICAgICAgcmV0dXJuIHsgZXhjZWVkZWQ6IHRydWUsIHF1b3RhOiB7IHR5cGU6IHF1b3RhVHlwZSwgbGltaXQ6IDAsIHVzZWQ6IDAsIHJlbWFpbmluZzogMCB9IH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHEgPSByZXNwb25zZS5ib2R5LmRhdGE/LnF1b3RhO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhjZWVkZWQ6IGZhbHNlLFxuICAgICAgICBxdW90YTogcSA/PyB7IHR5cGU6IHF1b3RhVHlwZSwgbGltaXQ6IC0xLCB1c2VkOiAwLCByZW1haW5pbmc6IC0xIH0sXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWNyZW1lbnQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50OiBudW1iZXIgPSAxLCByZXNldEF0U25hcHNob3Q/OiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vZGVjcmVtZW50YDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50XG4gICAgICAgIC5wb3N0KHBhdGgsIHsgcXVvdGFUeXBlLCBhbW91bnQsIC4uLihyZXNldEF0U25hcHNob3QgJiYgeyByZXNldEF0U25hcHNob3QgfSkgfSwgeyBoZWFkZXJzOiBidWlsZEhlYWRlcnMob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCksIC4uLlFVT1RBX1JFUVVFU1RfT1BUSU9OUyB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgLy8gUm9sbGJhY2sgZmFpbHVyZSBpcyBsb2dnZWQgYnV0IG5ldmVyIHByb3BhZ2F0ZWQgIHRoZSBhY3Rpb24ncyBvd25cbiAgICAgICAgLy8gZmFpbHVyZSBoYXMgYWxyZWFkeSBiZWVuIHN1cmZhY2VkIHRvIHRoZSBjYWxsZXI7IGEgc3R1Y2sgY291bnRlclxuICAgICAgICAvLyByZXNvbHZlcyBvbiB0aGUgbmV4dCBwZXJpb2QgcmVzZXQuXG4gICAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gZGVjcmVtZW50IHF1b3RhIChzbG90IHdpbGwgcmVzZXQgb24gbmV4dCBwZXJpb2QpJywge1xuICAgICAgICAgIG9yZ0lkLCBxdW90YVR5cGUsIGFtb3VudCwgc3RhdHVzQ29kZTogcmVzcG9uc2U/LnN0YXR1c0NvZGUsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdRdW90YSBkZWNyZW1lbnRlZCcsIHsgb3JnSWQsIHF1b3RhVHlwZSwgYW1vdW50IH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVMaW1pdHMoIG9yZ0lkOiBzdHJpbmcsXG4gICAgICBsaW1pdHM6IFBhcnRpYWw8UmVjb3JkPFF1b3RhVHlwZSwgbnVtYmVyPj4sXG4gICAgICBhdXRoSGVhZGVyOiBzdHJpbmcsXG4gICAgICByZXF1ZXN0SWQ/OiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICBjb25zdCBwYXRoID0gYC9xdW90YXMvJHtlbmNvZGVVUklDb21wb25lbnQob3JnSWQpfWA7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnB1dChwYXRoLCBsaW1pdHMsIHsgaGVhZGVyczogYnVpbGRIZWFkZXJzKG9yZ0lkLCBhdXRoSGVhZGVyLCByZXF1ZXN0SWQpIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIHVwZGF0ZSBxdW90YSBsaW1pdHMnLCB7XG4gICAgICAgICAgb3JnSWQsIGxpbWl0cywgc3RhdHVzQ29kZTogcmVzcG9uc2U/LnN0YXR1c0NvZGUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5pbmZvKCdRdW90YSBsaW1pdHMgdXBkYXRlZCcsIHsgb3JnSWQsIGxpbWl0cyB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaWVyKG9yZ0lkOiBzdHJpbmcsIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxRdW90YVRpZXI+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBgL3F1b3Rhcy8ke2VuY29kZVVSSUNvbXBvbmVudChvcmdJZCl9YDtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PHtcbiAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgZGF0YT86IHsgcXVvdGE/OiB7IHRpZXI/OiBzdHJpbmcgfSB9O1xuICAgICAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgICAgfT4ocGF0aCwgeyBoZWFkZXJzOiBidWlsZEhlYWRlcnMob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCksIC4uLlFVT1RBX1JFUVVFU1RfT1BUSU9OUyB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDAgfHwgIXJlc3BvbnNlLmJvZHkuc3VjY2Vzcykge1xuICAgICAgICBsb2dnZXIud2FybignUVVPVEFfRkFJTF9PUEVOOiB0aWVyIGxvb2t1cCBmYWlsZWQsIGRlZmF1bHRpbmcgdG8gZGV2ZWxvcGVyIHRpZXInLCB7XG4gICAgICAgICAgb3JnSWQsIHN0YXR1c0NvZGU6IHJlc3BvbnNlPy5zdGF0dXNDb2RlLFxuICAgICAgICB9KTtcbiAgICAgICAgZW1pdENvdW50ZXIoJ3F1b3RhX2ZhaWxfb3Blbl90b3RhbCcsIHsgb3BlcmF0aW9uOiAndGllcicsIHJlYXNvbjogcmVzcG9uc2UgPyAnbm9uLW9rJyA6ICd1bnJlYWNoYWJsZScsIHF1b3RhVHlwZTogJ3RpZXInIH0pO1xuICAgICAgICByZXR1cm4gREVGQVVMVF9USUVSO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0aWVyID0gcmVzcG9uc2UuYm9keS5kYXRhPy5xdW90YT8udGllcjtcbiAgICAgIHJldHVybiB0aWVyICYmIGlzVmFsaWRUaWVyKHRpZXIpID8gdGllcjogREVGQVVMVF9USUVSO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXNldChvcmdJZDogc3RyaW5nLCBxdW90YVR5cGU/OiBRdW90YVR5cGUsIGF1dGhIZWFkZXI/OiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vcmVzZXRgO1xuXG4gICAgICBjb25zdCBib2R5ID0gcXVvdGFUeXBlID8geyBxdW90YVR5cGUgfToge307XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0KHBhdGgsIGJvZHksIHsgaGVhZGVyczogYnVpbGRIZWFkZXJzKG9yZ0lkLCBhdXRoSGVhZGVyID8/ICcnLCByZXF1ZXN0SWQpIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIHJlc2V0IHF1b3RhJywge1xuICAgICAgICAgIG9yZ0lkLCBxdW90YVR5cGUsIHN0YXR1c0NvZGU6IHJlc3BvbnNlPy5zdGF0dXNDb2RlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuaW5mbygnUXVvdGEgcmVzZXQnLCB7IG9yZ0lkLCBxdW90YVR5cGU6IHF1b3RhVHlwZSA/PyAnYWxsJyB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogRmlyZS1hbmQtZm9yZ2V0IHF1b3RhIGluY3JlbWVudCB3aXRoIHN0YW5kYXJkaXplZCBlcnJvciBsb2dnaW5nLlxuICpcbiAqIFdyYXBzIGBxdW90YVNlcnZpY2UuaW5jcmVtZW50KClgIHdpdGggYSBgLmNhdGNoKClgIHRoYXQgbG9ncyBhIHdhcm5pbmcuXG4gKiBFbGltaW5hdGVzIHRoZSBpZGVudGljYWwgb25lLWxpbmVyIHJlcGVhdGVkIGFjcm9zcyBldmVyeSByZWFkIHJvdXRlLlxuICpcbiAqIEBwYXJhbSBxdW90YVNlcnZpY2UgLSBRdW90YSBzZXJ2aWNlIGNsaWVudFxuICogQHBhcmFtIG9yZ0lkIC0gT3JnYW5pemF0aW9uIElEXG4gKiBAcGFyYW0gcXVvdGFUeXBlIC0gUXVvdGEgdHlwZSB0byBpbmNyZW1lbnRcbiAqIEBwYXJhbSBhdXRoSGVhZGVyIC0gQXV0aG9yaXphdGlvbiBoZWFkZXIgdmFsdWVcbiAqIEBwYXJhbSBsb2dXYXJuIC0gTG9nZ2luZyBmdW5jdGlvbiBmb3Igd2FybmluZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluY3JlbWVudFF1b3RhKCBxdW90YVNlcnZpY2U6IFF1b3RhU2VydmljZSxcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcXVvdGFUeXBlOiBRdW90YVR5cGUsXG4gIGF1dGhIZWFkZXI6IHN0cmluZyxcbiAgbG9nV2FybjogKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IHZvaWQsXG4pOiB2b2lkIHtcbiAgcXVvdGFTZXJ2aWNlLmluY3JlbWVudChvcmdJZCwgcXVvdGFUeXBlLCBhdXRoSGVhZGVyKS5jYXRjaCgoZXJyOiB1bmtub3duKSA9PlxuICAgIGxvZ1dhcm4oJ1F1b3RhIGluY3JlbWVudCBmYWlsZWQnLCB7IGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlOiBTdHJpbmcoZXJyKSB9KSxcbiAgKTtcbn1cblxuLyoqXG4gKiBBdG9taWMgcmVzZXJ2ZSBoZWxwZXIgZm9yIHRoZSBcInJlc2VydmUgKyBjb21taXQgLyByb2xsYmFja1wiIHBhdHRlcm4uXG4gKiBVc2UgZm9yIGV4cGVuc2l2ZSByZXNvdXJjZXMgKHBpcGVsaW5lcywgcGx1Z2lucywgQUkgY2FsbHMpIHdoZXJlIHRoZVxuICogZmlyZS1hbmQtZm9yZ2V0IHBvc3QtaG9jIGBpbmNyZW1lbnRRdW90YWAgYWxsb3dzIGNvbmN1cnJlbnQgb3Zlci1zcGVuZC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBzdHJ1Y3R1cmVkIHJlc3VsdCBzbyB0aGUgY2FsbGVyIGNhbiBkZWNpZGUgd2hldGhlciB0byBydW5cbiAqIHRoZSBnYXRlZCBhY3Rpb24gb3IgNDI5IHRoZSBjbGllbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc2VydmF0aW9uID0gYXdhaXQgcmVzZXJ2ZVF1b3RhKHF1b3RhU2VydmljZSwgb3JnSWQsICdwaXBlbGluZXMnLCBhdXRoSGVhZGVyKTtcbiAqIGlmIChyZXNlcnZhdGlvbi5leGNlZWRlZCkgcmV0dXJuIHNlbmRRdW90YUV4Y2VlZGVkKHJlcywgJ3BpcGVsaW5lcycsIHJlc2VydmF0aW9uLnF1b3RhKTtcbiAqIHRyeSB7XG4gKiBhd2FpdCBkb0V4cGVuc2l2ZVRoaW5nKCk7XG4gKiB9IGNhdGNoIChlcnIpIHtcbiAqIC8vIFBhc3MgdGhlIHJlc2VydmVkIHJlc2V0QXQgc28gYSBwZXJpb2Qgcm9sbG92ZXIgZG9lc24ndCBnZXQgZG91YmxlLWNoYXJnZWQuXG4gKiBkZWNyZW1lbnRRdW90YShxdW90YVNlcnZpY2UsIG9yZ0lkLCAncGlwZWxpbmVzJywgYXV0aEhlYWRlciwgbG9nV2FybiwgMSwgcmVzZXJ2YXRpb24ucXVvdGEucmVzZXRBdCk7XG4gKiB0aHJvdyBlcnI7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2VydmVRdW90YSggcXVvdGFTZXJ2aWNlOiBRdW90YVNlcnZpY2UsXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIHF1b3RhVHlwZTogUXVvdGFUeXBlLFxuICBhdXRoSGVhZGVyOiBzdHJpbmcsXG4gIGFtb3VudDogbnVtYmVyID0gMSxcbiAgcmVxdWVzdElkPzogc3RyaW5nLFxuKTogUHJvbWlzZTxRdW90YVJlc2VydmVSZXN1bHQ+IHtcbiAgcmV0dXJuIHF1b3RhU2VydmljZS5yZXNlcnZlKG9yZ0lkLCBxdW90YVR5cGUsIGF1dGhIZWFkZXIsIGFtb3VudCwgcmVxdWVzdElkKTtcbn1cblxuLyoqXG4gKiBGaXJlLWFuZC1mb3JnZXQgcm9sbGJhY2sgZm9yIGEgcHJldmlvdXNseSByZXNlcnZlZCBxdW90YSBzbG90LlxuICogTG9ncyBvbiBmYWlsdXJlIGJ1dCBuZXZlciB0aHJvd3MgIHRoZSBhY3Rpb24gdGhhdCBuZWVkZWQgdGhlIHJvbGxiYWNrXG4gKiBoYXMgYWxyZWFkeSBmYWlsZWQsIG5vIHBvaW50IGNvbXBvdW5kaW5nIHRoZSBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY3JlbWVudFF1b3RhKCBxdW90YVNlcnZpY2U6IFF1b3RhU2VydmljZSxcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcXVvdGFUeXBlOiBRdW90YVR5cGUsXG4gIGF1dGhIZWFkZXI6IHN0cmluZyxcbiAgbG9nV2FybjogKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IHZvaWQsXG4gIGFtb3VudDogbnVtYmVyID0gMSxcbiAgcmVzZXRBdFNuYXBzaG90Pzogc3RyaW5nLFxuKTogdm9pZCB7XG4gIHF1b3RhU2VydmljZS5kZWNyZW1lbnQob3JnSWQsIHF1b3RhVHlwZSwgYXV0aEhlYWRlciwgYW1vdW50LCByZXNldEF0U25hcHNob3QpLmNhdGNoKChlcnI6IHVua25vd24pID0+XG4gICAgbG9nV2FybignUXVvdGEgcm9sbGJhY2sgZmFpbGVkJywgeyBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZTogU3RyaW5nKGVycikgfSksXG4gICk7XG59XG4iXX0=
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvcXVvdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFFekUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQWtCLE1BQU0seUJBQXlCLENBQUM7QUFDcEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCx5RUFBeUU7QUFDekUsTUFBTSxxQkFBcUIsR0FBK0Q7SUFDeEYsbUJBQW1CLEVBQUUsQ0FBQztJQUN0QixVQUFVLEVBQUUsQ0FBQztDQUNkLENBQUM7QUFFRixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFckMsMkVBQTJFO0FBQzNFLGlGQUFpRjtBQUNqRiw0RUFBNEU7QUFDNUUsNkVBQTZFO0FBQzdFLHNFQUFzRTtBQUN0RSw2RUFBNkU7QUFDN0UsaUZBQWlGO0FBQ2pGLDJCQUEyQjtBQUMzQixNQUFNLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEtBQUssTUFBTSxDQUFDO0FBdUUvRTs7R0FFRztBQUNILFNBQVMsb0JBQW9CO0lBQzNCLE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBSTtRQUNiLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDVCxJQUFJLEVBQUUsQ0FBQztRQUNQLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDYixPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7UUFDakMsU0FBUyxFQUFFLElBQUk7UUFDZiwwRUFBMEU7UUFDMUUsa0VBQWtFO1FBQ2xFLFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FF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QUFZLEVBQUUsRUFBRSxDQUMxRSxPQUFPLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FDOUYsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFFLFlBQTBCLEVBQ3RELEtBQWEsRUFDYixTQUFvQixFQUNwQixVQUFrQixFQUNsQixTQUFpQixDQUFDLEVBQ2xCLFNBQWtCO0lBRWxCLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFFLFlBQTBCLEVBQ3hELEtBQWEsRUFDYixTQUFvQixFQUNwQixVQUFrQixFQUNsQixPQUFrRCxFQUNsRCxTQUFpQixDQUFDLEVBQ2xCLGVBQXdCO0lBRXhCLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVksRUFBRSxFQUFFLENBQ25HLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUM3RixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVTYWZlQ2xpZW50LCB0eXBlIFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi9odHRwLWNsaWVudC5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1b3RhVHlwZSwgUXVvdGFDaGVja1Jlc3VsdCwgU2VydmljZUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBERUZBVUxUX1RJRVIsIGlzVmFsaWRUaWVyLCB0eXBlIFF1b3RhVGllciB9IGZyb20gJy4uL3R5cGVzL3F1b3RhLXRpZXJzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcblxuLyoqIFJldHJ5IG9wdGlvbnMgZm9yIHF1b3RhIGNhbGxzICBmYWlsIGZhc3Qgc2luY2UgcXVvdGEgaXMgZmFpbC1vcGVuLiAqL1xuY29uc3QgUVVPVEFfUkVRVUVTVF9PUFRJT05TOiBQaWNrPFJlcXVlc3RPcHRpb25zLCAnbWF4UmF0ZUxpbWl0UmV0cmllcycgfCAnbWF4UmV0cmllcyc+ID0ge1xuICBtYXhSYXRlTGltaXRSZXRyaWVzOiAxLFxuICBtYXhSZXRyaWVzOiAxLFxufTtcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdxdW90YScpO1xuXG4vLyBgcmVzZXJ2ZWAgZ2F0ZXMgRVhQRU5TSVZFIHJlc291cmNlcyAocGx1Z2luIGJ1aWxkcywgcGlwZWxpbmVzKS4gV2hlbiB0aGVcbi8vIHF1b3RhIHNlcnZpY2UgaXMgcmVhY2hhYmxlIGJ1dCByZXR1cm5zIGFuIGVycm9yIChvZnRlbiBhbiBPVkVSTE9BREVEIHNlcnZpY2UpLFxuLy8gZmFpbGluZyBvcGVuIHdvdWxkIHBpbGUgdW5tZXRlcmVkIGV4cGVuc2l2ZSB3b3JrIG9udG8gaXQgYW5kIGJ5cGFzcyBxdW90YVxuLy8gZW50aXJlbHkg4oCUIHRoZSB0ZXh0Ym9vayBmYWlsLW9wZW4gYmxvdy11cC4gU28gYHJlc2VydmVgIGZhaWxzIENMT1NFRCBvbiBhblxuLy8gZXJyb3JlZCByZXNwb25zZSBieSBkZWZhdWx0LiBPcGVyYXRvcnMgd2hvIHByZWZlciBhdmFpbGFiaWxpdHkgb3ZlclxuLy8gZW5mb3JjZW1lbnQgY2FuIG9wdCBiYWNrIGludG8gZmFpbC1vcGVuIHdpdGggUVVPVEFfUkVTRVJWRV9GQUlMX09QRU49dHJ1ZS5cbi8vIChBIGdlbnVpbmVseSBVTlJFQUNIQUJMRSBzZXJ2aWNlIHN0aWxsIGZhaWxzIG9wZW4g4oCUIHRoYXQncyBhIGNvbmZpcm1lZCBvdXRhZ2UsXG4vLyBub3QgYW4gb3ZlcmxvYWQgc2lnbmFsLilcbmNvbnN0IFFVT1RBX1JFU0VSVkVfRkFJTF9PUEVOID0gcHJvY2Vzcy5lbnYuUVVPVEFfUkVTRVJWRV9GQUlMX09QRU4gPT09ICd0cnVlJztcblxuLyoqXG4gKiBSZXN1bHQgb2YgYSBzeW5jaHJvbm91cyBxdW90YSByZXNlcnZhdGlvbiAgdGhlIGF0b21pYyBjaGVjaytpbmNyZW1lbnRcbiAqIHZhcmlhbnQuIGBleGNlZWRlZDogdHJ1ZWAgbWVhbnMgdGhlIG9wZXJhdGlvbiB3YXMgcmVqZWN0ZWQgYXQgdGhlIERCXG4gKiBsZXZlbDsgdGhlIGNhbGxlciBzaG91bGQgcmV0dXJuIDQyOSB3aXRob3V0IHJ1bm5pbmcgdGhlIGdhdGVkIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YVJlc2VydmVSZXN1bHQge1xuICBleGNlZWRlZDogYm9vbGVhbjtcbiAgcXVvdGE6IHtcbiAgICB0eXBlOiBRdW90YVR5cGU7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICB1c2VkOiBudW1iZXI7XG4gICAgcmVtYWluaW5nOiBudW1iZXI7XG4gICAgcmVzZXRBdD86IHN0cmluZztcbiAgfTtcbn1cblxuLyoqXG4gKiBRdW90YSBzZXJ2aWNlIGNsaWVudCBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFTZXJ2aWNlIHtcbiAgLyoqIENoZWNrIGlmIHF1b3RhIGlzIGF2YWlsYWJsZSAoZmFpbC1vcGVuIG9uIGVycm9yKS4gKi9cbiAgY2hlY2sob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxRdW90YUNoZWNrUmVzdWx0PjtcbiAgLyoqIEluY3JlbWVudCBxdW90YSB1c2FnZS4gUmV0dXJucyBhIHByb21pc2Ugc28gY2FsbGVycyBjYW4gb3B0aW9uYWxseSBoYW5kbGUgZXJyb3JzLiAqL1xuICBpbmNyZW1lbnQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50PzogbnVtYmVyLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQXRvbWljIHJlc2VydmUgIHRoZSBzYW1lIGF0b21pYyBjaGVjaytpbmNyZW1lbnQgYXMgYGluY3JlbWVudGAsIGJ1dFxuICAgKiBwYXJzZXMgdGhlIHJlc3BvbnNlIHNvIGNhbGxlcnMgY2FuIHNlZSB3aGV0aGVyIHRoZSBzbG90IHdhcyBhY3R1YWxseVxuICAgKiByZXNlcnZlZC4gVXNlIHRoaXMgZm9yIGV4cGVuc2l2ZSByZXNvdXJjZXMgd2hlcmUgdGhlIHBvc3QtaG9jIGZpcmUtXG4gICAqIGFuZC1mb3JnZXQgcGF0dGVybiBhbGxvd3MgY29uY3VycmVudCBvdmVyLXNwZW5kLlxuICAgKlxuICAgKiBGYWlsLW9wZW4gc2VtYW50aWNzIG9uIHRyYW5zcG9ydCBlcnJvcnM6IHJldHVybnMgYGV4Y2VlZGVkOiBmYWxzZWAgc29cbiAgICogdGhlIGNhbGxlciBjYW4gcHJvY2VlZCBhbmQgdGhlIHJlcXVlc3QgaXNuJ3QgYmxvY2tlZCBieSBxdW90YS1zZXJ2aWNlXG4gICAqIG91dGFnZXMgKG1hdGNoZXMgYGNoZWNrKClgKS5cbiAgICovXG4gIHJlc2VydmUob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50PzogbnVtYmVyLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPFF1b3RhUmVzZXJ2ZVJlc3VsdD47XG4gIC8qKlxuICAgKiBSb2xsIGJhY2sgYSBwcmV2aW91c2x5IHJlc2VydmVkIHNsb3QuIEZpcmUtYW5kLWZvcmdldCDigJQgbmV2ZXIgdGhyb3dzLlxuICAgKiBQYXNzIGByZXNldEF0U25hcHNob3RgICh0aGUgYHF1b3RhLnJlc2V0QXRgIG9ic2VydmVkIHdoZW4gdGhlIHNsb3Qgd2FzXG4gICAqIHJlc2VydmVkKSB0byBtYWtlIHRoZSByb2xsYmFjayBjb25kaXRpb25hbDogaWYgdGhlIHBlcmlvZCByb2xsZWQgb3ZlclxuICAgKiBiZXR3ZWVuIHJlc2VydmUgYW5kIHJvbGxiYWNrLCB0aGUgc2VydmVyIHNraXBzIHRoZSBkZWNyZW1lbnQgc28gaXQgZG9lc24ndFxuICAgKiBzdGVhbCBjYXBhY2l0eSBmcm9tIHRoZSBuZXcgcGVyaW9kLlxuICAgKi9cbiAgZGVjcmVtZW50KG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIGFtb3VudD86IG51bWJlciwgcmVzZXRBdFNuYXBzaG90Pzogc3RyaW5nLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogVXBkYXRlIHF1b3RhIGxpbWl0cy4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuICovXG4gIHVwZGF0ZUxpbWl0cyhvcmdJZDogc3RyaW5nLCBsaW1pdHM6IFBhcnRpYWw8UmVjb3JkPFF1b3RhVHlwZSwgbnVtYmVyPj4sIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPjtcbiAgLyoqIFJlc2V0IHF1b3RhIHVzYWdlLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gKi9cbiAgcmVzZXQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlPzogUXVvdGFUeXBlLCBhdXRoSGVhZGVyPzogc3RyaW5nLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAvKipcbiAgICogR2V0IHRoZSBvcmcncyBxdW90YSB0aWVyICgnZGV2ZWxvcGVyJyB8ICdwcm8nIHwgJ3RlYW0nIHwgJ2VudGVycHJpc2UnKS4gVXNlZCBieVxuICAgKiB0aGUgcGx1Z2luLWJ1aWxkIHF1ZXVlIHBhcnRpdGlvbmluZyB0byByb3V0ZSBhIGJ1aWxkIHRvIHRoZVxuICAgKiByaWdodCBwZXItdGllciBxdWV1ZS4gRmFpbC1vcGVuIHJldHVybnMgREVGQVVMVF9USUVSICgnZGV2ZWxvcGVyJylcbiAgICogYSBtaXNjbGFzc2lmaWVkIHByby90ZWFtL2VudGVycHJpc2Ugb3JnIHdpbGwgbGFuZCBpbiB0aGUgZGV2ZWxvcGVyIHF1ZXVlXG4gICAqIGFuZCBzdGlsbCBidWlsZCwganVzdCB3aXRob3V0IHRoZSB0aWVyLXNjb3BlZCBzY2hlZHVsaW5nIGJvb3N0LlxuICAgKi9cbiAgZ2V0VGllcihvcmdJZDogc3RyaW5nLCBhdXRoSGVhZGVyOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8UXVvdGFUaWVyPjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBxdW90YSBzZXJ2aWNlIGNsaWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YVNlcnZpY2VDb25maWcge1xuICAvKiogUXVvdGEgc2VydmljZSBob3N0IChkZWZhdWx0OiBlbnYgUVVPVEFfU0VSVklDRV9IT1NUIG9yICdxdW90YScpICovXG4gIGhvc3Q/OiBzdHJpbmc7XG4gIC8qKiBRdW90YSBzZXJ2aWNlIHBvcnQgKGRlZmF1bHQ6IGVudiBRVU9UQV9TRVJWSUNFX1BPUlQgb3IgMzAwMCkgKi9cbiAgcG9ydD86IG51bWJlcjtcbiAgLyoqIFJlcXVlc3QgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IDUwMDApICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZmFpbC1vcGVuIHF1b3RhIHJlc3VsdCAoYWxsb3dzIHRoZSByZXF1ZXN0KS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmFpbE9wZW5SZXN1bHQoKTogUXVvdGFDaGVja1Jlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgYWxsb3dlZDogdHJ1ZSxcbiAgICBsaW1pdDogLTEsXG4gICAgdXNlZDogMCxcbiAgICByZW1haW5pbmc6IC0xLFxuICAgIHJlc2V0QXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB1bmxpbWl0ZWQ6IHRydWUsXG4gICAgLy8gVGFnIHRoZSBzZW50aW5lbCBzbyBmYWlsLWNsb3NlZCBjYWxsZXJzIGNhbiB0ZWxsIGFuIG91dGFnZSBhcGFydCBmcm9tIGFcbiAgICAvLyByZWFsIHVubGltaXRlZCAoLTEpIHJlYWRpbmcuIFJlYWwgcXVvdGEgcmVzdWx0cyBuZXZlciBzZXQgdGhpcy5cbiAgICBmYWlsT3BlbjogdHJ1ZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBjb21tb24gcmVxdWVzdCBoZWFkZXJzIHdpdGggb3B0aW9uYWwgcmVxdWVzdCBJRCBmb3IgZGlzdHJpYnV0ZWQgdHJhY2luZy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzKG9yZ0lkOiBzdHJpbmcsIGF1dGhIZWFkZXI/OiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyAneC1vcmctaWQnOiBvcmdJZCB9O1xuICBpZiAoYXV0aEhlYWRlcikgaGVhZGVycy5BdXRob3JpemF0aW9uID0gYXV0aEhlYWRlcjtcbiAgaWYgKHJlcXVlc3RJZCkgaGVhZGVyc1snWC1SZXF1ZXN0LUlkJ10gPSByZXF1ZXN0SWQ7XG4gIHJldHVybiBoZWFkZXJzO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHF1b3RhIHNlcnZpY2UgY2xpZW50LlxuICpcbiAqIEBwYXJhbSBjb25maWcgLSBPcHRpb25hbCBzZXJ2aWNlIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIFF1b3RhIHNlcnZpY2UgY2xpZW50XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHF1b3RhU2VydmljZSA9IGNyZWF0ZVF1b3RhU2VydmljZSgpO1xuICpcbiAqIC8vIENoZWNrIHF1b3RhIGJlZm9yZSBwcm9jZXNzaW5nXG4gKiBjb25zdCBxdW90YSA9IGF3YWl0IHF1b3RhU2VydmljZS5jaGVjayhvcmdJZCwgJ2FwaUNhbGxzJywgYXV0aEhlYWRlcik7XG4gKiBpZiAoIXF1b3RhLmFsbG93ZWQpIHtcbiAqIHJldHVybiByZXMuc3RhdHVzKDQyOSkuanNvbih7IGVycm9yOiAnUXVvdGEgZXhjZWVkZWQnIH0pO1xuICogfVxuICpcbiAqIC8vIEluY3JlbWVudCBxdW90YSBhZnRlciBzdWNjZXNzXG4gKiBxdW90YVNlcnZpY2UuaW5jcmVtZW50KG9yZ0lkLCAnYXBpQ2FsbHMnLCBhdXRoSGVhZGVyKS5jYXRjaChlcnIgPT4gbG9nZ2VyLndhcm4oJ1F1b3RhIGluY3JlbWVudCBmYWlsZWQnLCB7IGVycm9yOiBlcnIgfSkpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVRdW90YVNlcnZpY2UoY29uZmlnOiBRdW90YVNlcnZpY2VDb25maWcgPSB7fSk6IFF1b3RhU2VydmljZSB7XG4gIGNvbnN0IHNlcnZpY2VDb25maWc6IFNlcnZpY2VDb25maWcgPSB7XG4gICAgaG9zdDogY29uZmlnLmhvc3QgPz8gcHJvY2Vzcy5lbnYuUVVPVEFfU0VSVklDRV9IT1NUID8/ICdxdW90YScsXG4gICAgcG9ydDogY29uZmlnLnBvcnQgPz8gcGFyc2VJbnQocHJvY2Vzcy5lbnYuUVVPVEFfU0VSVklDRV9QT1JUID8/ICczMDAwJywgMTApLFxuICAgIHRpbWVvdXQ6IGNvbmZpZy50aW1lb3V0ID8/IDUwMDAsXG4gIH07XG5cbiAgY29uc3QgY2xpZW50ID0gY3JlYXRlU2FmZUNsaWVudChzZXJ2aWNlQ29uZmlnKTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGNoZWNrKG9yZ0lkOiBzdHJpbmcsIHF1b3RhVHlwZTogUXVvdGFUeXBlLCBhdXRoSGVhZGVyOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8UXVvdGFDaGVja1Jlc3VsdD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vJHtlbmNvZGVVUklDb21wb25lbnQocXVvdGFUeXBlKX1gO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8e1xuICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgICAgICBkYXRhPzogeyBxdW90YVR5cGU6IHN0cmluZzsgc3RhdHVzOiBRdW90YUNoZWNrUmVzdWx0IH07XG4gICAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICB9PihwYXRoLCB7IGhlYWRlcnM6IGJ1aWxkSGVhZGVycyhvcmdJZCwgYXV0aEhlYWRlciwgcmVxdWVzdElkKSwgLi4uUVVPVEFfUkVRVUVTVF9PUFRJT05TIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdRVU9UQV9GQUlMX09QRU46IFF1b3RhIHNlcnZpY2UgdW5yZWFjaGFibGUsIGFsbG93aW5nIHJlcXVlc3QnLCB7IG9yZ0lkLCBxdW90YVR5cGUgfSk7XG4gICAgICAgIGVtaXRDb3VudGVyKCdxdW90YV9mYWlsX29wZW5fdG90YWwnLCB7IG9wZXJhdGlvbjogJ2NoZWNrJywgcmVhc29uOiAndW5yZWFjaGFibGUnLCBxdW90YVR5cGUgfSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVGYWlsT3BlblJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwIHx8ICFyZXNwb25zZS5ib2R5LnN1Y2Nlc3MgfHwgIXJlc3BvbnNlLmJvZHkuZGF0YT8uc3RhdHVzKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdRVU9UQV9GQUlMX09QRU46IFF1b3RhIGNoZWNrIHJldHVybmVkIG5vbi1vaywgYWxsb3dpbmcgcmVxdWVzdCcsIHtcbiAgICAgICAgICBvcmdJZCwgcXVvdGFUeXBlLCBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlLCBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICBlbWl0Q291bnRlcigncXVvdGFfZmFpbF9vcGVuX3RvdGFsJywgeyBvcGVyYXRpb246ICdjaGVjaycsIHJlYXNvbjogJ25vbi1vaycsIHF1b3RhVHlwZSB9KTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZhaWxPcGVuUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNwb25zZS5ib2R5LmRhdGEuc3RhdHVzO1xuICAgIH0sXG5cbiAgICBhc3luYyBpbmNyZW1lbnQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50OiBudW1iZXIgPSAxLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBgL3F1b3Rhcy8ke2VuY29kZVVSSUNvbXBvbmVudChvcmdJZCl9L2luY3JlbWVudGA7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50XG4gICAgICAgIC5wb3N0KHBhdGgsIHsgcXVvdGFUeXBlLCBhbW91bnQgfSwgeyBoZWFkZXJzOiBidWlsZEhlYWRlcnMob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCksIC4uLlFVT1RBX1JFUVVFU1RfT1BUSU9OUyB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBpbmNyZW1lbnQgcXVvdGEnLCB7XG4gICAgICAgICAgb3JnSWQsIHF1b3RhVHlwZSwgYW1vdW50LCBzdGF0dXNDb2RlOiByZXNwb25zZT8uc3RhdHVzQ29kZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1F1b3RhIGluY3JlbWVudGVkJywgeyBvcmdJZCwgcXVvdGFUeXBlLCBhbW91bnQgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc2VydmUob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50OiBudW1iZXIgPSAxLCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPFF1b3RhUmVzZXJ2ZVJlc3VsdD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vaW5jcmVtZW50YDtcblxuICAgICAgLy8gMjAwIGNhcnJpZXMgYGRhdGEucXVvdGFgOyA0MjkgKFFVT1RBX0VYQ0VFREVEKSBjYXJyaWVzIGBkZXRhaWxzLnF1b3RhYC5cbiAgICAgIC8vIEJvdGggc2hhcGVzIGFyZSBub3JtYWxpemVkIGludG8gUXVvdGFSZXNlcnZlUmVzdWx0LlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDx7XG4gICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgICAgIGRhdGE/OiB7IHF1b3RhPzogUXVvdGFSZXNlcnZlUmVzdWx0WydxdW90YSddIH07XG4gICAgICAgIGRldGFpbHM/OiB7IHF1b3RhPzogUXVvdGFSZXNlcnZlUmVzdWx0WydxdW90YSddIH07XG4gICAgICAgIGVycm9yQ29kZT86IHN0cmluZztcbiAgICAgIH0+KHBhdGgsIHsgcXVvdGFUeXBlLCBhbW91bnQgfSwgeyBoZWFkZXJzOiBidWlsZEhlYWRlcnMob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCksIC4uLlFVT1RBX1JFUVVFU1RfT1BUSU9OUyB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICBsb2dnZXIud2FybignUVVPVEFfRkFJTF9PUEVOOiBRdW90YSBzZXJ2aWNlIHVucmVhY2hhYmxlIG9uIHJlc2VydmUsIGFsbG93aW5nIHJlcXVlc3QnLCB7IG9yZ0lkLCBxdW90YVR5cGUgfSk7XG4gICAgICAgIGVtaXRDb3VudGVyKCdxdW90YV9mYWlsX29wZW5fdG90YWwnLCB7IG9wZXJhdGlvbjogJ3Jlc2VydmUnLCByZWFzb246ICd1bnJlYWNoYWJsZScsIHF1b3RhVHlwZSB9KTtcbiAgICAgICAgcmV0dXJuIHsgZXhjZWVkZWQ6IGZhbHNlLCBxdW90YTogeyB0eXBlOiBxdW90YVR5cGUsIGxpbWl0OiAtMSwgdXNlZDogMCwgcmVtYWluaW5nOiAtMSB9IH07XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MjkpIHtcbiAgICAgICAgY29uc3QgcSA9IHJlc3BvbnNlLmJvZHkuZGV0YWlscz8ucXVvdGE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXhjZWVkZWQ6IHRydWUsXG4gICAgICAgICAgcXVvdGE6IHEgPz8geyB0eXBlOiBxdW90YVR5cGUsIGxpbWl0OiAwLCB1c2VkOiAwLCByZW1haW5pbmc6IDAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCB8fCAhcmVzcG9uc2UuYm9keS5zdWNjZXNzKSB7XG4gICAgICAgIGlmIChRVU9UQV9SRVNFUlZFX0ZBSUxfT1BFTikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdRVU9UQV9GQUlMX09QRU46IFF1b3RhIHJlc2VydmUgcmV0dXJuZWQgbm9uLW9rLCBhbGxvd2luZyByZXF1ZXN0Jywge1xuICAgICAgICAgICAgb3JnSWQsIHF1b3RhVHlwZSwgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlbWl0Q291bnRlcigncXVvdGFfZmFpbF9vcGVuX3RvdGFsJywgeyBvcGVyYXRpb246ICdyZXNlcnZlJywgcmVhc29uOiAnbm9uLW9rJywgcXVvdGFUeXBlIH0pO1xuICAgICAgICAgIHJldHVybiB7IGV4Y2VlZGVkOiBmYWxzZSwgcXVvdGE6IHsgdHlwZTogcXVvdGFUeXBlLCBsaW1pdDogLTEsIHVzZWQ6IDAsIHJlbWFpbmluZzogLTEgfSB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFNlcnZpY2UgcmVhY2hhYmxlIGJ1dCBkaWRuJ3QgY29uZmlybSB0aGUgcmVzZXJ2YXRpb24g4oaSIGZhaWwgQ0xPU0VELlxuICAgICAgICBsb2dnZXIud2FybignUVVPVEFfRkFJTF9DTE9TRUQ6IFF1b3RhIHJlc2VydmUgcmV0dXJuZWQgbm9uLW9rLCBkZW55aW5nIHJlcXVlc3QnLCB7XG4gICAgICAgICAgb3JnSWQsIHF1b3RhVHlwZSwgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGVtaXRDb3VudGVyKCdxdW90YV9mYWlsX2Nsb3NlZF90b3RhbCcsIHsgb3BlcmF0aW9uOiAncmVzZXJ2ZScsIHJlYXNvbjogJ25vbi1vaycsIHF1b3RhVHlwZSB9KTtcbiAgICAgICAgcmV0dXJuIHsgZXhjZWVkZWQ6IHRydWUsIHF1b3RhOiB7IHR5cGU6IHF1b3RhVHlwZSwgbGltaXQ6IDAsIHVzZWQ6IDAsIHJlbWFpbmluZzogMCB9IH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHEgPSByZXNwb25zZS5ib2R5LmRhdGE/LnF1b3RhO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXhjZWVkZWQ6IGZhbHNlLFxuICAgICAgICBxdW90YTogcSA/PyB7IHR5cGU6IHF1b3RhVHlwZSwgbGltaXQ6IC0xLCB1c2VkOiAwLCByZW1haW5pbmc6IC0xIH0sXG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBhc3luYyBkZWNyZW1lbnQob3JnSWQ6IHN0cmluZywgcXVvdGFUeXBlOiBRdW90YVR5cGUsIGF1dGhIZWFkZXI6IHN0cmluZywgYW1vdW50OiBudW1iZXIgPSAxLCByZXNldEF0U25hcHNob3Q/OiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vZGVjcmVtZW50YDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50XG4gICAgICAgIC5wb3N0KHBhdGgsIHsgcXVvdGFUeXBlLCBhbW91bnQsIC4uLihyZXNldEF0U25hcHNob3QgJiYgeyByZXNldEF0U25hcHNob3QgfSkgfSwgeyBoZWFkZXJzOiBidWlsZEhlYWRlcnMob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCksIC4uLlFVT1RBX1JFUVVFU1RfT1BUSU9OUyB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgLy8gUm9sbGJhY2sgZmFpbHVyZSBpcyBsb2dnZWQgYnV0IG5ldmVyIHByb3BhZ2F0ZWQgIHRoZSBhY3Rpb24ncyBvd25cbiAgICAgICAgLy8gZmFpbHVyZSBoYXMgYWxyZWFkeSBiZWVuIHN1cmZhY2VkIHRvIHRoZSBjYWxsZXI7IGEgc3R1Y2sgY291bnRlclxuICAgICAgICAvLyByZXNvbHZlcyBvbiB0aGUgbmV4dCBwZXJpb2QgcmVzZXQuXG4gICAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gZGVjcmVtZW50IHF1b3RhIChzbG90IHdpbGwgcmVzZXQgb24gbmV4dCBwZXJpb2QpJywge1xuICAgICAgICAgIG9yZ0lkLCBxdW90YVR5cGUsIGFtb3VudCwgc3RhdHVzQ29kZTogcmVzcG9uc2U/LnN0YXR1c0NvZGUsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdRdW90YSBkZWNyZW1lbnRlZCcsIHsgb3JnSWQsIHF1b3RhVHlwZSwgYW1vdW50IH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVMaW1pdHMoIG9yZ0lkOiBzdHJpbmcsXG4gICAgICBsaW1pdHM6IFBhcnRpYWw8UmVjb3JkPFF1b3RhVHlwZSwgbnVtYmVyPj4sXG4gICAgICBhdXRoSGVhZGVyOiBzdHJpbmcsXG4gICAgICByZXF1ZXN0SWQ/OiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICBjb25zdCBwYXRoID0gYC9xdW90YXMvJHtlbmNvZGVVUklDb21wb25lbnQob3JnSWQpfWA7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnB1dChwYXRoLCBsaW1pdHMsIHsgaGVhZGVyczogYnVpbGRIZWFkZXJzKG9yZ0lkLCBhdXRoSGVhZGVyLCByZXF1ZXN0SWQpIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIHVwZGF0ZSBxdW90YSBsaW1pdHMnLCB7XG4gICAgICAgICAgb3JnSWQsIGxpbWl0cywgc3RhdHVzQ29kZTogcmVzcG9uc2U/LnN0YXR1c0NvZGUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5pbmZvKCdRdW90YSBsaW1pdHMgdXBkYXRlZCcsIHsgb3JnSWQsIGxpbWl0cyB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaWVyKG9yZ0lkOiBzdHJpbmcsIGF1dGhIZWFkZXI6IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxRdW90YVRpZXI+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBgL3F1b3Rhcy8ke2VuY29kZVVSSUNvbXBvbmVudChvcmdJZCl9YDtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PHtcbiAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgZGF0YT86IHsgcXVvdGE/OiB7IHRpZXI/OiBzdHJpbmcgfSB9O1xuICAgICAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgICAgfT4ocGF0aCwgeyBoZWFkZXJzOiBidWlsZEhlYWRlcnMob3JnSWQsIGF1dGhIZWFkZXIsIHJlcXVlc3RJZCksIC4uLlFVT1RBX1JFUVVFU1RfT1BUSU9OUyB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZSB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDAgfHwgIXJlc3BvbnNlLmJvZHkuc3VjY2Vzcykge1xuICAgICAgICBsb2dnZXIud2FybignUVVPVEFfRkFJTF9PUEVOOiB0aWVyIGxvb2t1cCBmYWlsZWQsIGRlZmF1bHRpbmcgdG8gZGV2ZWxvcGVyIHRpZXInLCB7XG4gICAgICAgICAgb3JnSWQsIHN0YXR1c0NvZGU6IHJlc3BvbnNlPy5zdGF0dXNDb2RlLFxuICAgICAgICB9KTtcbiAgICAgICAgZW1pdENvdW50ZXIoJ3F1b3RhX2ZhaWxfb3Blbl90b3RhbCcsIHsgb3BlcmF0aW9uOiAndGllcicsIHJlYXNvbjogcmVzcG9uc2UgPyAnbm9uLW9rJyA6ICd1bnJlYWNoYWJsZScsIHF1b3RhVHlwZTogJ3RpZXInIH0pO1xuICAgICAgICByZXR1cm4gREVGQVVMVF9USUVSO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0aWVyID0gcmVzcG9uc2UuYm9keS5kYXRhPy5xdW90YT8udGllcjtcbiAgICAgIHJldHVybiB0aWVyICYmIGlzVmFsaWRUaWVyKHRpZXIpID8gdGllcjogREVGQVVMVF9USUVSO1xuICAgIH0sXG5cbiAgICBhc3luYyByZXNldChvcmdJZDogc3RyaW5nLCBxdW90YVR5cGU/OiBRdW90YVR5cGUsIGF1dGhIZWFkZXI/OiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgY29uc3QgcGF0aCA9IGAvcXVvdGFzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vcmVzZXRgO1xuXG4gICAgICBjb25zdCBib2R5ID0gcXVvdGFUeXBlID8geyBxdW90YVR5cGUgfToge307XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0KHBhdGgsIGJvZHksIHsgaGVhZGVyczogYnVpbGRIZWFkZXJzKG9yZ0lkLCBhdXRoSGVhZGVyID8/ICcnLCByZXF1ZXN0SWQpIH0pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIHJlc2V0IHF1b3RhJywge1xuICAgICAgICAgIG9yZ0lkLCBxdW90YVR5cGUsIHN0YXR1c0NvZGU6IHJlc3BvbnNlPy5zdGF0dXNDb2RlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuaW5mbygnUXVvdGEgcmVzZXQnLCB7IG9yZ0lkLCBxdW90YVR5cGU6IHF1b3RhVHlwZSA/PyAnYWxsJyB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogRmlyZS1hbmQtZm9yZ2V0IHF1b3RhIGluY3JlbWVudCB3aXRoIHN0YW5kYXJkaXplZCBlcnJvciBsb2dnaW5nLlxuICpcbiAqIFdyYXBzIGBxdW90YVNlcnZpY2UuaW5jcmVtZW50KClgIHdpdGggYSBgLmNhdGNoKClgIHRoYXQgbG9ncyBhIHdhcm5pbmcuXG4gKiBFbGltaW5hdGVzIHRoZSBpZGVudGljYWwgb25lLWxpbmVyIHJlcGVhdGVkIGFjcm9zcyBldmVyeSByZWFkIHJvdXRlLlxuICpcbiAqIEBwYXJhbSBxdW90YVNlcnZpY2UgLSBRdW90YSBzZXJ2aWNlIGNsaWVudFxuICogQHBhcmFtIG9yZ0lkIC0gT3JnYW5pemF0aW9uIElEXG4gKiBAcGFyYW0gcXVvdGFUeXBlIC0gUXVvdGEgdHlwZSB0byBpbmNyZW1lbnRcbiAqIEBwYXJhbSBhdXRoSGVhZGVyIC0gQXV0aG9yaXphdGlvbiBoZWFkZXIgdmFsdWVcbiAqIEBwYXJhbSBsb2dXYXJuIC0gTG9nZ2luZyBmdW5jdGlvbiBmb3Igd2FybmluZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluY3JlbWVudFF1b3RhKCBxdW90YVNlcnZpY2U6IFF1b3RhU2VydmljZSxcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcXVvdGFUeXBlOiBRdW90YVR5cGUsXG4gIGF1dGhIZWFkZXI6IHN0cmluZyxcbiAgbG9nV2FybjogKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IHZvaWQsXG4pOiB2b2lkIHtcbiAgcXVvdGFTZXJ2aWNlLmluY3JlbWVudChvcmdJZCwgcXVvdGFUeXBlLCBhdXRoSGVhZGVyKS5jYXRjaCgoZXJyOiB1bmtub3duKSA9PlxuICAgIGxvZ1dhcm4oJ1F1b3RhIGluY3JlbWVudCBmYWlsZWQnLCB7IGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlOiBTdHJpbmcoZXJyKSB9KSxcbiAgKTtcbn1cblxuLyoqXG4gKiBBdG9taWMgcmVzZXJ2ZSBoZWxwZXIgZm9yIHRoZSBcInJlc2VydmUgKyBjb21taXQgLyByb2xsYmFja1wiIHBhdHRlcm4uXG4gKiBVc2UgZm9yIGV4cGVuc2l2ZSByZXNvdXJjZXMgKHBpcGVsaW5lcywgcGx1Z2lucywgQUkgY2FsbHMpIHdoZXJlIHRoZVxuICogZmlyZS1hbmQtZm9yZ2V0IHBvc3QtaG9jIGBpbmNyZW1lbnRRdW90YWAgYWxsb3dzIGNvbmN1cnJlbnQgb3Zlci1zcGVuZC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBzdHJ1Y3R1cmVkIHJlc3VsdCBzbyB0aGUgY2FsbGVyIGNhbiBkZWNpZGUgd2hldGhlciB0byBydW5cbiAqIHRoZSBnYXRlZCBhY3Rpb24gb3IgNDI5IHRoZSBjbGllbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc2VydmF0aW9uID0gYXdhaXQgcmVzZXJ2ZVF1b3RhKHF1b3RhU2VydmljZSwgb3JnSWQsICdwaXBlbGluZXMnLCBhdXRoSGVhZGVyKTtcbiAqIGlmIChyZXNlcnZhdGlvbi5leGNlZWRlZCkgcmV0dXJuIHNlbmRRdW90YUV4Y2VlZGVkKHJlcywgJ3BpcGVsaW5lcycsIHJlc2VydmF0aW9uLnF1b3RhKTtcbiAqIHRyeSB7XG4gKiBhd2FpdCBkb0V4cGVuc2l2ZVRoaW5nKCk7XG4gKiB9IGNhdGNoIChlcnIpIHtcbiAqIC8vIFBhc3MgdGhlIHJlc2VydmVkIHJlc2V0QXQgc28gYSBwZXJpb2Qgcm9sbG92ZXIgZG9lc24ndCBnZXQgZG91YmxlLWNoYXJnZWQuXG4gKiBkZWNyZW1lbnRRdW90YShxdW90YVNlcnZpY2UsIG9yZ0lkLCAncGlwZWxpbmVzJywgYXV0aEhlYWRlciwgbG9nV2FybiwgMSwgcmVzZXJ2YXRpb24ucXVvdGEucmVzZXRBdCk7XG4gKiB0aHJvdyBlcnI7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2VydmVRdW90YSggcXVvdGFTZXJ2aWNlOiBRdW90YVNlcnZpY2UsXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIHF1b3RhVHlwZTogUXVvdGFUeXBlLFxuICBhdXRoSGVhZGVyOiBzdHJpbmcsXG4gIGFtb3VudDogbnVtYmVyID0gMSxcbiAgcmVxdWVzdElkPzogc3RyaW5nLFxuKTogUHJvbWlzZTxRdW90YVJlc2VydmVSZXN1bHQ+IHtcbiAgcmV0dXJuIHF1b3RhU2VydmljZS5yZXNlcnZlKG9yZ0lkLCBxdW90YVR5cGUsIGF1dGhIZWFkZXIsIGFtb3VudCwgcmVxdWVzdElkKTtcbn1cblxuLyoqXG4gKiBGaXJlLWFuZC1mb3JnZXQgcm9sbGJhY2sgZm9yIGEgcHJldmlvdXNseSByZXNlcnZlZCBxdW90YSBzbG90LlxuICogTG9ncyBvbiBmYWlsdXJlIGJ1dCBuZXZlciB0aHJvd3MgIHRoZSBhY3Rpb24gdGhhdCBuZWVkZWQgdGhlIHJvbGxiYWNrXG4gKiBoYXMgYWxyZWFkeSBmYWlsZWQsIG5vIHBvaW50IGNvbXBvdW5kaW5nIHRoZSBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY3JlbWVudFF1b3RhKCBxdW90YVNlcnZpY2U6IFF1b3RhU2VydmljZSxcbiAgb3JnSWQ6IHN0cmluZyxcbiAgcXVvdGFUeXBlOiBRdW90YVR5cGUsXG4gIGF1dGhIZWFkZXI6IHN0cmluZyxcbiAgbG9nV2FybjogKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IHZvaWQsXG4gIGFtb3VudDogbnVtYmVyID0gMSxcbiAgcmVzZXRBdFNuYXBzaG90Pzogc3RyaW5nLFxuKTogdm9pZCB7XG4gIHF1b3RhU2VydmljZS5kZWNyZW1lbnQob3JnSWQsIHF1b3RhVHlwZSwgYXV0aEhlYWRlciwgYW1vdW50LCByZXNldEF0U25hcHNob3QpLmNhdGNoKChlcnI6IHVua25vd24pID0+XG4gICAgbG9nV2FybignUXVvdGEgcm9sbGJhY2sgZmFpbGVkJywgeyBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZTogU3RyaW5nKGVycikgfSksXG4gICk7XG59XG4iXX0=
@@ -50,5 +50,20 @@ export interface RegistryTagDeleteAudit extends AuditCorrelation {
50
50
  ref: string;
51
51
  digest: string;
52
52
  }
53
+ /**
54
+ * Repository prune emitted from image-registry's DELETE /api/images/:name —
55
+ * deletes every manifest in a repo (used to remove empty/dead repos from the
56
+ * catalog). Unlike the tag-delete above, there's no single `ref`/`digest`:
57
+ * the counts summarize the whole repo.
58
+ */
59
+ export interface RegistryRepoDeleteAudit extends AuditCorrelation {
60
+ event: 'registry.repo.delete';
61
+ actor: string;
62
+ repo: string;
63
+ /** Count of unique manifest digests actually deleted. */
64
+ deletedManifests: number;
65
+ /** Count of tags the repo held before the prune. */
66
+ deletedTags: number;
67
+ }
53
68
  /** Union of every cross-service audit event currently emitted. */
54
- export type AuditEvent = RegistryTagCopyAudit | RegistryTagDeleteAudit;
69
+ export type AuditEvent = RegistryTagCopyAudit | RegistryTagDeleteAudit | RegistryRepoDeleteAudit;
@@ -1,4 +1,4 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  export {};
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2F1ZGl0LWV2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogQ3Jvc3Mtc2VydmljZSBhdWRpdCBldmVudHMgZW1pdHRlZCB2aWEgc3RydWN0dXJlZCBsb2dzLlxuICpcbiAqIFBsYXRmb3JtJ3Mgb3duIGF1ZGl0IGV2ZW50cyAodXNlci5sb2dpbiwgb3JnLmNyZWF0ZSwg4oCmKSBsaXZlIGluIE1vbmdvREJcbiAqIHZpYSB0aGUgQXVkaXRFdmVudCBtb2RlbCDigJQgdGhhdCdzIGEgc2VwYXJhdGUgcGVyc2lzdGVuY2UgcGF0aCBzY29wZWQgdG9cbiAqIHRoZSBwbGF0Zm9ybSBzZXJ2aWNlLiBUaGUgZXZlbnRzIGJlbG93IGFyZSBlbWl0dGVkIGJ5IG90aGVyIHNlcnZpY2VzXG4gKiAoaW1hZ2UtcmVnaXN0cnksIGV0Yy4pIHZpYSB0aGUgYGVtaXRBdWRpdGAgaGVscGVyIGFzIHN0cnVjdHVyZWQgbG9nXG4gKiBsaW5lcyB3aXRoIGBldmVudENhdGVnb3J5OiAnYXVkaXQnYCwgc2NyYXBlZCBieSBMb2tpIGZvciBxdWVyeWFibGVcbiAqIGF1ZGl0IGhpc3RvcnkuXG4gKlxuICogQWRkIGEgbmV3IGV2ZW50OlxuICogICAxLiBFeHRlbmQgdGhlIHVuaW9uIHR5cGUgYmVsb3cuXG4gKiAgIDIuIERvY3VtZW50IGl0IGluIGBkb2NzL2F1ZGl0LWV2ZW50cy5tZGAgKG9yIHdoZXJldmVyIHRoZSBhdWRpdC1ldmVudHNcbiAqICAgICAgZG9jIGxpdmVzKSBpbmNsdWRpbmcgYW55IHBheWxvYWQtc3BlY2lmaWMgZmllbGRzLlxuICogICAzLiBFbWl0IHZpYSBgZW1pdEF1ZGl0KGxvZ2dlciwgJ2V2ZW50Lm5hbWUnLCB7IOKApiB9KWAgZnJvbSB0aGUgcm91dGUuXG4gKi9cblxuLyoqXG4gKiBDb3JyZWxhdGlvbiBjb250ZXh0IHNoYXJlZCBieSBldmVyeSBjcm9zcy1zZXJ2aWNlIGF1ZGl0IGV2ZW50LiBPcHRpb25hbCBzb1xuICogZXhpc3RpbmcgZW1pdCBzaXRlcyBjb21waWxlIHVuY2hhbmdlZDsgd2hlbiBwb3B1bGF0ZWQsIHRoZXNlIGxldCBhbiBvcGVyYXRvclxuICogcGl2b3QgYSBMb2tpIGF1ZGl0IGxpbmUgdG8gdGhlIG9yaWdpbmF0aW5nIEhUVFAgcmVxdWVzdCAoYHJlcXVlc3RJZGApIG9yIHRoZVxuICogZW5kLXRvLWVuZCBkaXN0cmlidXRlZCB0cmFjZSAoYHRyYWNlSWRgKSDigJQgYW5kIGxpbmUgdGhlbSB1cCB3aXRoIHBsYXRmb3JtJ3NcbiAqIE1vbmdvREIgYXVkaXQgZXZlbnRzLCB3aGljaCBjYXJyeSB0aGUgc2FtZSB0d28gZmllbGRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0Q29ycmVsYXRpb24ge1xuICAvKiogT3JpZ2luYXRpbmcgcmVxdWVzdCBpZCAocHJvcGFnYXRlZCBgeC1yZXF1ZXN0LWlkYCkuICovXG4gIHJlcXVlc3RJZD86IHN0cmluZztcbiAgLyoqIE9wZW5UZWxlbWV0cnkgdHJhY2UgaWQgb2YgdGhlIGFjdGl2ZSBzcGFuLCB3aGVuIHRyYWNpbmcgaXMgZW5hYmxlZC4gKi9cbiAgdHJhY2VJZD86IHN0cmluZztcbn1cblxuLyoqIFRhZy1jb3B5IGVtaXR0ZWQgZnJvbSBpbWFnZS1yZWdpc3RyeSdzIFBPU1QgL2FwaS9pbWFnZXMvY29weS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cnlUYWdDb3B5QXVkaXQgZXh0ZW5kcyBBdWRpdENvcnJlbGF0aW9uIHtcbiAgZXZlbnQ6ICdyZWdpc3RyeS50YWcuY29weSc7XG4gIGFjdG9yOiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB0YXJnZXQ6IHN0cmluZztcbiAgc291cmNlRGlnZXN0OiBzdHJpbmc7XG4gIHRhcmdldERpZ2VzdDogc3RyaW5nO1xuICAvKiogVHJ1ZSB3aGVuIHRhcmdldCdzIHJlcG8gc3RhcnRzIHdpdGggYHN5c3RlbS9gIOKAlCB0aGUgaGlnaGVzdC1wcml2aWxlZ2UgY2FzZS4gKi9cbiAgaXNQcm9tb3Rpb25Ub1N5c3RlbTogYm9vbGVhbjtcbiAgbW91bnRlZDogeyBtYW5pZmVzdHM6IG51bWJlcjsgYmxvYnM6IG51bWJlciB9O1xufVxuXG4vKiogVGFnLWRlbGV0ZSBlbWl0dGVkIGZyb20gaW1hZ2UtcmVnaXN0cnkncyBERUxFVEUgL2FwaS9pbWFnZXMvOm5hbWUvbWFuaWZlc3RzLzpyZWZlcmVuY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJ5VGFnRGVsZXRlQXVkaXQgZXh0ZW5kcyBBdWRpdENvcnJlbGF0aW9uIHtcbiAgZXZlbnQ6ICdyZWdpc3RyeS50YWcuZGVsZXRlJztcbiAgYWN0b3I6IHN0cmluZztcbiAgcmVwbzogc3RyaW5nO1xuICByZWY6IHN0cmluZztcbiAgZGlnZXN0OiBzdHJpbmc7XG59XG5cbi8qKiBVbmlvbiBvZiBldmVyeSBjcm9zcy1zZXJ2aWNlIGF1ZGl0IGV2ZW50IGN1cnJlbnRseSBlbWl0dGVkLiAqL1xuZXhwb3J0IHR5cGUgQXVkaXRFdmVudCA9IFJlZ2lzdHJ5VGFnQ29weUF1ZGl0IHwgUmVnaXN0cnlUYWdEZWxldGVBdWRpdDtcbiJdfQ==
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2F1ZGl0LWV2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogQ3Jvc3Mtc2VydmljZSBhdWRpdCBldmVudHMgZW1pdHRlZCB2aWEgc3RydWN0dXJlZCBsb2dzLlxuICpcbiAqIFBsYXRmb3JtJ3Mgb3duIGF1ZGl0IGV2ZW50cyAodXNlci5sb2dpbiwgb3JnLmNyZWF0ZSwg4oCmKSBsaXZlIGluIE1vbmdvREJcbiAqIHZpYSB0aGUgQXVkaXRFdmVudCBtb2RlbCDigJQgdGhhdCdzIGEgc2VwYXJhdGUgcGVyc2lzdGVuY2UgcGF0aCBzY29wZWQgdG9cbiAqIHRoZSBwbGF0Zm9ybSBzZXJ2aWNlLiBUaGUgZXZlbnRzIGJlbG93IGFyZSBlbWl0dGVkIGJ5IG90aGVyIHNlcnZpY2VzXG4gKiAoaW1hZ2UtcmVnaXN0cnksIGV0Yy4pIHZpYSB0aGUgYGVtaXRBdWRpdGAgaGVscGVyIGFzIHN0cnVjdHVyZWQgbG9nXG4gKiBsaW5lcyB3aXRoIGBldmVudENhdGVnb3J5OiAnYXVkaXQnYCwgc2NyYXBlZCBieSBMb2tpIGZvciBxdWVyeWFibGVcbiAqIGF1ZGl0IGhpc3RvcnkuXG4gKlxuICogQWRkIGEgbmV3IGV2ZW50OlxuICogICAxLiBFeHRlbmQgdGhlIHVuaW9uIHR5cGUgYmVsb3cuXG4gKiAgIDIuIERvY3VtZW50IGl0IGluIGBkb2NzL2F1ZGl0LWV2ZW50cy5tZGAgKG9yIHdoZXJldmVyIHRoZSBhdWRpdC1ldmVudHNcbiAqICAgICAgZG9jIGxpdmVzKSBpbmNsdWRpbmcgYW55IHBheWxvYWQtc3BlY2lmaWMgZmllbGRzLlxuICogICAzLiBFbWl0IHZpYSBgZW1pdEF1ZGl0KGxvZ2dlciwgJ2V2ZW50Lm5hbWUnLCB7IOKApiB9KWAgZnJvbSB0aGUgcm91dGUuXG4gKi9cblxuLyoqXG4gKiBDb3JyZWxhdGlvbiBjb250ZXh0IHNoYXJlZCBieSBldmVyeSBjcm9zcy1zZXJ2aWNlIGF1ZGl0IGV2ZW50LiBPcHRpb25hbCBzb1xuICogZXhpc3RpbmcgZW1pdCBzaXRlcyBjb21waWxlIHVuY2hhbmdlZDsgd2hlbiBwb3B1bGF0ZWQsIHRoZXNlIGxldCBhbiBvcGVyYXRvclxuICogcGl2b3QgYSBMb2tpIGF1ZGl0IGxpbmUgdG8gdGhlIG9yaWdpbmF0aW5nIEhUVFAgcmVxdWVzdCAoYHJlcXVlc3RJZGApIG9yIHRoZVxuICogZW5kLXRvLWVuZCBkaXN0cmlidXRlZCB0cmFjZSAoYHRyYWNlSWRgKSDigJQgYW5kIGxpbmUgdGhlbSB1cCB3aXRoIHBsYXRmb3JtJ3NcbiAqIE1vbmdvREIgYXVkaXQgZXZlbnRzLCB3aGljaCBjYXJyeSB0aGUgc2FtZSB0d28gZmllbGRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0Q29ycmVsYXRpb24ge1xuICAvKiogT3JpZ2luYXRpbmcgcmVxdWVzdCBpZCAocHJvcGFnYXRlZCBgeC1yZXF1ZXN0LWlkYCkuICovXG4gIHJlcXVlc3RJZD86IHN0cmluZztcbiAgLyoqIE9wZW5UZWxlbWV0cnkgdHJhY2UgaWQgb2YgdGhlIGFjdGl2ZSBzcGFuLCB3aGVuIHRyYWNpbmcgaXMgZW5hYmxlZC4gKi9cbiAgdHJhY2VJZD86IHN0cmluZztcbn1cblxuLyoqIFRhZy1jb3B5IGVtaXR0ZWQgZnJvbSBpbWFnZS1yZWdpc3RyeSdzIFBPU1QgL2FwaS9pbWFnZXMvY29weS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cnlUYWdDb3B5QXVkaXQgZXh0ZW5kcyBBdWRpdENvcnJlbGF0aW9uIHtcbiAgZXZlbnQ6ICdyZWdpc3RyeS50YWcuY29weSc7XG4gIGFjdG9yOiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB0YXJnZXQ6IHN0cmluZztcbiAgc291cmNlRGlnZXN0OiBzdHJpbmc7XG4gIHRhcmdldERpZ2VzdDogc3RyaW5nO1xuICAvKiogVHJ1ZSB3aGVuIHRhcmdldCdzIHJlcG8gc3RhcnRzIHdpdGggYHN5c3RlbS9gIOKAlCB0aGUgaGlnaGVzdC1wcml2aWxlZ2UgY2FzZS4gKi9cbiAgaXNQcm9tb3Rpb25Ub1N5c3RlbTogYm9vbGVhbjtcbiAgbW91bnRlZDogeyBtYW5pZmVzdHM6IG51bWJlcjsgYmxvYnM6IG51bWJlciB9O1xufVxuXG4vKiogVGFnLWRlbGV0ZSBlbWl0dGVkIGZyb20gaW1hZ2UtcmVnaXN0cnkncyBERUxFVEUgL2FwaS9pbWFnZXMvOm5hbWUvbWFuaWZlc3RzLzpyZWZlcmVuY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJ5VGFnRGVsZXRlQXVkaXQgZXh0ZW5kcyBBdWRpdENvcnJlbGF0aW9uIHtcbiAgZXZlbnQ6ICdyZWdpc3RyeS50YWcuZGVsZXRlJztcbiAgYWN0b3I6IHN0cmluZztcbiAgcmVwbzogc3RyaW5nO1xuICByZWY6IHN0cmluZztcbiAgZGlnZXN0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwb3NpdG9yeSBwcnVuZSBlbWl0dGVkIGZyb20gaW1hZ2UtcmVnaXN0cnkncyBERUxFVEUgL2FwaS9pbWFnZXMvOm5hbWUg4oCUXG4gKiBkZWxldGVzIGV2ZXJ5IG1hbmlmZXN0IGluIGEgcmVwbyAodXNlZCB0byByZW1vdmUgZW1wdHkvZGVhZCByZXBvcyBmcm9tIHRoZVxuICogY2F0YWxvZykuIFVubGlrZSB0aGUgdGFnLWRlbGV0ZSBhYm92ZSwgdGhlcmUncyBubyBzaW5nbGUgYHJlZmAvYGRpZ2VzdGA6XG4gKiB0aGUgY291bnRzIHN1bW1hcml6ZSB0aGUgd2hvbGUgcmVwby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyeVJlcG9EZWxldGVBdWRpdCBleHRlbmRzIEF1ZGl0Q29ycmVsYXRpb24ge1xuICBldmVudDogJ3JlZ2lzdHJ5LnJlcG8uZGVsZXRlJztcbiAgYWN0b3I6IHN0cmluZztcbiAgcmVwbzogc3RyaW5nO1xuICAvKiogQ291bnQgb2YgdW5pcXVlIG1hbmlmZXN0IGRpZ2VzdHMgYWN0dWFsbHkgZGVsZXRlZC4gKi9cbiAgZGVsZXRlZE1hbmlmZXN0czogbnVtYmVyO1xuICAvKiogQ291bnQgb2YgdGFncyB0aGUgcmVwbyBoZWxkIGJlZm9yZSB0aGUgcHJ1bmUuICovXG4gIGRlbGV0ZWRUYWdzOiBudW1iZXI7XG59XG5cbi8qKiBVbmlvbiBvZiBldmVyeSBjcm9zcy1zZXJ2aWNlIGF1ZGl0IGV2ZW50IGN1cnJlbnRseSBlbWl0dGVkLiAqL1xuZXhwb3J0IHR5cGUgQXVkaXRFdmVudCA9IFJlZ2lzdHJ5VGFnQ29weUF1ZGl0IHwgUmVnaXN0cnlUYWdEZWxldGVBdWRpdCB8IFJlZ2lzdHJ5UmVwb0RlbGV0ZUF1ZGl0O1xuIl19
@@ -74,6 +74,13 @@ export interface QuotaCheckResult {
74
74
  resetAt: string;
75
75
  /** Whether quota is unlimited */
76
76
  unlimited: boolean;
77
+ /**
78
+ * True ONLY when this result is the fail-open sentinel returned because the
79
+ * quota service was unreachable / returned non-ok (not a real quota reading).
80
+ * Lets fail-closed callers (e.g. the registry storage push-gate) distinguish
81
+ * an outage from a genuine `limit: -1` (unlimited) org. Absent on real results.
82
+ */
83
+ failOpen?: boolean;
77
84
  }
78
85
  /**
79
86
  * Quota information for error responses.
@@ -140,10 +147,17 @@ export interface JwtPayload {
140
147
  * during the rollout; new users should be granted via `isSuperAdmin`.
141
148
  */
142
149
  isSuperAdmin?: boolean;
143
- /** Organization's quota tier ('developer' | 'pro' | 'unlimited') */
150
+ /** Organization's quota tier ('developer' | 'pro' | 'team' | 'enterprise') */
144
151
  tier?: string;
145
152
  /** Resolved feature flags for this user/org */
146
153
  features?: string[];
154
+ /**
155
+ * Narrow capability scope for machine/automation tokens (e.g.
156
+ * `'reporting:ingest'`). Absent on normal interactive user tokens. Endpoints
157
+ * that accept a scoped identity check this (see `hasScope`) instead of role;
158
+ * a scoped token is minted with minimal role for least-privilege.
159
+ */
160
+ scope?: string;
147
161
  /** Active organization ID (from UserOrganization membership) */
148
162
  organizationId?: string;
149
163
  /** Active organization name */
@@ -48,4 +48,4 @@ export function validateQuotaType(value, fieldName = 'quotaType') {
48
48
  }
49
49
  return value;
50
50
  }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBMkJ0Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHO0lBQy9CLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxjQUFjO0lBQzdELFlBQVksRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsWUFBWTtDQUNyRCxDQUFDO0FBRVg7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWM7SUFDN0MsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLEtBQWtCLENBQUMsQ0FBQztBQUNyRixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFjLEVBQUUsU0FBUyxHQUFHLFdBQVc7SUFDdkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDYixXQUFXLFNBQVMsTUFBTSxLQUFLLHNCQUFzQixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDcEYsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBRdW90YSB0eXBlIGlkZW50aWZpZXJzLlxuICpcbiAqIC0gYHBsdWdpbnNgIC8gYHBpcGVsaW5lc2Ag4oCUIGNvdW50IG9mIGNyZWF0ZWQgZW50aXRpZXNcbiAqIC0gYGFwaUNhbGxzYCDigJQgZ2VuZXJpYyBBUEkgY2FsbCBjb3VudCAocmVhZC1oZWF2eSBwYXRocylcbiAqIC0gYGFpQ2FsbHNgIOKAlCBBSSBwcm92aWRlciBpbnZvY2F0aW9ucyAoY291bnRlZCBzZXBhcmF0ZWx5IGJlY2F1c2UgZWFjaCBjYWxsXG4gKiAgIGhhcyBleHRlcm5hbCBkb2xsYXIgY29zdDsgc2l6ZWQgc21hbGxlciB0aGFuIGFwaUNhbGxzIHBlciB0aWVyKVxuICogLSBgc3RvcmFnZUJ5dGVzYCDigJQgcmVnaXN0cnkgc3RvcmFnZSBidWRnZXQgcGVyIG9yZy4gVW5saWtlIHRoZSBvdGhlcnNcbiAqICAgKHdoaWNoIGNvdW50IGRpc2NyZXRlIGV2ZW50cyksIHRoaXMgaXMgYSBtZWFzdXJlZCB0b3RhbCByZWNvbXB1dGVkXG4gKiAgIG9uIGRlbWFuZC4gSW5jcmVtZW50ZWQgYnkgdGhlIGltYWdlLXJlZ2lzdHJ5J3MgcHVzaC1nYXRlIGJlZm9yZVxuICogICBpc3N1aW5nIGEgdG9rZW4gd2hvc2Ugc2NvcGUgaW5jbHVkZXMgYHB1c2hgOyB0aGUgR0Mgc2NoZWR1bGVyXG4gKiAgIGV2ZW50dWFsbHkgZnJlZXMgdGhlIGJ5dGVzLCB0aGVuIHRoZSBuZXh0IHB1c2gtZ2F0ZSBjaGVjayByZWFkc1xuICogICB0aGUgbG93ZXIgdmFsdWUuIE5PVCBhIGNvdW50ZXItc3R5bGUgcXVvdGEgaW4gdGhlIHNlbnNlIG9mXG4gKiAgIGBpbmNyZW1lbnRVc2FnZWAg4oCUIHRoZSByZWdpc3RyeSBwdXNoZXMgdGhlIG1lYXN1cmVkIHRvdGFsIHZpYVxuICogICBgdXBkYXRlTGltaXRzYC9gcmVzZXRVc2FnZWAgZmxvd3MuIFRpZXIgbGltaXRzIGFyZSBieXRlcy5cbiAqIC0gYGRhc2hib2FyZHNgIC8gYGFsZXJ0UnVsZXNgIC8gYGFsZXJ0RGVzdGluYXRpb25zYCAvIGBpZHBDb25maWdzYCDigJRcbiAqICAgcmVzb3VyY2UtY291bnQgcXVvdGFzIGFkZGVkIHRvIGNsb3NlIHBlci1vcmcgRG9TIHN1cmZhY2VzIGluIHRoZVxuICogICB1c2VyLWVkaXRhYmxlIGZlYXR1cmUgdGFibGVzLiBXaXRob3V0IHRoZXNlIGNhcHMgYSBzaW5nbGUgb3JnIGNvdWxkXG4gKiAgIHNwYW0gdGhvdXNhbmRzIG9mIGRhc2hib2FyZHMgLyBydWxlcyBhbmQgYmxvYXQgdGhlIHNoYXJlZCBQb3N0Z3JlcyAvXG4gKiAgIE1vbmdvIHdvcmtpbmcgc2V0cy4gQ291bnRlZCBhdCBjcmVhdGUgdGltZTsgZGVjcmVtZW50ZWQgb24gZGVsZXRlLlxuICovXG5leHBvcnQgdHlwZSBRdW90YVR5cGUgPVxuICB8ICdwbHVnaW5zJyB8ICdwaXBlbGluZXMnIHwgJ2FwaUNhbGxzJyB8ICdhaUNhbGxzJyB8ICdzdG9yYWdlQnl0ZXMnXG4gIHwgJ2Rhc2hib2FyZHMnIHwgJ2FsZXJ0UnVsZXMnIHwgJ2FsZXJ0RGVzdGluYXRpb25zJyB8ICdpZHBDb25maWdzJztcblxuLyoqXG4gKiBWYWxpZCBxdW90YSB0eXBlIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBTElEX1FVT1RBX1RZUEVTID0gW1xuICAncGx1Z2lucycsICdwaXBlbGluZXMnLCAnYXBpQ2FsbHMnLCAnYWlDYWxscycsICdzdG9yYWdlQnl0ZXMnLFxuICAnZGFzaGJvYXJkcycsICdhbGVydFJ1bGVzJywgJ2FsZXJ0RGVzdGluYXRpb25zJywgJ2lkcENvbmZpZ3MnLFxuXSBhcyBjb25zdDtcblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYSB2YWxpZCBRdW90YVR5cGUuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdmFsdWUgaXMgYSB2YWxpZCBRdW90YVR5cGVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaWYgKGlzVmFsaWRRdW90YVR5cGUocmVxLmJvZHkucXVvdGFUeXBlKSkge1xuICogICAvLyBxdW90YVR5cGUgaXMgZ3VhcmFudGVlZCB0byBiZSBRdW90YVR5cGVcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFF1b3RhVHlwZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFF1b3RhVHlwZSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFZBTElEX1FVT1RBX1RZUEVTLmluY2x1ZGVzKHZhbHVlIGFzIFF1b3RhVHlwZSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW5kIGFzc2VydCB0aGF0IGEgdmFsdWUgaXMgYSB2YWxpZCBRdW90YVR5cGUuXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlscy5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIGZpZWxkTmFtZSAtIE5hbWUgb2YgdGhlIGZpZWxkIGJlaW5nIHZhbGlkYXRlZCAoZm9yIGVycm9yIG1lc3NhZ2VzKVxuICogQHJldHVybnMgVGhlIHZhbGlkYXRlZCBRdW90YVR5cGVcbiAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsdWUgaXMgbm90IGEgdmFsaWQgUXVvdGFUeXBlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHRyeSB7XG4gKiAgIGNvbnN0IHF1b3RhVHlwZSA9IHZhbGlkYXRlUXVvdGFUeXBlKHJlcS5ib2R5LnF1b3RhVHlwZSwgJ3F1b3RhVHlwZScpO1xuICogICAvLyBVc2UgcXVvdGFUeXBlIHNhZmVseVxuICogfSBjYXRjaCAoZXJyKSB7XG4gKiAgIHJldHVybiBzZW5kRXJyb3IocmVzLCA0MDAsIGVyci5tZXNzYWdlKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVRdW90YVR5cGUodmFsdWU6IHVua25vd24sIGZpZWxkTmFtZSA9ICdxdW90YVR5cGUnKTogUXVvdGFUeXBlIHtcbiAgaWYgKCFpc1ZhbGlkUXVvdGFUeXBlKHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkICR7ZmllbGROYW1lfTogXCIke3ZhbHVlfVwiLiBNdXN0IGJlIG9uZSBvZjogJHtWQUxJRF9RVU9UQV9UWVBFUy5qb2luKCcsICcpfWAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogUmVzdWx0IGZyb20gcXVvdGEgY2hlY2sgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhQ2hlY2tSZXN1bHQge1xuICAvKiogV2hldGhlciB0aGUgcmVxdWVzdCBpcyBhbGxvd2VkICovXG4gIGFsbG93ZWQ6IGJvb2xlYW47XG4gIC8qKiBNYXhpbXVtIHF1b3RhIGxpbWl0ICgtMSBmb3IgdW5saW1pdGVkKSAqL1xuICBsaW1pdDogbnVtYmVyO1xuICAvKiogQ3VycmVudCB1c2FnZSBjb3VudCAqL1xuICB1c2VkOiBudW1iZXI7XG4gIC8qKiBSZW1haW5pbmcgcXVvdGEgKC0xIGZvciB1bmxpbWl0ZWQpICovXG4gIHJlbWFpbmluZzogbnVtYmVyO1xuICAvKiogSVNPIHRpbWVzdGFtcCB3aGVuIHF1b3RhIHJlc2V0cyAqL1xuICByZXNldEF0OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHF1b3RhIGlzIHVubGltaXRlZCAqL1xuICB1bmxpbWl0ZWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUXVvdGEgaW5mb3JtYXRpb24gZm9yIGVycm9yIHJlc3BvbnNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YUluZm8ge1xuICB0eXBlOiBRdW90YVR5cGU7XG4gIGxpbWl0OiBudW1iZXI7XG4gIHVzZWQ6IG51bWJlcjtcbiAgcmVtYWluaW5nOiBudW1iZXI7XG59XG5cbi8qKlxuICogU3RhbmRhcmQgQVBJIHN1Y2Nlc3MgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpU3VjY2Vzc1Jlc3BvbnNlPFQgPSB1bmtub3duPiB7XG4gIHN1Y2Nlc3M6IHRydWU7XG4gIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgZGF0YT86IFQ7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3RhbmRhcmQgQVBJIGVycm9yIHJlc3BvbnNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaUVycm9yUmVzcG9uc2Uge1xuICBzdWNjZXNzOiBmYWxzZTtcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGRldGFpbHM/OiB1bmtub3duO1xuICBxdW90YT86IFF1b3RhSW5mbztcbn1cblxuLyoqXG4gKiBDb21iaW5lZCBBUEkgcmVzcG9uc2UgdHlwZS5cbiAqL1xuZXhwb3J0IHR5cGUgQXBpUmVzcG9uc2U8VCA9IHVua25vd24+ID0gQXBpU3VjY2Vzc1Jlc3BvbnNlPFQ+IHwgQXBpRXJyb3JSZXNwb25zZTtcblxuLyoqXG4gKiBKV1QgcGF5bG9hZCBmcm9tIGFjY2VzcyB0b2tlbnMuXG4gKlxuICogVXNlcnMgY2FuIGJlbG9uZyB0byBtdWx0aXBsZSBvcmdhbml6YXRpb25zLiBUaGUgdG9rZW4gaXMgc2NvcGVkIHRvIG9uZVxuICogYWN0aXZlIG9yZ2FuaXphdGlvbiBhdCBhIHRpbWUuIFRoZSBgcm9sZWAgZmllbGQgaXMgdGhlIHVzZXIncyBwZXItb3JnXG4gKiByb2xlIGluIHRoYXQgb3JnYW5pemF0aW9uIChmcm9tIHRoZSBVc2VyT3JnYW5pemF0aW9uIGp1bmN0aW9uIGNvbGxlY3Rpb24pLFxuICogYW5kIGBpc0FkbWluYCBpcyBkZXJpdmVkIGFzIGByb2xlID09PSAnYWRtaW4nIHx8IHJvbGUgPT09ICdvd25lcidgLlxuICpcbiAqIFVzZSBgUE9TVCAvYXV0aC9zd2l0Y2gtb3JnYCB0byBjaGFuZ2UgdGhlIGFjdGl2ZSBvcmdhbml6YXRpb24sIHdoaWNoXG4gKiByZS1pc3N1ZXMgdG9rZW5zIHdpdGggdGhlIG5ldyBvcmcncyByb2xlIGFuZCBjb250ZXh0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEp3dFBheWxvYWQge1xuICAvKiogVXNlciBJRCAoc3ViamVjdCkgKi9cbiAgc3ViOiBzdHJpbmc7XG4gIC8qKiBVc2VybmFtZSAqL1xuICB1c2VybmFtZTogc3RyaW5nO1xuICAvKiogVXNlciBlbWFpbCAqL1xuICBlbWFpbDogc3RyaW5nO1xuICAvKiogUGVyLW9yZyByb2xlIGluIHRoZSBhY3RpdmUgb3JnYW5pemF0aW9uICgnb3duZXInIHwgJ2FkbWluJyB8ICdtZW1iZXInKS4gTm90IGEgZ2xvYmFsIHJvbGUuICovXG4gIHJvbGU6ICdvd25lcicgfCAnYWRtaW4nIHwgJ21lbWJlcic7XG4gIC8qKiBEZXJpdmVkOiB0cnVlIHdoZW4gcm9sZSBpcyAnYWRtaW4nIG9yICdvd25lcicgaW4gdGhlIGFjdGl2ZSBvcmdhbml6YXRpb24gKi9cbiAgaXNBZG1pbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBHbG9iYWwgc3VwZXItYWRtaW4gZmxhZyAoY3Jvc3Mtb3JnKS4gV2hlbiBgdHJ1ZWAsIHRoZSB1c2VyIGlzIHRyZWF0ZWRcbiAgICogYXMgYSBzeXN0ZW0gYWRtaW5pc3RyYXRvciByZWdhcmRsZXNzIG9mIHdoaWNoIG9yZyB0aGV5J3JlIGN1cnJlbnRseVxuICAgKiBhY3RpbmcgdW5kZXIuIFRoaXMgaXMgdGhlIGNhbm9uaWNhbCBzaWduYWwgZm9yIHN5c2FkbWluIGF1dGhvcml0eSDigJRcbiAgICogcHJldmlvdXNseSB0aGUgb25seSBwYXRoIHdhcyBtZW1iZXJzaGlwIGluIHRoZSB3ZWxsLWtub3duIFwic3lzdGVtXCIgb3JnXG4gICAqIHdpdGggcm9sZSBhZG1pbi9vd25lciwgd2hpY2ggY29uZmxhdGVkIFwiUGlwZWxpbmUgQnVpbGRlciBvcGVyYXRvclwiIHdpdGhcbiAgICogXCJyZWFsIGN1c3RvbWVyIHRlbmFudFwiIGluIHRoZSBkYXRhIG1vZGVsLiBFaXRoZXIgcGF0aCBzdGlsbCB3b3Jrc1xuICAgKiBkdXJpbmcgdGhlIHJvbGxvdXQ7IG5ldyB1c2VycyBzaG91bGQgYmUgZ3JhbnRlZCB2aWEgYGlzU3VwZXJBZG1pbmAuXG4gICAqL1xuICBpc1N1cGVyQWRtaW4/OiBib29sZWFuO1xuICAvKiogT3JnYW5pemF0aW9uJ3MgcXVvdGEgdGllciAoJ2RldmVsb3BlcicgfCAncHJvJyB8ICd1bmxpbWl0ZWQnKSAqL1xuICB0aWVyPzogc3RyaW5nO1xuICAvKiogUmVzb2x2ZWQgZmVhdHVyZSBmbGFncyBmb3IgdGhpcyB1c2VyL29yZyAqL1xuICBmZWF0dXJlcz86IHN0cmluZ1tdO1xuICAvKiogQWN0aXZlIG9yZ2FuaXphdGlvbiBJRCAoZnJvbSBVc2VyT3JnYW5pemF0aW9uIG1lbWJlcnNoaXApICovXG4gIG9yZ2FuaXphdGlvbklkPzogc3RyaW5nO1xuICAvKiogQWN0aXZlIG9yZ2FuaXphdGlvbiBuYW1lICovXG4gIG9yZ2FuaXphdGlvbk5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcmcg4oaSIHRlYW0gaGllcmFyY2h5IChvcmctdGVhbS1oaWVyYXJjaHkgcHJvcG9zYWwsIHBoYXNlIDEpLlxuICAgKiBgcGFyZW50T3JnYW5pemF0aW9uSWRgIGlzIHRoZSBhY3RpdmUgb3JnJ3MgZGlyZWN0IHBhcmVudDsgYHJvb3RPcmdhbml6YXRpb25JZGBcbiAgICogaXMgdGhlIHRvcCBvZiBpdHMgYW5jZXN0cnkgY2hhaW4uIEJvdGggYXJlICoqb21pdHRlZCBmb3IgZmxhdCAocm9vdCkgb3JncyoqIOKAlFxuICAgKiBjb25zdW1lcnMgc2hvdWxkIHRyZWF0IHRoZSBlZmZlY3RpdmUgcm9vdCBhcyBgcm9vdE9yZ2FuaXphdGlvbklkID8/IG9yZ2FuaXphdGlvbklkYC5cbiAgICogQ3VycmVudGx5IGV2ZXJ5IG9yZyBpcyBmbGF0LCBzbyB0aGVzZSBhcmUgYWJzZW50IG9uIGFsbCB0b2tlbnMgdG9kYXkuXG4gICAqL1xuICBwYXJlbnRPcmdhbml6YXRpb25JZD86IHN0cmluZztcbiAgLyoqIFJvb3Qgb3JnYW5pemF0aW9uIElEIG9mIHRoZSBhY3RpdmUgb3JnJ3MgYW5jZXN0cnkgY2hhaW4gKHNlZSBgcGFyZW50T3JnYW5pemF0aW9uSWRgKS4gKi9cbiAgcm9vdE9yZ2FuaXphdGlvbklkPzogc3RyaW5nO1xuICAvKipcbiAgICogU2V0IG9uIHRva2VucyBpc3N1ZWQgYnkgdGhlIHN5c2FkbWluIGltcGVyc29uYXRpb24gZmxvd1xuICAgKiAoYFBPU1QgL2FkbWluL2ltcGVyc29uYXRlLzp1c2VySWRgKS4gQ2FycmllcyB0aGUgb3JpZ2luYWwgc3lzYWRtaW4nc1xuICAgKiB1c2VyIGlkIHNvIGF1ZGl0IGV2ZW50cyBzdGlsbCBhdHRyaWJ1dGUgYWN0aW9ucyBjb3JyZWN0bHkuXG4gICAqL1xuICBpbXBlcnNvbmF0b3JJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIHRva2VuIGlzIHJlYWQtb25seSDigJQgYW55IG5vbi1HRVQgcmVxdWVzdCBpcyByZWplY3RlZFxuICAgKiB1cHN0cmVhbSBieSB0aGUgcGxhdGZvcm0ncyByZWFkLW9ubHkgaW1wZXJzb25hdGlvbiBnYXRlLiBMZXRzXG4gICAqIHN5c2FkbWlucyBcInZpZXcgYXMgdXNlciBYXCIgd2l0aG91dCByaXNraW5nIGEgZGVzdHJ1Y3RpdmUgYWN0aW9uLlxuICAgKi9cbiAgaW1wZXJzb25hdGlvblJlYWRPbmx5PzogYm9vbGVhbjtcbiAgLyoqIFRva2VuIHR5cGUgKi9cbiAgdHlwZTogJ2FjY2VzcycgfCAncmVmcmVzaCc7XG4gIC8qKiBJc3N1ZWQgYXQgdGltZXN0YW1wICovXG4gIGlhdD86IG51bWJlcjtcbiAgLyoqIEV4cGlyYXRpb24gdGltZXN0YW1wICovXG4gIGV4cD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZCBFeHByZXNzIFJlcXVlc3Qgd2l0aCB1c2VyIHByb3BlcnR5LlxuICovXG5kZWNsYXJlIGdsb2JhbCB7XG4gIG5hbWVzcGFjZSBFeHByZXNzIHtcbiAgICBpbnRlcmZhY2UgUmVxdWVzdCB7XG4gICAgICB1c2VyPzogSnd0UGF5bG9hZDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gZm9yIGludGVybmFsIEhUVFAgY2xpZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25maWcge1xuICAvKiogU2VydmljZSBob3N0bmFtZSAqL1xuICBob3N0OiBzdHJpbmc7XG4gIC8qKiBTZXJ2aWNlIHBvcnQgKi9cbiAgcG9ydDogbnVtYmVyO1xuICAvKiogUmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEhlYWx0aCBjaGVjayByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIZWFsdGhDaGVja1Jlc3BvbnNlIHtcbiAgc3RhdHVzOiAnaGVhbHRoeScgfCAndW5oZWFsdGh5JztcbiAgc2VydmljZTogc3RyaW5nO1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdXB0aW1lOiBudW1iZXI7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIGRlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsICdjb25uZWN0ZWQnIHwgJ2Rpc2Nvbm5lY3RlZCcgfCAndW5rbm93bic+O1xufVxuIl19
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBOEJ0Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHO0lBQy9CLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxjQUFjO0lBQzdELFlBQVksRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsWUFBWTtDQUNyRCxDQUFDO0FBRVg7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWM7SUFDN0MsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLEtBQWtCLENBQUMsQ0FBQztBQUNyRixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFjLEVBQUUsU0FBUyxHQUFHLFdBQVc7SUFDdkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDYixXQUFXLFNBQVMsTUFBTSxLQUFLLHNCQUFzQixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDcEYsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBRdW90YSB0eXBlIGlkZW50aWZpZXJzLlxuICpcbiAqIC0gYHBsdWdpbnNgIC8gYHBpcGVsaW5lc2Ag4oCUIGNvdW50IG9mIGNyZWF0ZWQgZW50aXRpZXNcbiAqIC0gYGFwaUNhbGxzYCDigJQgZ2VuZXJpYyBBUEkgY2FsbCBjb3VudCAocmVhZC1oZWF2eSBwYXRocylcbiAqIC0gYGFpQ2FsbHNgIOKAlCBBSSBwcm92aWRlciBpbnZvY2F0aW9ucyAoY291bnRlZCBzZXBhcmF0ZWx5IGJlY2F1c2UgZWFjaCBjYWxsXG4gKiAgIGhhcyBleHRlcm5hbCBkb2xsYXIgY29zdDsgc2l6ZWQgc21hbGxlciB0aGFuIGFwaUNhbGxzIHBlciB0aWVyKVxuICogLSBgc3RvcmFnZUJ5dGVzYCDigJQgcmVnaXN0cnkgc3RvcmFnZSBidWRnZXQgcGVyIG9yZy4gVW5saWtlIHRoZSBvdGhlcnNcbiAqICAgKHdoaWNoIGNvdW50IGRpc2NyZXRlIGV2ZW50cyksIHRoaXMgaXMgYSBtZWFzdXJlZCB0b3RhbCByZWNvbXB1dGVkXG4gKiAgIG9uIGRlbWFuZC4gSW5jcmVtZW50ZWQgYnkgdGhlIGltYWdlLXJlZ2lzdHJ5J3MgcHVzaC1nYXRlIGJlZm9yZVxuICogICBpc3N1aW5nIGEgdG9rZW4gd2hvc2Ugc2NvcGUgaW5jbHVkZXMgYHB1c2hgOyB0aGUgR0Mgc2NoZWR1bGVyXG4gKiAgIGV2ZW50dWFsbHkgZnJlZXMgdGhlIGJ5dGVzLCB0aGVuIHRoZSBuZXh0IHB1c2gtZ2F0ZSBjaGVjayByZWFkc1xuICogICB0aGUgbG93ZXIgdmFsdWUuIE5PVCBhIGNvdW50ZXItc3R5bGUgcXVvdGEgaW4gdGhlIHNlbnNlIG9mXG4gKiAgIGBpbmNyZW1lbnRVc2FnZWAg4oCUIHRoZSByZWdpc3RyeSBwdXNoZXMgdGhlIG1lYXN1cmVkIHRvdGFsIHZpYVxuICogICBgdXBkYXRlTGltaXRzYC9gcmVzZXRVc2FnZWAgZmxvd3MuIFRpZXIgbGltaXRzIGFyZSBieXRlcy5cbiAqIC0gYGRhc2hib2FyZHNgIC8gYGFsZXJ0UnVsZXNgIC8gYGFsZXJ0RGVzdGluYXRpb25zYCAvIGBpZHBDb25maWdzYCDigJRcbiAqICAgcmVzb3VyY2UtY291bnQgcXVvdGFzIGFkZGVkIHRvIGNsb3NlIHBlci1vcmcgRG9TIHN1cmZhY2VzIGluIHRoZVxuICogICB1c2VyLWVkaXRhYmxlIGZlYXR1cmUgdGFibGVzLiBXaXRob3V0IHRoZXNlIGNhcHMgYSBzaW5nbGUgb3JnIGNvdWxkXG4gKiAgIHNwYW0gdGhvdXNhbmRzIG9mIGRhc2hib2FyZHMgLyBydWxlcyBhbmQgYmxvYXQgdGhlIHNoYXJlZCBQb3N0Z3JlcyAvXG4gKiAgIE1vbmdvIHdvcmtpbmcgc2V0cy4gQ291bnRlZCBhdCBjcmVhdGUgdGltZTsgZGVjcmVtZW50ZWQgb24gZGVsZXRlLlxuICovXG4vLyBOT1RFOiBgc2VhdHNgIGlzIGludGVudGlvbmFsbHkgTk9UIGhlcmUuIEl0J3MgYSB0aWVyIGxpbWl0IChRdW90YVRpZXJMaW1pdHMpXG4vLyBlbmZvcmNlZCBieSBjb21wYXJpbmcgdGhlIG9yZydzIExJVkUgbWVtYmVyIGNvdW50IGF0IGludml0ZSB0aW1lIOKAlCBub3QgYW5cbi8vIGluY3JlbWVudGluZyBwZXItcGVyaW9kIGNvdW50ZXIgbGlrZSB0aGUgY29uc3VtYWJsZSBxdW90YXMgYmVsb3cuXG5leHBvcnQgdHlwZSBRdW90YVR5cGUgPVxuICB8ICdwbHVnaW5zJyB8ICdwaXBlbGluZXMnIHwgJ2FwaUNhbGxzJyB8ICdhaUNhbGxzJyB8ICdzdG9yYWdlQnl0ZXMnXG4gIHwgJ2Rhc2hib2FyZHMnIHwgJ2FsZXJ0UnVsZXMnIHwgJ2FsZXJ0RGVzdGluYXRpb25zJyB8ICdpZHBDb25maWdzJztcblxuLyoqXG4gKiBWYWxpZCBxdW90YSB0eXBlIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBTElEX1FVT1RBX1RZUEVTID0gW1xuICAncGx1Z2lucycsICdwaXBlbGluZXMnLCAnYXBpQ2FsbHMnLCAnYWlDYWxscycsICdzdG9yYWdlQnl0ZXMnLFxuICAnZGFzaGJvYXJkcycsICdhbGVydFJ1bGVzJywgJ2FsZXJ0RGVzdGluYXRpb25zJywgJ2lkcENvbmZpZ3MnLFxuXSBhcyBjb25zdDtcblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYSB2YWxpZCBRdW90YVR5cGUuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdmFsdWUgaXMgYSB2YWxpZCBRdW90YVR5cGVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaWYgKGlzVmFsaWRRdW90YVR5cGUocmVxLmJvZHkucXVvdGFUeXBlKSkge1xuICogICAvLyBxdW90YVR5cGUgaXMgZ3VhcmFudGVlZCB0byBiZSBRdW90YVR5cGVcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFF1b3RhVHlwZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFF1b3RhVHlwZSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFZBTElEX1FVT1RBX1RZUEVTLmluY2x1ZGVzKHZhbHVlIGFzIFF1b3RhVHlwZSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW5kIGFzc2VydCB0aGF0IGEgdmFsdWUgaXMgYSB2YWxpZCBRdW90YVR5cGUuXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlscy5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIGZpZWxkTmFtZSAtIE5hbWUgb2YgdGhlIGZpZWxkIGJlaW5nIHZhbGlkYXRlZCAoZm9yIGVycm9yIG1lc3NhZ2VzKVxuICogQHJldHVybnMgVGhlIHZhbGlkYXRlZCBRdW90YVR5cGVcbiAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsdWUgaXMgbm90IGEgdmFsaWQgUXVvdGFUeXBlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHRyeSB7XG4gKiAgIGNvbnN0IHF1b3RhVHlwZSA9IHZhbGlkYXRlUXVvdGFUeXBlKHJlcS5ib2R5LnF1b3RhVHlwZSwgJ3F1b3RhVHlwZScpO1xuICogICAvLyBVc2UgcXVvdGFUeXBlIHNhZmVseVxuICogfSBjYXRjaCAoZXJyKSB7XG4gKiAgIHJldHVybiBzZW5kRXJyb3IocmVzLCA0MDAsIGVyci5tZXNzYWdlKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVRdW90YVR5cGUodmFsdWU6IHVua25vd24sIGZpZWxkTmFtZSA9ICdxdW90YVR5cGUnKTogUXVvdGFUeXBlIHtcbiAgaWYgKCFpc1ZhbGlkUXVvdGFUeXBlKHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkICR7ZmllbGROYW1lfTogXCIke3ZhbHVlfVwiLiBNdXN0IGJlIG9uZSBvZjogJHtWQUxJRF9RVU9UQV9UWVBFUy5qb2luKCcsICcpfWAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogUmVzdWx0IGZyb20gcXVvdGEgY2hlY2sgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhQ2hlY2tSZXN1bHQge1xuICAvKiogV2hldGhlciB0aGUgcmVxdWVzdCBpcyBhbGxvd2VkICovXG4gIGFsbG93ZWQ6IGJvb2xlYW47XG4gIC8qKiBNYXhpbXVtIHF1b3RhIGxpbWl0ICgtMSBmb3IgdW5saW1pdGVkKSAqL1xuICBsaW1pdDogbnVtYmVyO1xuICAvKiogQ3VycmVudCB1c2FnZSBjb3VudCAqL1xuICB1c2VkOiBudW1iZXI7XG4gIC8qKiBSZW1haW5pbmcgcXVvdGEgKC0xIGZvciB1bmxpbWl0ZWQpICovXG4gIHJlbWFpbmluZzogbnVtYmVyO1xuICAvKiogSVNPIHRpbWVzdGFtcCB3aGVuIHF1b3RhIHJlc2V0cyAqL1xuICByZXNldEF0OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHF1b3RhIGlzIHVubGltaXRlZCAqL1xuICB1bmxpbWl0ZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcnVlIE9OTFkgd2hlbiB0aGlzIHJlc3VsdCBpcyB0aGUgZmFpbC1vcGVuIHNlbnRpbmVsIHJldHVybmVkIGJlY2F1c2UgdGhlXG4gICAqIHF1b3RhIHNlcnZpY2Ugd2FzIHVucmVhY2hhYmxlIC8gcmV0dXJuZWQgbm9uLW9rIChub3QgYSByZWFsIHF1b3RhIHJlYWRpbmcpLlxuICAgKiBMZXRzIGZhaWwtY2xvc2VkIGNhbGxlcnMgKGUuZy4gdGhlIHJlZ2lzdHJ5IHN0b3JhZ2UgcHVzaC1nYXRlKSBkaXN0aW5ndWlzaFxuICAgKiBhbiBvdXRhZ2UgZnJvbSBhIGdlbnVpbmUgYGxpbWl0OiAtMWAgKHVubGltaXRlZCkgb3JnLiBBYnNlbnQgb24gcmVhbCByZXN1bHRzLlxuICAgKi9cbiAgZmFpbE9wZW4/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFF1b3RhIGluZm9ybWF0aW9uIGZvciBlcnJvciByZXNwb25zZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFJbmZvIHtcbiAgdHlwZTogUXVvdGFUeXBlO1xuICBsaW1pdDogbnVtYmVyO1xuICB1c2VkOiBudW1iZXI7XG4gIHJlbWFpbmluZzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkIEFQSSBzdWNjZXNzIHJlc3BvbnNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaVN1Y2Nlc3NSZXNwb25zZTxUID0gdW5rbm93bj4ge1xuICBzdWNjZXNzOiB0cnVlO1xuICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIGRhdGE/OiBUO1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0YW5kYXJkIEFQSSBlcnJvciByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlFcnJvclJlc3BvbnNlIHtcbiAgc3VjY2VzczogZmFsc2U7XG4gIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xuICBkZXRhaWxzPzogdW5rbm93bjtcbiAgcXVvdGE/OiBRdW90YUluZm87XG59XG5cbi8qKlxuICogQ29tYmluZWQgQVBJIHJlc3BvbnNlIHR5cGUuXG4gKi9cbmV4cG9ydCB0eXBlIEFwaVJlc3BvbnNlPFQgPSB1bmtub3duPiA9IEFwaVN1Y2Nlc3NSZXNwb25zZTxUPiB8IEFwaUVycm9yUmVzcG9uc2U7XG5cbi8qKlxuICogSldUIHBheWxvYWQgZnJvbSBhY2Nlc3MgdG9rZW5zLlxuICpcbiAqIFVzZXJzIGNhbiBiZWxvbmcgdG8gbXVsdGlwbGUgb3JnYW5pemF0aW9ucy4gVGhlIHRva2VuIGlzIHNjb3BlZCB0byBvbmVcbiAqIGFjdGl2ZSBvcmdhbml6YXRpb24gYXQgYSB0aW1lLiBUaGUgYHJvbGVgIGZpZWxkIGlzIHRoZSB1c2VyJ3MgcGVyLW9yZ1xuICogcm9sZSBpbiB0aGF0IG9yZ2FuaXphdGlvbiAoZnJvbSB0aGUgVXNlck9yZ2FuaXphdGlvbiBqdW5jdGlvbiBjb2xsZWN0aW9uKSxcbiAqIGFuZCBgaXNBZG1pbmAgaXMgZGVyaXZlZCBhcyBgcm9sZSA9PT0gJ2FkbWluJyB8fCByb2xlID09PSAnb3duZXInYC5cbiAqXG4gKiBVc2UgYFBPU1QgL2F1dGgvc3dpdGNoLW9yZ2AgdG8gY2hhbmdlIHRoZSBhY3RpdmUgb3JnYW5pemF0aW9uLCB3aGljaFxuICogcmUtaXNzdWVzIHRva2VucyB3aXRoIHRoZSBuZXcgb3JnJ3Mgcm9sZSBhbmQgY29udGV4dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKd3RQYXlsb2FkIHtcbiAgLyoqIFVzZXIgSUQgKHN1YmplY3QpICovXG4gIHN1Yjogc3RyaW5nO1xuICAvKiogVXNlcm5hbWUgKi9cbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgLyoqIFVzZXIgZW1haWwgKi9cbiAgZW1haWw6IHN0cmluZztcbiAgLyoqIFBlci1vcmcgcm9sZSBpbiB0aGUgYWN0aXZlIG9yZ2FuaXphdGlvbiAoJ293bmVyJyB8ICdhZG1pbicgfCAnbWVtYmVyJykuIE5vdCBhIGdsb2JhbCByb2xlLiAqL1xuICByb2xlOiAnb3duZXInIHwgJ2FkbWluJyB8ICdtZW1iZXInO1xuICAvKiogRGVyaXZlZDogdHJ1ZSB3aGVuIHJvbGUgaXMgJ2FkbWluJyBvciAnb3duZXInIGluIHRoZSBhY3RpdmUgb3JnYW5pemF0aW9uICovXG4gIGlzQWRtaW4/OiBib29sZWFuO1xuICAvKipcbiAgICogR2xvYmFsIHN1cGVyLWFkbWluIGZsYWcgKGNyb3NzLW9yZykuIFdoZW4gYHRydWVgLCB0aGUgdXNlciBpcyB0cmVhdGVkXG4gICAqIGFzIGEgc3lzdGVtIGFkbWluaXN0cmF0b3IgcmVnYXJkbGVzcyBvZiB3aGljaCBvcmcgdGhleSdyZSBjdXJyZW50bHlcbiAgICogYWN0aW5nIHVuZGVyLiBUaGlzIGlzIHRoZSBjYW5vbmljYWwgc2lnbmFsIGZvciBzeXNhZG1pbiBhdXRob3JpdHkg4oCUXG4gICAqIHByZXZpb3VzbHkgdGhlIG9ubHkgcGF0aCB3YXMgbWVtYmVyc2hpcCBpbiB0aGUgd2VsbC1rbm93biBcInN5c3RlbVwiIG9yZ1xuICAgKiB3aXRoIHJvbGUgYWRtaW4vb3duZXIsIHdoaWNoIGNvbmZsYXRlZCBcIlBpcGVsaW5lIEJ1aWxkZXIgb3BlcmF0b3JcIiB3aXRoXG4gICAqIFwicmVhbCBjdXN0b21lciB0ZW5hbnRcIiBpbiB0aGUgZGF0YSBtb2RlbC4gRWl0aGVyIHBhdGggc3RpbGwgd29ya3NcbiAgICogZHVyaW5nIHRoZSByb2xsb3V0OyBuZXcgdXNlcnMgc2hvdWxkIGJlIGdyYW50ZWQgdmlhIGBpc1N1cGVyQWRtaW5gLlxuICAgKi9cbiAgaXNTdXBlckFkbWluPzogYm9vbGVhbjtcbiAgLyoqIE9yZ2FuaXphdGlvbidzIHF1b3RhIHRpZXIgKCdkZXZlbG9wZXInIHwgJ3BybycgfCAndGVhbScgfCAnZW50ZXJwcmlzZScpICovXG4gIHRpZXI/OiBzdHJpbmc7XG4gIC8qKiBSZXNvbHZlZCBmZWF0dXJlIGZsYWdzIGZvciB0aGlzIHVzZXIvb3JnICovXG4gIGZlYXR1cmVzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBOYXJyb3cgY2FwYWJpbGl0eSBzY29wZSBmb3IgbWFjaGluZS9hdXRvbWF0aW9uIHRva2VucyAoZS5nLlxuICAgKiBgJ3JlcG9ydGluZzppbmdlc3QnYCkuIEFic2VudCBvbiBub3JtYWwgaW50ZXJhY3RpdmUgdXNlciB0b2tlbnMuIEVuZHBvaW50c1xuICAgKiB0aGF0IGFjY2VwdCBhIHNjb3BlZCBpZGVudGl0eSBjaGVjayB0aGlzIChzZWUgYGhhc1Njb3BlYCkgaW5zdGVhZCBvZiByb2xlO1xuICAgKiBhIHNjb3BlZCB0b2tlbiBpcyBtaW50ZWQgd2l0aCBtaW5pbWFsIHJvbGUgZm9yIGxlYXN0LXByaXZpbGVnZS5cbiAgICovXG4gIHNjb3BlPzogc3RyaW5nO1xuICAvKiogQWN0aXZlIG9yZ2FuaXphdGlvbiBJRCAoZnJvbSBVc2VyT3JnYW5pemF0aW9uIG1lbWJlcnNoaXApICovXG4gIG9yZ2FuaXphdGlvbklkPzogc3RyaW5nO1xuICAvKiogQWN0aXZlIG9yZ2FuaXphdGlvbiBuYW1lICovXG4gIG9yZ2FuaXphdGlvbk5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcmcg4oaSIHRlYW0gaGllcmFyY2h5IChvcmctdGVhbS1oaWVyYXJjaHkgcHJvcG9zYWwsIHBoYXNlIDEpLlxuICAgKiBgcGFyZW50T3JnYW5pemF0aW9uSWRgIGlzIHRoZSBhY3RpdmUgb3JnJ3MgZGlyZWN0IHBhcmVudDsgYHJvb3RPcmdhbml6YXRpb25JZGBcbiAgICogaXMgdGhlIHRvcCBvZiBpdHMgYW5jZXN0cnkgY2hhaW4uIEJvdGggYXJlICoqb21pdHRlZCBmb3IgZmxhdCAocm9vdCkgb3JncyoqIOKAlFxuICAgKiBjb25zdW1lcnMgc2hvdWxkIHRyZWF0IHRoZSBlZmZlY3RpdmUgcm9vdCBhcyBgcm9vdE9yZ2FuaXphdGlvbklkID8/IG9yZ2FuaXphdGlvbklkYC5cbiAgICogQ3VycmVudGx5IGV2ZXJ5IG9yZyBpcyBmbGF0LCBzbyB0aGVzZSBhcmUgYWJzZW50IG9uIGFsbCB0b2tlbnMgdG9kYXkuXG4gICAqL1xuICBwYXJlbnRPcmdhbml6YXRpb25JZD86IHN0cmluZztcbiAgLyoqIFJvb3Qgb3JnYW5pemF0aW9uIElEIG9mIHRoZSBhY3RpdmUgb3JnJ3MgYW5jZXN0cnkgY2hhaW4gKHNlZSBgcGFyZW50T3JnYW5pemF0aW9uSWRgKS4gKi9cbiAgcm9vdE9yZ2FuaXphdGlvbklkPzogc3RyaW5nO1xuICAvKipcbiAgICogU2V0IG9uIHRva2VucyBpc3N1ZWQgYnkgdGhlIHN5c2FkbWluIGltcGVyc29uYXRpb24gZmxvd1xuICAgKiAoYFBPU1QgL2FkbWluL2ltcGVyc29uYXRlLzp1c2VySWRgKS4gQ2FycmllcyB0aGUgb3JpZ2luYWwgc3lzYWRtaW4nc1xuICAgKiB1c2VyIGlkIHNvIGF1ZGl0IGV2ZW50cyBzdGlsbCBhdHRyaWJ1dGUgYWN0aW9ucyBjb3JyZWN0bHkuXG4gICAqL1xuICBpbXBlcnNvbmF0b3JJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIHRva2VuIGlzIHJlYWQtb25seSDigJQgYW55IG5vbi1HRVQgcmVxdWVzdCBpcyByZWplY3RlZFxuICAgKiB1cHN0cmVhbSBieSB0aGUgcGxhdGZvcm0ncyByZWFkLW9ubHkgaW1wZXJzb25hdGlvbiBnYXRlLiBMZXRzXG4gICAqIHN5c2FkbWlucyBcInZpZXcgYXMgdXNlciBYXCIgd2l0aG91dCByaXNraW5nIGEgZGVzdHJ1Y3RpdmUgYWN0aW9uLlxuICAgKi9cbiAgaW1wZXJzb25hdGlvblJlYWRPbmx5PzogYm9vbGVhbjtcbiAgLyoqIFRva2VuIHR5cGUgKi9cbiAgdHlwZTogJ2FjY2VzcycgfCAncmVmcmVzaCc7XG4gIC8qKiBJc3N1ZWQgYXQgdGltZXN0YW1wICovXG4gIGlhdD86IG51bWJlcjtcbiAgLyoqIEV4cGlyYXRpb24gdGltZXN0YW1wICovXG4gIGV4cD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZCBFeHByZXNzIFJlcXVlc3Qgd2l0aCB1c2VyIHByb3BlcnR5LlxuICovXG5kZWNsYXJlIGdsb2JhbCB7XG4gIG5hbWVzcGFjZSBFeHByZXNzIHtcbiAgICBpbnRlcmZhY2UgUmVxdWVzdCB7XG4gICAgICB1c2VyPzogSnd0UGF5bG9hZDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gZm9yIGludGVybmFsIEhUVFAgY2xpZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25maWcge1xuICAvKiogU2VydmljZSBob3N0bmFtZSAqL1xuICBob3N0OiBzdHJpbmc7XG4gIC8qKiBTZXJ2aWNlIHBvcnQgKi9cbiAgcG9ydDogbnVtYmVyO1xuICAvKiogUmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEhlYWx0aCBjaGVjayByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIZWFsdGhDaGVja1Jlc3BvbnNlIHtcbiAgc3RhdHVzOiAnaGVhbHRoeScgfCAndW5oZWFsdGh5JztcbiAgc2VydmljZTogc3RyaW5nO1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdXB0aW1lOiBudW1iZXI7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIGRlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsICdjb25uZWN0ZWQnIHwgJ2Rpc2Nvbm5lY3RlZCcgfCAndW5rbm93bic+O1xufVxuIl19
@@ -1,6 +1,6 @@
1
1
  import type { QuotaTier } from './quota-tiers.js';
2
2
  /** Canonical feature flag identifiers. */
3
- export type FeatureFlag = 'priority_support' | 'custom_integrations' | 'ai_generation' | 'bulk_operations' | 'audit_log';
3
+ export type FeatureFlag = 'priority_support' | 'custom_integrations' | 'ai_generation' | 'bulk_operations' | 'audit_log' | 'sso';
4
4
  /** All valid feature flags (order determines display order). */
5
5
  export declare const ALL_FEATURE_FLAGS: readonly FeatureFlag[];
6
6
  /** Check whether a string is a valid FeatureFlag. */
@@ -25,14 +25,17 @@ export declare const FEATURE_METADATA: Record<FeatureFlag, {
25
25
  * @param isSuperAdmin - Whether the user has the global super-admin flag
26
26
  * @returns Sorted array of enabled feature flags
27
27
  */
28
- export declare function resolveUserFeatures(tier: QuotaTier, featureOverrides?: Record<string, boolean> | null, isSuperAdmin?: boolean): FeatureFlag[];
28
+ export declare function resolveUserFeatures(tier: QuotaTier, featureOverrides?: Record<string, boolean> | null, isSuperAdmin?: boolean, accountFeatures?: readonly string[] | null): FeatureFlag[];
29
29
  /**
30
- * Check if a specific feature is enabled for a user.
30
+ * Check if a specific feature is enabled for a user. Delegates to
31
+ * {@link resolveUserFeatures} so it stays in lockstep — including account-level
32
+ * entitlements purchased via add-on bundles (`accountFeatures`).
31
33
  *
32
34
  * @param tier - The organization's quota tier
33
35
  * @param feature - The feature flag to check
34
36
  * @param featureOverrides - Per-user overrides
35
37
  * @param isSuperAdmin - Whether the user has the global super-admin flag
38
+ * @param accountFeatures - Account-level entitlements (e.g. bundle-granted)
36
39
  * @returns true if the feature is enabled
37
40
  */
38
- export declare function hasFeature(tier: QuotaTier, feature: FeatureFlag, featureOverrides?: Record<string, boolean> | null, isSuperAdmin?: boolean): boolean;
41
+ export declare function hasFeature(tier: QuotaTier, feature: FeatureFlag, featureOverrides?: Record<string, boolean> | null, isSuperAdmin?: boolean, accountFeatures?: readonly string[] | null): boolean;
@@ -7,6 +7,7 @@ export const ALL_FEATURE_FLAGS = [
7
7
  'bulk_operations',
8
8
  'custom_integrations',
9
9
  'audit_log',
10
+ 'sso',
10
11
  ];
11
12
  /** Check whether a string is a valid FeatureFlag. */
12
13
  export function isValidFeatureFlag(value) {
@@ -17,7 +18,10 @@ export function isValidFeatureFlag(value) {
17
18
  export const TIER_FEATURES = {
18
19
  developer: [],
19
20
  pro: ['priority_support', 'ai_generation', 'bulk_operations'],
20
- unlimited: [...ALL_FEATURE_FLAGS],
21
+ // Team adds audit_log (collaboration/governance); Enterprise unlocks all,
22
+ // including custom_integrations.
23
+ team: ['priority_support', 'ai_generation', 'bulk_operations', 'audit_log'],
24
+ enterprise: [...ALL_FEATURE_FLAGS],
21
25
  };
22
26
  // Feature metadata (for display)
23
27
  /** Human-readable metadata for each feature flag. */
@@ -42,6 +46,10 @@ export const FEATURE_METADATA = {
42
46
  label: 'Audit Log',
43
47
  description: 'Detailed audit trail of all user and system actions',
44
48
  },
49
+ sso: {
50
+ label: 'SSO / IdP',
51
+ description: 'Single sign-on and external identity-provider configurations',
52
+ },
45
53
  };
46
54
  // Resolution logic
47
55
  /**
@@ -57,12 +65,20 @@ export const FEATURE_METADATA = {
57
65
  * @param isSuperAdmin - Whether the user has the global super-admin flag
58
66
  * @returns Sorted array of enabled feature flags
59
67
  */
60
- export function resolveUserFeatures(tier, featureOverrides, isSuperAdmin) {
68
+ export function resolveUserFeatures(tier, featureOverrides, isSuperAdmin, accountFeatures) {
61
69
  // Sysadmins get everything regardless of tier.
62
70
  if (isSuperAdmin)
63
71
  return [...ALL_FEATURE_FLAGS];
64
72
  // Start with tier defaults
65
73
  const features = new Set(TIER_FEATURES[tier] ?? []);
74
+ // Account-level entitlements (purchased feature bundles — audit_log/sso).
75
+ // Applied before per-user overrides so an explicit user override still wins.
76
+ if (accountFeatures) {
77
+ for (const key of accountFeatures) {
78
+ if (isValidFeatureFlag(key))
79
+ features.add(key);
80
+ }
81
+ }
66
82
  // Apply per-user overrides
67
83
  if (featureOverrides) {
68
84
  for (const [key, enabled] of Object.entries(featureOverrides)) {
@@ -80,22 +96,18 @@ export function resolveUserFeatures(tier, featureOverrides, isSuperAdmin) {
80
96
  return ALL_FEATURE_FLAGS.filter(f => features.has(f));
81
97
  }
82
98
  /**
83
- * Check if a specific feature is enabled for a user.
99
+ * Check if a specific feature is enabled for a user. Delegates to
100
+ * {@link resolveUserFeatures} so it stays in lockstep — including account-level
101
+ * entitlements purchased via add-on bundles (`accountFeatures`).
84
102
  *
85
103
  * @param tier - The organization's quota tier
86
104
  * @param feature - The feature flag to check
87
105
  * @param featureOverrides - Per-user overrides
88
106
  * @param isSuperAdmin - Whether the user has the global super-admin flag
107
+ * @param accountFeatures - Account-level entitlements (e.g. bundle-granted)
89
108
  * @returns true if the feature is enabled
90
109
  */
91
- export function hasFeature(tier, feature, featureOverrides, isSuperAdmin) {
92
- if (isSuperAdmin)
93
- return true;
94
- // Check override first
95
- if (featureOverrides && feature in featureOverrides) {
96
- return featureOverrides[feature];
97
- }
98
- // Fall back to tier default
99
- return (TIER_FEATURES[tier] ?? []).includes(feature);
110
+ export function hasFeature(tier, feature, featureOverrides, isSuperAdmin, accountFeatures) {
111
+ return resolveUserFeatures(tier, featureOverrides, isSuperAdmin, accountFeatures).includes(feature);
100
112
  }
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1mbGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9mZWF0dXJlLWZsYWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFjdEMsZ0VBQWdFO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUEyQjtJQUN2RCxrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixxQkFBcUI7SUFDckIsV0FBVztDQUNaLENBQUM7QUFFRixxREFBcUQ7QUFDckQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQWE7SUFDOUMsT0FBUSxpQkFBdUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELDBCQUEwQjtBQUUxQixpREFBaUQ7QUFDakQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUE4QztJQUN0RSxTQUFTLEVBQUUsRUFBRTtJQUNiLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQztJQUM3RCxTQUFTLEVBQUUsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0NBQ2xDLENBQUM7QUFFRixpQ0FBaUM7QUFFakMscURBQXFEO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFnRTtJQUMzRixnQkFBZ0IsRUFBRTtRQUNoQixLQUFLLEVBQUUsa0JBQWtCO1FBQ3pCLFdBQVcsRUFBRSxzREFBc0Q7S0FDcEU7SUFDRCxhQUFhLEVBQUU7UUFDYixLQUFLLEVBQUUsZUFBZTtRQUN0QixXQUFXLEVBQUUsMkNBQTJDO0tBQ3pEO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsS0FBSyxFQUFFLGlCQUFpQjtRQUN4QixXQUFXLEVBQUUsNERBQTREO0tBQzFFO0lBQ0QsbUJBQW1CLEVBQUU7UUFDbkIsS0FBSyxFQUFFLHFCQUFxQjtRQUM1QixXQUFXLEVBQUUsMkRBQTJEO0tBQ3pFO0lBQ0QsU0FBUyxFQUFFO1FBQ1QsS0FBSyxFQUFFLFdBQVc7UUFDbEIsV0FBVyxFQUFFLHFEQUFxRDtLQUNuRTtDQUNGLENBQUM7QUFFRixtQkFBbUI7QUFFbkI7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxJQUFlLEVBQ2YsZ0JBQWlELEVBQ2pELFlBQXNCO0lBRXRCLCtDQUErQztJQUMvQyxJQUFJLFlBQVk7UUFBRSxPQUFPLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO0lBRWhELDJCQUEyQjtJQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBYyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFFakUsMkJBQTJCO0lBQzNCLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNyQixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDOUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQztnQkFBRSxTQUFTO1lBQ3ZDLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FDeEIsSUFBZSxFQUNmLE9BQW9CLEVBQ3BCLGdCQUFpRCxFQUNqRCxZQUFzQjtJQUV0QixJQUFJLFlBQVk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUU5Qix1QkFBdUI7SUFDdkIsSUFBSSxnQkFBZ0IsSUFBSSxPQUFPLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNwRCxPQUFPLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFF1b3RhVGllciB9IGZyb20gJy4vcXVvdGEtdGllcnMuanMnO1xuXG4vLyBGZWF0dXJlIGZsYWcgaWRlbnRpZmllcnNcblxuLyoqIENhbm9uaWNhbCBmZWF0dXJlIGZsYWcgaWRlbnRpZmllcnMuICovXG5leHBvcnQgdHlwZSBGZWF0dXJlRmxhZyA9XG4gIHwgJ3ByaW9yaXR5X3N1cHBvcnQnXG4gIHwgJ2N1c3RvbV9pbnRlZ3JhdGlvbnMnXG4gIHwgJ2FpX2dlbmVyYXRpb24nXG4gIHwgJ2J1bGtfb3BlcmF0aW9ucydcbiAgfCAnYXVkaXRfbG9nJztcblxuLyoqIEFsbCB2YWxpZCBmZWF0dXJlIGZsYWdzIChvcmRlciBkZXRlcm1pbmVzIGRpc3BsYXkgb3JkZXIpLiAqL1xuZXhwb3J0IGNvbnN0IEFMTF9GRUFUVVJFX0ZMQUdTOiByZWFkb25seSBGZWF0dXJlRmxhZ1tdID0gW1xuICAncHJpb3JpdHlfc3VwcG9ydCcsXG4gICdhaV9nZW5lcmF0aW9uJyxcbiAgJ2J1bGtfb3BlcmF0aW9ucycsXG4gICdjdXN0b21faW50ZWdyYXRpb25zJyxcbiAgJ2F1ZGl0X2xvZycsXG5dO1xuXG4vKiogQ2hlY2sgd2hldGhlciBhIHN0cmluZyBpcyBhIHZhbGlkIEZlYXR1cmVGbGFnLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRGZWF0dXJlRmxhZyh2YWx1ZTogc3RyaW5nKTogdmFsdWUgaXMgRmVhdHVyZUZsYWcge1xuICByZXR1cm4gKEFMTF9GRUFUVVJFX0ZMQUdTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyh2YWx1ZSk7XG59XG5cbi8vIFRpZXItdG8tZmVhdHVyZSBtYXBwaW5nXG5cbi8qKiBGZWF0dXJlcyBlbmFibGVkIGJ5IGRlZmF1bHQgZm9yIGVhY2ggdGllci4gKi9cbmV4cG9ydCBjb25zdCBUSUVSX0ZFQVRVUkVTOiBSZWNvcmQ8UXVvdGFUaWVyLCByZWFkb25seSBGZWF0dXJlRmxhZ1tdPiA9IHtcbiAgZGV2ZWxvcGVyOiBbXSxcbiAgcHJvOiBbJ3ByaW9yaXR5X3N1cHBvcnQnLCAnYWlfZ2VuZXJhdGlvbicsICdidWxrX29wZXJhdGlvbnMnXSxcbiAgdW5saW1pdGVkOiBbLi4uQUxMX0ZFQVRVUkVfRkxBR1NdLFxufTtcblxuLy8gRmVhdHVyZSBtZXRhZGF0YSAoZm9yIGRpc3BsYXkpXG5cbi8qKiBIdW1hbi1yZWFkYWJsZSBtZXRhZGF0YSBmb3IgZWFjaCBmZWF0dXJlIGZsYWcuICovXG5leHBvcnQgY29uc3QgRkVBVFVSRV9NRVRBREFUQTogUmVjb3JkPEZlYXR1cmVGbGFnLCB7IGxhYmVsOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfT4gPSB7XG4gIHByaW9yaXR5X3N1cHBvcnQ6IHtcbiAgICBsYWJlbDogJ1ByaW9yaXR5IFN1cHBvcnQnLFxuICAgIGRlc2NyaXB0aW9uOiAnRmFzdGVyIHJlc3BvbnNlIHRpbWVzIGFuZCBkZWRpY2F0ZWQgc3VwcG9ydCBjaGFubmVscycsXG4gIH0sXG4gIGFpX2dlbmVyYXRpb246IHtcbiAgICBsYWJlbDogJ0FJIEdlbmVyYXRpb24nLFxuICAgIGRlc2NyaXB0aW9uOiAnQUktcG93ZXJlZCBwaXBlbGluZSBhbmQgcGx1Z2luIGdlbmVyYXRpb24nLFxuICB9LFxuICBidWxrX29wZXJhdGlvbnM6IHtcbiAgICBsYWJlbDogJ0J1bGsgT3BlcmF0aW9ucycsXG4gICAgZGVzY3JpcHRpb246ICdCYXRjaCBjcmVhdGUsIHVwZGF0ZSwgYW5kIGRlbGV0ZSBmb3IgcGlwZWxpbmVzIGFuZCBwbHVnaW5zJyxcbiAgfSxcbiAgY3VzdG9tX2ludGVncmF0aW9uczoge1xuICAgIGxhYmVsOiAnQ3VzdG9tIEludGVncmF0aW9ucycsXG4gICAgZGVzY3JpcHRpb246ICdDb25uZWN0IHRvIGV4dGVybmFsIHNlcnZpY2VzIGFuZCBjdXN0b20gd2ViaG9vayBlbmRwb2ludHMnLFxuICB9LFxuICBhdWRpdF9sb2c6IHtcbiAgICBsYWJlbDogJ0F1ZGl0IExvZycsXG4gICAgZGVzY3JpcHRpb246ICdEZXRhaWxlZCBhdWRpdCB0cmFpbCBvZiBhbGwgdXNlciBhbmQgc3lzdGVtIGFjdGlvbnMnLFxuICB9LFxufTtcblxuLy8gUmVzb2x1dGlvbiBsb2dpY1xuXG4vKipcbiAqIFJlc29sdmUgYSB1c2VyJ3MgZWZmZWN0aXZlIGZlYXR1cmUgc2V0LlxuICpcbiAqIDEuIFN5c2FkbWlucyAoaXNTdXBlckFkbWluKSBhbHdheXMgZ2V0IEFMTCBmZWF0dXJlcy5cbiAqIDIuIFN0YXJ0IHdpdGggdGhlIHRpZXIncyBkZWZhdWx0IGZlYXR1cmVzLlxuICogMy4gQXBwbHkgcGVyLXVzZXIgb3ZlcnJpZGVzOiBgdHJ1ZWAgYWRkcyBhIGZlYXR1cmUsIGBmYWxzZWAgcmVtb3ZlcyBpdC5cbiAqIDQuIEludmFsaWQgb3ZlcnJpZGUga2V5cyBhcmUgc2lsZW50bHkgaWdub3JlZC5cbiAqXG4gKiBAcGFyYW0gdGllciAtIFRoZSBvcmdhbml6YXRpb24ncyBxdW90YSB0aWVyXG4gKiBAcGFyYW0gZmVhdHVyZU92ZXJyaWRlcyAtIFBlci11c2VyIG92ZXJyaWRlcyAoa2V5ID0gZmVhdHVyZSBmbGFnLCB2YWx1ZSA9IGVuYWJsZWQpXG4gKiBAcGFyYW0gaXNTdXBlckFkbWluIC0gV2hldGhlciB0aGUgdXNlciBoYXMgdGhlIGdsb2JhbCBzdXBlci1hZG1pbiBmbGFnXG4gKiBAcmV0dXJucyBTb3J0ZWQgYXJyYXkgb2YgZW5hYmxlZCBmZWF0dXJlIGZsYWdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVXNlckZlYXR1cmVzKFxuICB0aWVyOiBRdW90YVRpZXIsXG4gIGZlYXR1cmVPdmVycmlkZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB8IG51bGwsXG4gIGlzU3VwZXJBZG1pbj86IGJvb2xlYW4sXG4pOiBGZWF0dXJlRmxhZ1tdIHtcbiAgLy8gU3lzYWRtaW5zIGdldCBldmVyeXRoaW5nIHJlZ2FyZGxlc3Mgb2YgdGllci5cbiAgaWYgKGlzU3VwZXJBZG1pbikgcmV0dXJuIFsuLi5BTExfRkVBVFVSRV9GTEFHU107XG5cbiAgLy8gU3RhcnQgd2l0aCB0aWVyIGRlZmF1bHRzXG4gIGNvbnN0IGZlYXR1cmVzID0gbmV3IFNldDxGZWF0dXJlRmxhZz4oVElFUl9GRUFUVVJFU1t0aWVyXSA/PyBbXSk7XG5cbiAgLy8gQXBwbHkgcGVyLXVzZXIgb3ZlcnJpZGVzXG4gIGlmIChmZWF0dXJlT3ZlcnJpZGVzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBlbmFibGVkXSBvZiBPYmplY3QuZW50cmllcyhmZWF0dXJlT3ZlcnJpZGVzKSkge1xuICAgICAgaWYgKCFpc1ZhbGlkRmVhdHVyZUZsYWcoa2V5KSkgY29udGludWU7XG4gICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICBmZWF0dXJlcy5hZGQoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZlYXR1cmVzLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybiBpbiBjYW5vbmljYWwgb3JkZXJcbiAgcmV0dXJuIEFMTF9GRUFUVVJFX0ZMQUdTLmZpbHRlcihmID0+IGZlYXR1cmVzLmhhcyhmKSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzcGVjaWZpYyBmZWF0dXJlIGlzIGVuYWJsZWQgZm9yIGEgdXNlci5cbiAqXG4gKiBAcGFyYW0gdGllciAtIFRoZSBvcmdhbml6YXRpb24ncyBxdW90YSB0aWVyXG4gKiBAcGFyYW0gZmVhdHVyZSAtIFRoZSBmZWF0dXJlIGZsYWcgdG8gY2hlY2tcbiAqIEBwYXJhbSBmZWF0dXJlT3ZlcnJpZGVzIC0gUGVyLXVzZXIgb3ZlcnJpZGVzXG4gKiBAcGFyYW0gaXNTdXBlckFkbWluIC0gV2hldGhlciB0aGUgdXNlciBoYXMgdGhlIGdsb2JhbCBzdXBlci1hZG1pbiBmbGFnXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0ZlYXR1cmUoXG4gIHRpZXI6IFF1b3RhVGllcixcbiAgZmVhdHVyZTogRmVhdHVyZUZsYWcsXG4gIGZlYXR1cmVPdmVycmlkZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB8IG51bGwsXG4gIGlzU3VwZXJBZG1pbj86IGJvb2xlYW4sXG4pOiBib29sZWFuIHtcbiAgaWYgKGlzU3VwZXJBZG1pbikgcmV0dXJuIHRydWU7XG5cbiAgLy8gQ2hlY2sgb3ZlcnJpZGUgZmlyc3RcbiAgaWYgKGZlYXR1cmVPdmVycmlkZXMgJiYgZmVhdHVyZSBpbiBmZWF0dXJlT3ZlcnJpZGVzKSB7XG4gICAgcmV0dXJuIGZlYXR1cmVPdmVycmlkZXNbZmVhdHVyZV07XG4gIH1cblxuICAvLyBGYWxsIGJhY2sgdG8gdGllciBkZWZhdWx0XG4gIHJldHVybiAoVElFUl9GRUFUVVJFU1t0aWVyXSA/PyBbXSkuaW5jbHVkZXMoZmVhdHVyZSk7XG59XG4iXX0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1mbGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9mZWF0dXJlLWZsYWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFldEMsZ0VBQWdFO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUEyQjtJQUN2RCxrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixxQkFBcUI7SUFDckIsV0FBVztJQUNYLEtBQUs7Q0FDTixDQUFDO0FBRUYscURBQXFEO0FBQ3JELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFhO0lBQzlDLE9BQVEsaUJBQXVDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCwwQkFBMEI7QUFFMUIsaURBQWlEO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBOEM7SUFDdEUsU0FBUyxFQUFFLEVBQUU7SUFDYixHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLENBQUM7SUFDN0QsMEVBQTBFO0lBQzFFLGlDQUFpQztJQUNqQyxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxDQUFDO0lBQzNFLFVBQVUsRUFBRSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7Q0FDbkMsQ0FBQztBQUVGLGlDQUFpQztBQUVqQyxxREFBcUQ7QUFDckQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQWdFO0lBQzNGLGdCQUFnQixFQUFFO1FBQ2hCLEtBQUssRUFBRSxrQkFBa0I7UUFDekIsV0FBVyxFQUFFLHNEQUFzRDtLQUNwRTtJQUNELGFBQWEsRUFBRTtRQUNiLEtBQUssRUFBRSxlQUFlO1FBQ3RCLFdBQVcsRUFBRSwyQ0FBMkM7S0FDekQ7SUFDRCxlQUFlLEVBQUU7UUFDZixLQUFLLEVBQUUsaUJBQWlCO1FBQ3hCLFdBQVcsRUFBRSw0REFBNEQ7S0FDMUU7SUFDRCxtQkFBbUIsRUFBRTtRQUNuQixLQUFLLEVBQUUscUJBQXFCO1FBQzVCLFdBQVcsRUFBRSwyREFBMkQ7S0FDekU7SUFDRCxTQUFTLEVBQUU7UUFDVCxLQUFLLEVBQUUsV0FBVztRQUNsQixXQUFXLEVBQUUscURBQXFEO0tBQ25FO0lBQ0QsR0FBRyxFQUFFO1FBQ0gsS0FBSyxFQUFFLFdBQVc7UUFDbEIsV0FBVyxFQUFFLDhEQUE4RDtLQUM1RTtDQUNGLENBQUM7QUFFRixtQkFBbUI7QUFFbkI7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxJQUFlLEVBQ2YsZ0JBQWlELEVBQ2pELFlBQXNCLEVBQ3RCLGVBQTBDO0lBRTFDLCtDQUErQztJQUMvQyxJQUFJLFlBQVk7UUFBRSxPQUFPLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO0lBRWhELDJCQUEyQjtJQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBYyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFFakUsMEVBQTBFO0lBQzFFLDZFQUE2RTtJQUM3RSxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLEtBQUssTUFBTSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDbEMsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDckIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQzlELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsU0FBUztZQUN2QyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsNEJBQTRCO0lBQzVCLE9BQU8saUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLElBQWUsRUFDZixPQUFvQixFQUNwQixnQkFBaUQsRUFDakQsWUFBc0IsRUFDdEIsZUFBMEM7SUFFMUMsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgUXVvdGFUaWVyIH0gZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5cbi8vIEZlYXR1cmUgZmxhZyBpZGVudGlmaWVyc1xuXG4vKiogQ2Fub25pY2FsIGZlYXR1cmUgZmxhZyBpZGVudGlmaWVycy4gKi9cbmV4cG9ydCB0eXBlIEZlYXR1cmVGbGFnID1cbiAgfCAncHJpb3JpdHlfc3VwcG9ydCdcbiAgfCAnY3VzdG9tX2ludGVncmF0aW9ucydcbiAgfCAnYWlfZ2VuZXJhdGlvbidcbiAgfCAnYnVsa19vcGVyYXRpb25zJ1xuICB8ICdhdWRpdF9sb2cnXG4gIHwgJ3Nzbyc7XG5cbi8qKiBBbGwgdmFsaWQgZmVhdHVyZSBmbGFncyAob3JkZXIgZGV0ZXJtaW5lcyBkaXNwbGF5IG9yZGVyKS4gKi9cbmV4cG9ydCBjb25zdCBBTExfRkVBVFVSRV9GTEFHUzogcmVhZG9ubHkgRmVhdHVyZUZsYWdbXSA9IFtcbiAgJ3ByaW9yaXR5X3N1cHBvcnQnLFxuICAnYWlfZ2VuZXJhdGlvbicsXG4gICdidWxrX29wZXJhdGlvbnMnLFxuICAnY3VzdG9tX2ludGVncmF0aW9ucycsXG4gICdhdWRpdF9sb2cnLFxuICAnc3NvJyxcbl07XG5cbi8qKiBDaGVjayB3aGV0aGVyIGEgc3RyaW5nIGlzIGEgdmFsaWQgRmVhdHVyZUZsYWcuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEZlYXR1cmVGbGFnKHZhbHVlOiBzdHJpbmcpOiB2YWx1ZSBpcyBGZWF0dXJlRmxhZyB7XG4gIHJldHVybiAoQUxMX0ZFQVRVUkVfRkxBR1MgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHZhbHVlKTtcbn1cblxuLy8gVGllci10by1mZWF0dXJlIG1hcHBpbmdcblxuLyoqIEZlYXR1cmVzIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgZWFjaCB0aWVyLiAqL1xuZXhwb3J0IGNvbnN0IFRJRVJfRkVBVFVSRVM6IFJlY29yZDxRdW90YVRpZXIsIHJlYWRvbmx5IEZlYXR1cmVGbGFnW10+ID0ge1xuICBkZXZlbG9wZXI6IFtdLFxuICBwcm86IFsncHJpb3JpdHlfc3VwcG9ydCcsICdhaV9nZW5lcmF0aW9uJywgJ2J1bGtfb3BlcmF0aW9ucyddLFxuICAvLyBUZWFtIGFkZHMgYXVkaXRfbG9nIChjb2xsYWJvcmF0aW9uL2dvdmVybmFuY2UpOyBFbnRlcnByaXNlIHVubG9ja3MgYWxsLFxuICAvLyBpbmNsdWRpbmcgY3VzdG9tX2ludGVncmF0aW9ucy5cbiAgdGVhbTogWydwcmlvcml0eV9zdXBwb3J0JywgJ2FpX2dlbmVyYXRpb24nLCAnYnVsa19vcGVyYXRpb25zJywgJ2F1ZGl0X2xvZyddLFxuICBlbnRlcnByaXNlOiBbLi4uQUxMX0ZFQVRVUkVfRkxBR1NdLFxufTtcblxuLy8gRmVhdHVyZSBtZXRhZGF0YSAoZm9yIGRpc3BsYXkpXG5cbi8qKiBIdW1hbi1yZWFkYWJsZSBtZXRhZGF0YSBmb3IgZWFjaCBmZWF0dXJlIGZsYWcuICovXG5leHBvcnQgY29uc3QgRkVBVFVSRV9NRVRBREFUQTogUmVjb3JkPEZlYXR1cmVGbGFnLCB7IGxhYmVsOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfT4gPSB7XG4gIHByaW9yaXR5X3N1cHBvcnQ6IHtcbiAgICBsYWJlbDogJ1ByaW9yaXR5IFN1cHBvcnQnLFxuICAgIGRlc2NyaXB0aW9uOiAnRmFzdGVyIHJlc3BvbnNlIHRpbWVzIGFuZCBkZWRpY2F0ZWQgc3VwcG9ydCBjaGFubmVscycsXG4gIH0sXG4gIGFpX2dlbmVyYXRpb246IHtcbiAgICBsYWJlbDogJ0FJIEdlbmVyYXRpb24nLFxuICAgIGRlc2NyaXB0aW9uOiAnQUktcG93ZXJlZCBwaXBlbGluZSBhbmQgcGx1Z2luIGdlbmVyYXRpb24nLFxuICB9LFxuICBidWxrX29wZXJhdGlvbnM6IHtcbiAgICBsYWJlbDogJ0J1bGsgT3BlcmF0aW9ucycsXG4gICAgZGVzY3JpcHRpb246ICdCYXRjaCBjcmVhdGUsIHVwZGF0ZSwgYW5kIGRlbGV0ZSBmb3IgcGlwZWxpbmVzIGFuZCBwbHVnaW5zJyxcbiAgfSxcbiAgY3VzdG9tX2ludGVncmF0aW9uczoge1xuICAgIGxhYmVsOiAnQ3VzdG9tIEludGVncmF0aW9ucycsXG4gICAgZGVzY3JpcHRpb246ICdDb25uZWN0IHRvIGV4dGVybmFsIHNlcnZpY2VzIGFuZCBjdXN0b20gd2ViaG9vayBlbmRwb2ludHMnLFxuICB9LFxuICBhdWRpdF9sb2c6IHtcbiAgICBsYWJlbDogJ0F1ZGl0IExvZycsXG4gICAgZGVzY3JpcHRpb246ICdEZXRhaWxlZCBhdWRpdCB0cmFpbCBvZiBhbGwgdXNlciBhbmQgc3lzdGVtIGFjdGlvbnMnLFxuICB9LFxuICBzc286IHtcbiAgICBsYWJlbDogJ1NTTyAvIElkUCcsXG4gICAgZGVzY3JpcHRpb246ICdTaW5nbGUgc2lnbi1vbiBhbmQgZXh0ZXJuYWwgaWRlbnRpdHktcHJvdmlkZXIgY29uZmlndXJhdGlvbnMnLFxuICB9LFxufTtcblxuLy8gUmVzb2x1dGlvbiBsb2dpY1xuXG4vKipcbiAqIFJlc29sdmUgYSB1c2VyJ3MgZWZmZWN0aXZlIGZlYXR1cmUgc2V0LlxuICpcbiAqIDEuIFN5c2FkbWlucyAoaXNTdXBlckFkbWluKSBhbHdheXMgZ2V0IEFMTCBmZWF0dXJlcy5cbiAqIDIuIFN0YXJ0IHdpdGggdGhlIHRpZXIncyBkZWZhdWx0IGZlYXR1cmVzLlxuICogMy4gQXBwbHkgcGVyLXVzZXIgb3ZlcnJpZGVzOiBgdHJ1ZWAgYWRkcyBhIGZlYXR1cmUsIGBmYWxzZWAgcmVtb3ZlcyBpdC5cbiAqIDQuIEludmFsaWQgb3ZlcnJpZGUga2V5cyBhcmUgc2lsZW50bHkgaWdub3JlZC5cbiAqXG4gKiBAcGFyYW0gdGllciAtIFRoZSBvcmdhbml6YXRpb24ncyBxdW90YSB0aWVyXG4gKiBAcGFyYW0gZmVhdHVyZU92ZXJyaWRlcyAtIFBlci11c2VyIG92ZXJyaWRlcyAoa2V5ID0gZmVhdHVyZSBmbGFnLCB2YWx1ZSA9IGVuYWJsZWQpXG4gKiBAcGFyYW0gaXNTdXBlckFkbWluIC0gV2hldGhlciB0aGUgdXNlciBoYXMgdGhlIGdsb2JhbCBzdXBlci1hZG1pbiBmbGFnXG4gKiBAcmV0dXJucyBTb3J0ZWQgYXJyYXkgb2YgZW5hYmxlZCBmZWF0dXJlIGZsYWdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVXNlckZlYXR1cmVzKFxuICB0aWVyOiBRdW90YVRpZXIsXG4gIGZlYXR1cmVPdmVycmlkZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB8IG51bGwsXG4gIGlzU3VwZXJBZG1pbj86IGJvb2xlYW4sXG4gIGFjY291bnRGZWF0dXJlcz86IHJlYWRvbmx5IHN0cmluZ1tdIHwgbnVsbCxcbik6IEZlYXR1cmVGbGFnW10ge1xuICAvLyBTeXNhZG1pbnMgZ2V0IGV2ZXJ5dGhpbmcgcmVnYXJkbGVzcyBvZiB0aWVyLlxuICBpZiAoaXNTdXBlckFkbWluKSByZXR1cm4gWy4uLkFMTF9GRUFUVVJFX0ZMQUdTXTtcblxuICAvLyBTdGFydCB3aXRoIHRpZXIgZGVmYXVsdHNcbiAgY29uc3QgZmVhdHVyZXMgPSBuZXcgU2V0PEZlYXR1cmVGbGFnPihUSUVSX0ZFQVRVUkVTW3RpZXJdID8/IFtdKTtcblxuICAvLyBBY2NvdW50LWxldmVsIGVudGl0bGVtZW50cyAocHVyY2hhc2VkIGZlYXR1cmUgYnVuZGxlcyDigJQgYXVkaXRfbG9nL3NzbykuXG4gIC8vIEFwcGxpZWQgYmVmb3JlIHBlci11c2VyIG92ZXJyaWRlcyBzbyBhbiBleHBsaWNpdCB1c2VyIG92ZXJyaWRlIHN0aWxsIHdpbnMuXG4gIGlmIChhY2NvdW50RmVhdHVyZXMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBhY2NvdW50RmVhdHVyZXMpIHtcbiAgICAgIGlmIChpc1ZhbGlkRmVhdHVyZUZsYWcoa2V5KSkgZmVhdHVyZXMuYWRkKGtleSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQXBwbHkgcGVyLXVzZXIgb3ZlcnJpZGVzXG4gIGlmIChmZWF0dXJlT3ZlcnJpZGVzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBlbmFibGVkXSBvZiBPYmplY3QuZW50cmllcyhmZWF0dXJlT3ZlcnJpZGVzKSkge1xuICAgICAgaWYgKCFpc1ZhbGlkRmVhdHVyZUZsYWcoa2V5KSkgY29udGludWU7XG4gICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICBmZWF0dXJlcy5hZGQoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZlYXR1cmVzLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybiBpbiBjYW5vbmljYWwgb3JkZXJcbiAgcmV0dXJuIEFMTF9GRUFUVVJFX0ZMQUdTLmZpbHRlcihmID0+IGZlYXR1cmVzLmhhcyhmKSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzcGVjaWZpYyBmZWF0dXJlIGlzIGVuYWJsZWQgZm9yIGEgdXNlci4gRGVsZWdhdGVzIHRvXG4gKiB7QGxpbmsgcmVzb2x2ZVVzZXJGZWF0dXJlc30gc28gaXQgc3RheXMgaW4gbG9ja3N0ZXAg4oCUIGluY2x1ZGluZyBhY2NvdW50LWxldmVsXG4gKiBlbnRpdGxlbWVudHMgcHVyY2hhc2VkIHZpYSBhZGQtb24gYnVuZGxlcyAoYGFjY291bnRGZWF0dXJlc2ApLlxuICpcbiAqIEBwYXJhbSB0aWVyIC0gVGhlIG9yZ2FuaXphdGlvbidzIHF1b3RhIHRpZXJcbiAqIEBwYXJhbSBmZWF0dXJlIC0gVGhlIGZlYXR1cmUgZmxhZyB0byBjaGVja1xuICogQHBhcmFtIGZlYXR1cmVPdmVycmlkZXMgLSBQZXItdXNlciBvdmVycmlkZXNcbiAqIEBwYXJhbSBpc1N1cGVyQWRtaW4gLSBXaGV0aGVyIHRoZSB1c2VyIGhhcyB0aGUgZ2xvYmFsIHN1cGVyLWFkbWluIGZsYWdcbiAqIEBwYXJhbSBhY2NvdW50RmVhdHVyZXMgLSBBY2NvdW50LWxldmVsIGVudGl0bGVtZW50cyAoZS5nLiBidW5kbGUtZ3JhbnRlZClcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRmVhdHVyZShcbiAgdGllcjogUXVvdGFUaWVyLFxuICBmZWF0dXJlOiBGZWF0dXJlRmxhZyxcbiAgZmVhdHVyZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHwgbnVsbCxcbiAgaXNTdXBlckFkbWluPzogYm9vbGVhbixcbiAgYWNjb3VudEZlYXR1cmVzPzogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiByZXNvbHZlVXNlckZlYXR1cmVzKHRpZXIsIGZlYXR1cmVPdmVycmlkZXMsIGlzU3VwZXJBZG1pbiwgYWNjb3VudEZlYXR1cmVzKS5pbmNsdWRlcyhmZWF0dXJlKTtcbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  /** Available quota tier identifiers. */
2
- export type QuotaTier = 'developer' | 'pro' | 'unlimited';
2
+ export type QuotaTier = 'developer' | 'pro' | 'team' | 'enterprise';
3
3
  /** Limit values for each quota type within a tier. */
4
4
  export interface QuotaTierLimits {
5
5
  plugins: number;
@@ -19,6 +19,12 @@ export interface QuotaTierLimits {
19
19
  alertRules: number;
20
20
  alertDestinations: number;
21
21
  idpConfigs: number;
22
+ /**
23
+ * Max org members (active users / seats). -1 = unlimited. This is the "Team"
24
+ * tier differentiator — enforced at member-invite time (an invite is blocked
25
+ * when active members + pending invites would exceed this).
26
+ */
27
+ seats: number;
22
28
  }
23
29
  /** Full preset for a single tier (label + limits). */
24
30
  export interface QuotaTierPreset {
@@ -28,7 +34,11 @@ export interface QuotaTierPreset {
28
34
  export declare const QUOTA_TIERS: Record<QuotaTier, QuotaTierPreset>;
29
35
  /** All valid tier names. */
30
36
  export declare const VALID_TIERS: readonly QuotaTier[];
31
- /** Default tier assigned to new organizations. */
37
+ /**
38
+ * Default tier assigned to new organizations. Overridable via the
39
+ * `DEFAULT_QUOTA_TIER` env var (one of developer|pro|team|enterprise);
40
+ * an invalid/unset value falls back to 'developer'.
41
+ */
32
42
  export declare const DEFAULT_TIER: QuotaTier;
33
43
  /** Check whether a string is a valid QuotaTier. */
34
44
  export declare function isValidTier(value: string): value is QuotaTier;