UNPKG

@aws-cdk/aws-ivs-alpha

Version:

The CDK Construct Library for AWS::IVS

189 lines 25.2 kB
"use strict"; var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if (_ = accept(result.get)) descriptor.get = _; if (_ = accept(result.set)) descriptor.set = _; if (_ = accept(result.init)) initializers.unshift(_); } else if (_ = accept(result)) { if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) { value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); } return useValue ? value : void 0; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.RecordingConfiguration = void 0; const jsiiDeprecationWarnings = require("../.warnings.jsii.js"); const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_ivs_1 = require("aws-cdk-lib/aws-ivs"); const core_1 = require("aws-cdk-lib/core"); const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource"); const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable"); /** * The IVS Recording configuration * * @resource AWS::IVS::RecordingConfiguration */ let RecordingConfiguration = (() => { let _classDecorators = [prop_injectable_1.propertyInjectable]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; let _classSuper = core_1.Resource; var RecordingConfiguration = class extends _classSuper { static { _classThis = this; } static { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0; __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers); RecordingConfiguration = _classThis = _classDescriptor.value; if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata }); } static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ivs-alpha.RecordingConfiguration", version: "2.223.0-alpha.0" }; /** Uniquely identifies this class. */ static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ivs-alpha.RecordingConfiguration'; /** * Imports an IVS Recording Configuration from attributes. */ static fromRecordingConfigurationId(scope, id, recordingConfigurationId) { class Import extends core_1.Resource { recordingConfigurationId = recordingConfigurationId; recordingConfigurationArn = core_1.Stack.of(this).formatArn({ resource: 'recording-configuration', service: 'ivs', resourceName: recordingConfigurationId, }); } return new Import(scope, id); } /** * Imports an IVS Recording Configuration from its ARN */ static fromArn(scope, id, recordingConfigurationArn) { const resourceParts = core_1.Fn.split('/', recordingConfigurationArn); if (!resourceParts || resourceParts.length < 2) { throw new Error(`Unexpected ARN format: ${recordingConfigurationArn}`); } const recordingConfigurationId = core_1.Fn.select(1, resourceParts); class Import extends core_1.Resource { recordingConfigurationId = recordingConfigurationId; recordingConfigurationArn = recordingConfigurationArn; } return new Import(scope, id); } /** * The ID of the Recording configuration. * @attribute */ recordingConfigurationId; /** * The ARN of the Recording configuration. * @attribute */ recordingConfigurationArn; props; constructor(scope, id, props) { super(scope, id, { physicalName: props.recordingConfigurationName, }); try { jsiiDeprecationWarnings._aws_cdk_aws_ivs_alpha_RecordingConfigurationProps(props); } catch (error) { if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") { Error.captureStackTrace(error, RecordingConfiguration); } throw error; } // Enhanced CDK Analytics Telemetry (0, metadata_resource_1.addConstructMetadata)(this, props); this.props = props; this.validateRecordingConfigurationName(); this.validateRecordingReconnectWindowSeconds(); const resource = new aws_ivs_1.CfnRecordingConfiguration(this, 'Resource', { destinationConfiguration: { s3: { bucketName: this.props.bucket.bucketRef.bucketName, }, }, name: this.props.recordingConfigurationName, recordingReconnectWindowSeconds: this.props.recordingReconnectWindow?.toSeconds(), renditionConfiguration: this._renderRenditionConfiguration(), thumbnailConfiguration: this._renderThumbnailConfiguration(), }); this.recordingConfigurationId = resource.ref; this.recordingConfigurationArn = resource.attrArn; } _renderRenditionConfiguration() { if (!this.props.renditionConfiguration) { return; } return { renditions: this.props.renditionConfiguration.renditions, renditionSelection: this.props.renditionConfiguration.renditionSelection, }; } _renderThumbnailConfiguration() { if (!this.props.thumbnailConfiguration) { return; } return { recordingMode: this.props.thumbnailConfiguration.recordingMode, resolution: this.props.thumbnailConfiguration.resolution, storage: this.props.thumbnailConfiguration.storage, targetIntervalSeconds: this.props.thumbnailConfiguration.targetInterval?.toSeconds(), }; } validateRecordingConfigurationName() { const recordingConfigurationName = this.props.recordingConfigurationName; if (recordingConfigurationName == undefined || core_1.Token.isUnresolved(recordingConfigurationName)) { return; } if (!/^[a-zA-Z0-9-_]*$/.test(recordingConfigurationName)) { throw new Error(`\`recordingConfigurationName\` must consist only of alphanumeric characters, hyphens or underbars, got: ${recordingConfigurationName}.`); } if (recordingConfigurationName.length > 128) { throw new Error(`\`recordingConfigurationName\` must be less than or equal to 128 characters, got: ${recordingConfigurationName.length} characters.`); } } validateRecordingReconnectWindowSeconds() { const recordingReconnectWindow = this.props.recordingReconnectWindow; if (recordingReconnectWindow === undefined || core_1.Token.isUnresolved(recordingReconnectWindow)) { return; } if (0 < recordingReconnectWindow.toMilliseconds() && recordingReconnectWindow.toMilliseconds() < core_1.Duration.seconds(1).toMilliseconds()) { throw new Error(`\`recordingReconnectWindow\` must be between 0 and 300 seconds, got ${recordingReconnectWindow.toMilliseconds()} milliseconds.`); } if (recordingReconnectWindow.toSeconds() > 300) { throw new Error(`\`recordingReconnectWindow\` must be between 0 and 300 seconds, got ${recordingReconnectWindow.toSeconds()} seconds.`); } } static { __runInitializers(_classThis, _classExtraInitializers); } }; return RecordingConfiguration = _classThis; })(); exports.RecordingConfiguration = RecordingConfiguration; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkaW5nLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZWNvcmRpbmctY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBZ0U7QUFFaEUsMkNBQW1GO0FBSW5GLDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFpRTFFOzs7O0dBSUc7SUFFVSxzQkFBc0I7NEJBRGxDLG9DQUFrQjs7OztzQkFDeUIsZUFBUTtzQ0FBaEIsU0FBUSxXQUFROzs7O1lBQXBELDZLQTBJQzs7Ozs7UUF6SUMsc0NBQXNDO1FBQy9CLE1BQU0sQ0FBVSxxQkFBcUIsR0FBVywrQ0FBK0MsQ0FBQztRQUV2Rzs7V0FFRztRQUNJLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFDckUsd0JBQWdDO1lBQ2hDLE1BQU0sTUFBTyxTQUFRLGVBQVE7Z0JBQ1gsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7Z0JBQ3BELHlCQUF5QixHQUFHLFlBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUNuRSxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxPQUFPLEVBQUUsS0FBSztvQkFDZCxZQUFZLEVBQUUsd0JBQXdCO2lCQUN2QyxDQUFDLENBQUM7YUFDSjtZQUVELE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzlCO1FBRUQ7O1dBRUc7UUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLHlCQUFpQztZQUNuRixNQUFNLGFBQWEsR0FBRyxTQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBRS9ELElBQUksQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDL0Ms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UmVjb3JkaW5nQ29uZmlndXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pdnMnO1xuaW1wb3J0IHsgSUJ1Y2tldFJlZiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgRm4sIElSZXNvdXJjZSwgUmVzb3VyY2UsIFN0YWNrLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBSZW5kaXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSAnLi9yZW5kaXRpb24tY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBUaHVtYm5haWxDb25maWd1cmF0aW9uIH0gZnJvbSAnLi90aHVtYm5haWwtY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5cbi8qKlxuICogUHJvcGVydGllcyBvZiB0aGUgSVZTIFJlY29yZGluZyBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkaW5nQ29uZmlndXJhdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFMzIGJ1Y2tldCB3aGVyZSByZWNvcmRlZCB2aWRlb3Mgd2lsbCBiZSBzdG9yZWQuXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ6IElCdWNrZXRSZWY7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBSZWNvcmRpbmcgY29uZmlndXJhdGlvbi5cbiAgICogVGhlIHZhbHVlIGRvZXMgbm90IG5lZWQgdG8gYmUgdW5pcXVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG8gZ2VuZXJhdGVcbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZGluZ0NvbmZpZ3VyYXRpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBhIGJyb2FkY2FzdCBkaXNjb25uZWN0cyBhbmQgdGhlbiByZWNvbm5lY3RzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGludGVydmFsLFxuICAgKiB0aGUgbXVsdGlwbGUgc3RyZWFtcyB3aWxsIGJlIGNvbnNpZGVyZWQgYSBzaW5nbGUgYnJvYWRjYXN0IGFuZCBtZXJnZWQgdG9nZXRoZXIuXG4gICAqXG4gICAqIGByZWNvcmRpbmdSZWNvbm5lY3RXaW5kb3dgIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAzMDAgc2Vjb25kc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIDAgc2Vjb25kcyAobWVhbnMgZGlzYWJsZWQpXG4gICAqL1xuICByZWFkb25seSByZWNvcmRpbmdSZWNvbm5lY3RXaW5kb3c/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogQSByZW5kaXRpb24gY29uZmlndXJhdGlvbiBkZXNjcmliZXMgd2hpY2ggcmVuZGl0aW9ucyBzaG91bGQgYmUgcmVjb3JkZWQgZm9yIGEgc3RyZWFtLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWl2cy1yZWNvcmRpbmdjb25maWd1cmF0aW9uLXJlbmRpdGlvbmNvbmZpZ3VyYXRpb24uaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHJlbmRpdGlvbiBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSByZW5kaXRpb25Db25maWd1cmF0aW9uPzogUmVuZGl0aW9uQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQSB0aHVtYm5haWwgY29uZmlndXJhdGlvbiBlbmFibGVzL2Rpc2FibGVzIHRoZSByZWNvcmRpbmcgb2YgdGh1bWJuYWlscyBmb3IgYSBsaXZlIHNlc3Npb24gYW5kIGNvbnRyb2xzIHRoZSBpbnRlcnZhbCBhdCB3aGljaCB0aHVtYm5haWxzIGFyZSBnZW5lcmF0ZWQgZm9yIHRoZSBsaXZlIHNlc3Npb24uXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtaXZzLXJlY29yZGluZ2NvbmZpZ3VyYXRpb24tdGh1bWJuYWlsY29uZmlndXJhdGlvbi5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gdGh1bWJuYWlsIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHRodW1ibmFpbENvbmZpZ3VyYXRpb24/OlRodW1ibmFpbENvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgSVZTIFJlY29yZGluZyBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSZWNvcmRpbmdDb25maWd1cmF0aW9uIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgUmVjb3JkaW5nIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZGluZ0NvbmZpZ3VyYXRpb25JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBSZWNvcmRpbmcgY29uZmlndXJhdGlvbi5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3JkaW5nQ29uZmlndXJhdGlvbkFybjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBJVlMgUmVjb3JkaW5nIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpJVlM6OlJlY29yZGluZ0NvbmZpZ3VyYXRpb25cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIFJlY29yZGluZ0NvbmZpZ3VyYXRpb24gZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSZWNvcmRpbmdDb25maWd1cmF0aW9uIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtaXZzLWFscGhhLlJlY29yZGluZ0NvbmZpZ3VyYXRpb24nO1xuXG4gIC8qKlxuICAgKiBJbXBvcnRzIGFuIElWUyBSZWNvcmRpbmcgQ29uZmlndXJhdGlvbiBmcm9tIGF0dHJpYnV0ZXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21SZWNvcmRpbmdDb25maWd1cmF0aW9uSWQoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZyxcbiAgICByZWNvcmRpbmdDb25maWd1cmF0aW9uSWQ6IHN0cmluZyk6IElSZWNvcmRpbmdDb25maWd1cmF0aW9uIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSZWNvcmRpbmdDb25maWd1cmF0aW9uIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSByZWNvcmRpbmdDb25maWd1cmF0aW9uSWQgPSByZWNvcmRpbmdDb25maWd1cmF0aW9uSWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcmVjb3JkaW5nQ29uZmlndXJhdGlvbkFybiA9IFN0YWNrLm9mKHRoaXMpLmZvcm1hdEFybih7XG4gICAgICAgIHJlc291cmNlOiAncmVjb3JkaW5nLWNvbmZpZ3VyYXRpb24nLFxuICAgICAgICBzZXJ2aWNlOiAnaXZzJyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiByZWNvcmRpbmdDb25maWd1cmF0aW9uSWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgYW4gSVZTIFJlY29yZGluZyBDb25maWd1cmF0aW9uIGZyb20gaXRzIEFSTlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQXJuKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHJlY29yZGluZ0NvbmZpZ3VyYXRpb25Bcm46IHN0cmluZyk6IElSZWNvcmRpbmdDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCByZXNvdXJjZVBhcnRzID0gRm4uc3BsaXQoJy8nLCByZWNvcmRpbmdDb25maWd1cmF0aW9uQXJuKTtcblxuICAgIGlmICghcmVzb3VyY2VQYXJ0cyB8fCByZXNvdXJjZVBhcnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBBUk4gZm9ybWF0OiAke3JlY29yZGluZ0NvbmZpZ3VyYXRpb25Bcm59YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVjb3JkaW5nQ29uZmlndXJhdGlvbklkID0gRm4uc2VsZWN0KDEsIHJlc291cmNlUGFydHMpO1xuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUmVjb3JkaW5nQ29uZmlndXJhdGlvbiB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcmVjb3JkaW5nQ29uZmlndXJhdGlvbklkID0gcmVjb3JkaW5nQ29uZmlndXJhdGlvbklkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJlY29yZGluZ0NvbmZpZ3VyYXRpb25Bcm4gPSByZWNvcmRpbmdDb25maWd1cmF0aW9uQXJuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBSZWNvcmRpbmcgY29uZmlndXJhdGlvbi5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3JkaW5nQ29uZmlndXJhdGlvbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIFJlY29yZGluZyBjb25maWd1cmF0aW9uLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSByZWNvcmRpbmdDb25maWd1cmF0aW9uQXJuOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogUmVjb3JkaW5nQ29uZmlndXJhdGlvblByb3BzO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmVjb3JkaW5nQ29uZmlndXJhdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLnJlY29yZGluZ0NvbmZpZ3VyYXRpb25OYW1lLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy52YWxpZGF0ZVJlY29yZGluZ0NvbmZpZ3VyYXRpb25OYW1lKCk7XG4gICAgdGhpcy52YWxpZGF0ZVJlY29yZGluZ1JlY29ubmVjdFdpbmRvd1NlY29uZHMoKTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IENmblJlY29yZGluZ0NvbmZpZ3VyYXRpb24odGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgZGVzdGluYXRpb25Db25maWd1cmF0aW9uOiB7XG4gICAgICAgIHMzOiB7XG4gICAgICAgICAgYnVja2V0TmFtZTogdGhpcy5wcm9wcy5idWNrZXQuYnVja2V0UmVmLmJ1Y2tldE5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgbmFtZTogdGhpcy5wcm9wcy5yZWNvcmRpbmdDb25maWd1cmF0aW9uTmFtZSxcbiAgICAgIHJlY29yZGluZ1JlY29ubmVjdFdpbmRvd1NlY29uZHM6IHRoaXMucHJvcHMucmVjb3JkaW5nUmVjb25uZWN0V2luZG93Py50b1NlY29uZHMoKSxcbiAgICAgIHJlbmRpdGlvbkNvbmZpZ3VyYXRpb246IHRoaXMuX3JlbmRlclJlbmRpdGlvbkNvbmZpZ3VyYXRpb24oKSxcbiAgICAgIHRodW1ibmFpbENvbmZpZ3VyYXRpb246IHRoaXMuX3JlbmRlclRodW1ibmFpbENvbmZpZ3VyYXRpb24oKSxcbiAgICB9KTtcblxuICAgIHRoaXMucmVjb3JkaW5nQ29uZmlndXJhdGlvbklkID0gcmVzb3VyY2UucmVmO1xuICAgIHRoaXMucmVjb3JkaW5nQ29uZmlndXJhdGlvbkFybiA9IHJlc291cmNlLmF0dHJBcm47XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJSZW5kaXRpb25Db25maWd1cmF0aW9uKCk6IENmblJlY29yZGluZ0NvbmZpZ3VyYXRpb24uUmVuZGl0aW9uQ29uZmlndXJhdGlvblByb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucmVuZGl0aW9uQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZW5kaXRpb25zOiB0aGlzLnByb3BzLnJlbmRpdGlvbkNvbmZpZ3VyYXRpb24ucmVuZGl0aW9ucyxcbiAgICAgIHJlbmRpdGlvblNlbGVjdGlvbjogdGhpcy5wcm9wcy5yZW5kaXRpb25Db25maWd1cmF0aW9uLnJlbmRpdGlvblNlbGVjdGlvbixcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyVGh1bWJuYWlsQ29uZmlndXJhdGlvbigpOiBDZm5SZWNvcmRpbmdDb25maWd1cmF0aW9uLlRodW1ibmFpbENvbmZpZ3VyYXRpb25Qcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnRodW1ibmFpbENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVjb3JkaW5nTW9kZTogdGhpcy5wcm9wcy50aHVtYm5haWxDb25maWd1cmF0aW9uLnJlY29yZGluZ01vZGUsXG4gICAgICByZXNvbHV0aW9uOiB0aGlzLnByb3BzLnRodW1ibmFpbENvbmZpZ3VyYXRpb24ucmVzb2x1dGlvbixcbiAgICAgIHN0b3JhZ2U6IHRoaXMucHJvcHMudGh1bWJuYWlsQ29uZmlndXJhdGlvbi5zdG9yYWdlLFxuICAgICAgdGFyZ2V0SW50ZXJ2YWxTZWNvbmRzOiB0aGlzLnByb3BzLnRodW1ibmFpbENvbmZpZ3VyYXRpb24udGFyZ2V0SW50ZXJ2YWw/LnRvU2Vjb25kcygpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlUmVjb3JkaW5nQ29uZmlndXJhdGlvbk5hbWUoKTogdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmRpbmdDb25maWd1cmF0aW9uTmFtZSA9IHRoaXMucHJvcHMucmVjb3JkaW5nQ29uZmlndXJhdGlvbk5hbWU7XG5cbiAgICBpZiAocmVjb3JkaW5nQ29uZmlndXJhdGlvbk5hbWUgPT0gdW5kZWZpbmVkIHx8IFRva2VuLmlzVW5yZXNvbHZlZChyZWNvcmRpbmdDb25maWd1cmF0aW9uTmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIS9eW2EtekEtWjAtOS1fXSokLy50ZXN0KHJlY29yZGluZ0NvbmZpZ3VyYXRpb25OYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBcXGByZWNvcmRpbmdDb25maWd1cmF0aW9uTmFtZVxcYCBtdXN0IGNvbnNpc3Qgb25seSBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucyBvciB1bmRlcmJhcnMsIGdvdDogJHtyZWNvcmRpbmdDb25maWd1cmF0aW9uTmFtZX0uYCk7XG4gICAgfVxuXG4gICAgaWYgKHJlY29yZGluZ0NvbmZpZ3VyYXRpb25OYW1lLmxlbmd0aCA+IDEyOCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBcXGByZWNvcmRpbmdDb25maWd1cmF0aW9uTmFtZVxcYCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMjggY2hhcmFjdGVycywgZ290OiAke3JlY29yZGluZ0NvbmZpZ3VyYXRpb25OYW1lLmxlbmd0aH0gY2hhcmFjdGVycy5gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlUmVjb3JkaW5nUmVjb25uZWN0V2luZG93U2Vjb25kcygpOiB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlY29yZGluZ1JlY29ubmVjdFdpbmRvdyA9IHRoaXMucHJvcHMucmVjb3JkaW5nUmVjb25uZWN0V2luZG93O1xuXG4gICAgaWYgKHJlY29yZGluZ1JlY29ubmVjdFdpbmRvdyA9PT0gdW5kZWZpbmVkIHx8IFRva2VuLmlzVW5yZXNvbHZlZChyZWNvcmRpbmdSZWNvbm5lY3RXaW5kb3cpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKDAgPCByZWNvcmRpbmdSZWNvbm5lY3RXaW5kb3cudG9NaWxsaXNlY29uZHMoKSAmJiByZWNvcmRpbmdSZWNvbm5lY3RXaW5kb3cudG9NaWxsaXNlY29uZHMoKSA8IER1cmF0aW9uLnNlY29uZHMoMSkudG9NaWxsaXNlY29uZHMoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBcXGByZWNvcmRpbmdSZWNvbm5lY3RXaW5kb3dcXGAgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDMwMCBzZWNvbmRzLCBnb3QgJHtyZWNvcmRpbmdSZWNvbm5lY3RXaW5kb3cudG9NaWxsaXNlY29uZHMoKX0gbWlsbGlzZWNvbmRzLmApO1xuICAgIH1cblxuICAgIGlmIChyZWNvcmRpbmdSZWNvbm5lY3RXaW5kb3cudG9TZWNvbmRzKCkgPiAzMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgXFxgcmVjb3JkaW5nUmVjb25uZWN0V2luZG93XFxgIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAzMDAgc2Vjb25kcywgZ290ICR7cmVjb3JkaW5nUmVjb25uZWN0V2luZG93LnRvU2Vjb25kcygpfSBzZWNvbmRzLmApO1xuICAgIH1cbiAgfVxufVxuIl19