UNPKG

cdk8s-plus-29

Version:

cdk8s+ is a software development framework that provides high level abstractions for authoring Kubernetes applications. cdk8s-plus-29 synthesizes Kubernetes manifests for Kubernetes 1.29.0

122 lines 15.8 kB
"use strict"; var _a, _b; Object.defineProperty(exports, "__esModule", { value: true }); exports.WorkloadScheduling = exports.Workload = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const cdk8s_1 = require("cdk8s"); const pod = require("./pod"); const utils_1 = require("./utils"); /** * A workload is an application running on Kubernetes. Whether your workload is a single * component or several that work together, on Kubernetes you run it inside a set of pods. * In Kubernetes, a Pod represents a set of running containers on your cluster. */ class Workload extends pod.AbstractPod { constructor(scope, id, props) { super(scope, id, props); this._matchLabels = {}; this._matchExpressions = []; this._props = props; this.scheduling = new WorkloadScheduling(this); this.connections = new pod.PodConnections(this); this.spread = props.spread ?? false; this._matcher = cdk8s_1.Names.toLabelValue(this); if (props.select ?? true) { this.select(pod.LabelSelector.of({ labels: { [pod.Pod.ADDRESS_LABEL]: this._matcher } })); } } /** * The metadata of pods in this workload. */ get podMetadata() { if (!this._podMetadata) { this._podMetadata = new cdk8s_1.ApiObjectMetadataDefinition({ ...this._props.podMetadata, apiObject: this.apiObject, }); this._podMetadata.addLabel(pod.Pod.ADDRESS_LABEL, this._matcher); } return this._podMetadata; } /** * Configure selectors for this workload. */ select(...selectors) { for (const selector of selectors) { const kube = selector._toKube(); this._matchExpressions.push(...kube.matchExpressions ?? []); for (const [key, value] of Object.entries(kube.matchLabels ?? {})) { this._matchLabels[key] = value; } } } /** * The label matchers this workload will use in order to select pods. * * Returns a a copy. Use `select()` to add label matchers. */ get matchLabels() { return { ...this._matchLabels }; } /** * The expression matchers this workload will use in order to select pods. * * Returns a a copy. Use `select()` to add expression matchers. */ get matchExpressions() { return [...this._matchExpressions]; } /** * @internal */ _toLabelSelector() { return { matchExpressions: (0, utils_1.undefinedIfEmpty)(this._matchExpressions), matchLabels: (0, utils_1.undefinedIfEmpty)(this._matchLabels), }; } /** * @internal */ _toPodSpec() { if (this.spread) { { this.scheduling.spread({ topology: pod.Topology.HOSTNAME, }); this.scheduling.spread({ topology: pod.Topology.ZONE, }); } } ; const scheduling = this.scheduling._toKube(); return { ...super._toPodSpec(), affinity: scheduling.affinity, nodeName: scheduling.nodeName, tolerations: scheduling.tolerations, }; } } exports.Workload = Workload; _a = JSII_RTTI_SYMBOL_1; Workload[_a] = { fqn: "cdk8s-plus-29.Workload", version: "2.6.0" }; /** * Controls the pod scheduling strategy of this workload. * It offers some additional API's on top of the core pod scheduling. */ class WorkloadScheduling extends pod.PodScheduling { /** * Spread the pods in this workload by the topology key. * A spread is a separation of the pod from itself and is used to * balance out pod replicas across a given topology. */ spread(options = {}) { this.separate(this.instance, { weight: options.weight, topology: options.topology ?? pod.Topology.HOSTNAME }); } } exports.WorkloadScheduling = WorkloadScheduling; _b = JSII_RTTI_SYMBOL_1; WorkloadScheduling[_b] = { fqn: "cdk8s-plus-29.WorkloadScheduling", version: "2.6.0" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2xvYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd29ya2xvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBOEU7QUFHOUUsNkJBQTZCO0FBQzdCLG1DQUEyQztBQXFEM0M7Ozs7R0FJRztBQUNILE1BQXNCLFFBQVMsU0FBUSxHQUFHLENBQUMsV0FBVztJQWdCcEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFvQjtRQUM1RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQVRULGlCQUFZLEdBQTJCLEVBQUUsQ0FBQztRQUMxQyxzQkFBaUIsR0FBK0IsRUFBRSxDQUFDO1FBVWxFLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO1FBRXBDLElBQUksQ0FBQyxRQUFRLEdBQUcsYUFBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUYsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsV0FBVztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFlB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Q29udGVudCI6WyJpbXBvcnQgeyBBcGlPYmplY3RNZXRhZGF0YSwgQXBpT2JqZWN0TWV0YWRhdGFEZWZpbml0aW9uLCBOYW1lcyB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgazhzIGZyb20gJy4vaW1wb3J0cy9rOHMnO1xuaW1wb3J0ICogYXMgcG9kIGZyb20gJy4vcG9kJztcbmltcG9ydCB7IHVuZGVmaW5lZElmRW1wdHkgfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBgV29ya2xvYWRgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtsb2FkUHJvcHMgZXh0ZW5kcyBwb2QuQWJzdHJhY3RQb2RQcm9wcyB7XG5cbiAgLyoqXG4gICAqIFRoZSBwb2QgbWV0YWRhdGEgb2YgdGhpcyB3b3JrbG9hZC5cbiAgICovXG4gIHJlYWRvbmx5IHBvZE1ldGFkYXRhPzogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgYWxsb2NhdGVzIGEgcG9kIGxhYmVsIHNlbGVjdG9yIGZvciB0aGlzIHdvcmtsb2FkIGFuZCBhZGRcbiAgICogaXQgdG8gdGhlIHBvZCBtZXRhZGF0YS4gVGhpcyBlbnN1cmVzIHRoaXMgd29ya2xvYWQgbWFuYWdlcyBwb2RzIGNyZWF0ZWQgYnlcbiAgICogaXRzIHBvZCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZWN0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBzcHJlYWQgcG9kcyBhY3Jvc3MgaG9zdG5hbWUgYW5kIHpvbmVzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3NjaGVkdWxpbmctZXZpY3Rpb24vdG9wb2xvZ3ktc3ByZWFkLWNvbnN0cmFpbnRzLyNpbnRlcm5hbC1kZWZhdWx0LWNvbnN0cmFpbnRzXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzcHJlYWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0XG4gKiByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWJlbFNlbGVjdG9yUmVxdWlyZW1lbnQge1xuICAvKipcbiAgICogVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0b3I6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5XG4gICAqIG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbiAgICogdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgd29ya2xvYWQgaXMgYW4gYXBwbGljYXRpb24gcnVubmluZyBvbiBLdWJlcm5ldGVzLiBXaGV0aGVyIHlvdXIgd29ya2xvYWQgaXMgYSBzaW5nbGVcbiAqIGNvbXBvbmVudCBvciBzZXZlcmFsIHRoYXQgd29yayB0b2dldGhlciwgb24gS3ViZXJuZXRlcyB5b3UgcnVuIGl0IGluc2lkZSBhIHNldCBvZiBwb2RzLlxuICogSW4gS3ViZXJuZXRlcywgYSBQb2QgcmVwcmVzZW50cyBhIHNldCBvZiBydW5uaW5nIGNvbnRhaW5lcnMgb24geW91ciBjbHVzdGVyLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV29ya2xvYWQgZXh0ZW5kcyBwb2QuQWJzdHJhY3RQb2Qge1xuXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uczogcG9kLlBvZENvbm5lY3Rpb25zO1xuXG4gIHB1YmxpYyByZWFkb25seSBzY2hlZHVsaW5nOiBXb3JrbG9hZFNjaGVkdWxpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzcHJlYWQ6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbWF0Y2hMYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF0Y2hFeHByZXNzaW9uczogTGFiZWxTZWxlY3RvclJlcXVpcmVtZW50W10gPSBbXTtcblxuICBwcml2YXRlIF9wb2RNZXRhZGF0YT86IEFwaU9iamVjdE1ldGFkYXRhRGVmaW5pdGlvbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9wcm9wczogV29ya2xvYWRQcm9wcztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF0Y2hlcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBXb3JrbG9hZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLl9wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMuc2NoZWR1bGluZyA9IG5ldyBXb3JrbG9hZFNjaGVkdWxpbmcodGhpcyk7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IG5ldyBwb2QuUG9kQ29ubmVjdGlvbnModGhpcyk7XG4gICAgdGhpcy5zcHJlYWQgPSBwcm9wcy5zcHJlYWQgPz8gZmFsc2U7XG5cbiAgICB0aGlzLl9tYXRjaGVyID0gTmFtZXMudG9MYWJlbFZhbHVlKHRoaXMpO1xuXG4gICAgaWYgKHByb3BzLnNlbGVjdCA/PyB0cnVlKSB7XG4gICAgICB0aGlzLnNlbGVjdChwb2QuTGFiZWxTZWxlY3Rvci5vZih7IGxhYmVsczogeyBbcG9kLlBvZC5BRERSRVNTX0xBQkVMXTogdGhpcy5fbWF0Y2hlciB9IH0pKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1ldGFkYXRhIG9mIHBvZHMgaW4gdGhpcyB3b3JrbG9hZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcG9kTWV0YWRhdGEoKTogQXBpT2JqZWN0TWV0YWRhdGFEZWZpbml0aW9uIHtcbiAgICBpZiAoIXRoaXMuX3BvZE1ldGFkYXRhKSB7XG4gICAgICB0aGlzLl9wb2RNZXRhZGF0YSA9IG5ldyBBcGlPYmplY3RNZXRhZGF0YURlZmluaXRpb24oe1xuICAgICAgICAuLi50aGlzLl9wcm9wcy5wb2RNZXRhZGF0YSxcbiAgICAgICAgYXBpT2JqZWN0OiB0aGlzLmFwaU9iamVjdCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fcG9kTWV0YWRhdGEuYWRkTGFiZWwocG9kLlBvZC5BRERSRVNTX0xBQkVMLCB0aGlzLl9tYXRjaGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3BvZE1ldGFkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBzZWxlY3RvcnMgZm9yIHRoaXMgd29ya2xvYWQuXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0KC4uLnNlbGVjdG9yczogcG9kLkxhYmVsU2VsZWN0b3JbXSkge1xuICAgIGZvciAoY29uc3Qgc2VsZWN0b3Igb2Ygc2VsZWN0b3JzKSB7XG4gICAgICBjb25zdCBrdWJlID0gc2VsZWN0b3IuX3RvS3ViZSgpO1xuICAgICAgdGhpcy5fbWF0Y2hFeHByZXNzaW9ucy5wdXNoKC4uLmt1YmUubWF0Y2hFeHByZXNzaW9ucyA/PyBbXSk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhrdWJlLm1hdGNoTGFiZWxzID8/IHt9KSkge1xuICAgICAgICB0aGlzLl9tYXRjaExhYmVsc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBsYWJlbCBtYXRjaGVycyB0aGlzIHdvcmtsb2FkIHdpbGwgdXNlIGluIG9yZGVyIHRvIHNlbGVjdCBwb2RzLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgYSBjb3B5LiBVc2UgYHNlbGVjdCgpYCB0byBhZGQgbGFiZWwgbWF0Y2hlcnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1hdGNoTGFiZWxzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX21hdGNoTGFiZWxzIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGV4cHJlc3Npb24gbWF0Y2hlcnMgdGhpcyB3b3JrbG9hZCB3aWxsIHVzZSBpbiBvcmRlciB0byBzZWxlY3QgcG9kcy5cbiAgICpcbiAgICogUmV0dXJucyBhIGEgY29weS4gVXNlIGBzZWxlY3QoKWAgdG8gYWRkIGV4cHJlc3Npb24gbWF0Y2hlcnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1hdGNoRXhwcmVzc2lvbnMoKTogTGFiZWxTZWxlY3RvclJlcXVpcmVtZW50W10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fbWF0Y2hFeHByZXNzaW9uc107XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3RvTGFiZWxTZWxlY3RvcigpOiBrOHMuTGFiZWxTZWxlY3RvciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGNoRXhwcmVzc2lvbnM6IHVuZGVmaW5lZElmRW1wdHkodGhpcy5fbWF0Y2hFeHByZXNzaW9ucyksXG4gICAgICBtYXRjaExhYmVsczogdW5kZWZpbmVkSWZFbXB0eSh0aGlzLl9tYXRjaExhYmVscyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfdG9Qb2RTcGVjKCk6IGs4cy5Qb2RTcGVjIHtcbiAgICBpZiAodGhpcy5zcHJlYWQpIHtcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsaW5nLnNwcmVhZCh7XG4gICAgICAgICAgdG9wb2xvZ3k6IHBvZC5Ub3BvbG9neS5IT1NUTkFNRSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2NoZWR1bGluZy5zcHJlYWQoe1xuICAgICAgICAgIHRvcG9sb2d5OiBwb2QuVG9wb2xvZ3kuWk9ORSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHNjaGVkdWxpbmcgPSB0aGlzLnNjaGVkdWxpbmcuX3RvS3ViZSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLl90b1BvZFNwZWMoKSxcbiAgICAgIGFmZmluaXR5OiBzY2hlZHVsaW5nLmFmZmluaXR5LFxuICAgICAgbm9kZU5hbWU6IHNjaGVkdWxpbmcubm9kZU5hbWUsXG4gICAgICB0b2xlcmF0aW9uczogc2NoZWR1bGluZy50b2xlcmF0aW9ucyxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYFdvcmtsb2FkU2NoZWR1bGluZy5zcHJlYWRgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtsb2FkU2NoZWR1bGluZ1NwcmVhZE9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIHNwcmVhZCBpcyBvcHRpb25hbCwgd2l0aCB0aGlzIHdlaWdodCBzY29yZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB3ZWlnaHQuIHNwcmVhZCBpcyBhc3N1bWVkIHRvIGJlIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgd2VpZ2h0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGljaCB0b3BvbG9neSB0byBzcHJlYWQgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVG9wb2xvZ3kuSE9TVE5BTUVcbiAgICovXG4gIHJlYWRvbmx5IHRvcG9sb2d5PzogcG9kLlRvcG9sb2d5O1xuXG59XG5cbi8qKlxuICogQ29udHJvbHMgdGhlIHBvZCBzY2hlZHVsaW5nIHN0cmF0ZWd5IG9mIHRoaXMgd29ya2xvYWQuXG4gKiBJdCBvZmZlcnMgc29tZSBhZGRpdGlvbmFsIEFQSSdzIG9uIHRvcCBvZiB0aGUgY29yZSBwb2Qgc2NoZWR1bGluZy5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtsb2FkU2NoZWR1bGluZyBleHRlbmRzIHBvZC5Qb2RTY2hlZHVsaW5nIHtcblxuICAvKipcbiAgICogU3ByZWFkIHRoZSBwb2RzIGluIHRoaXMgd29ya2xvYWQgYnkgdGhlIHRvcG9sb2d5IGtleS5cbiAgICogQSBzcHJlYWQgaXMgYSBzZXBhcmF0aW9uIG9mIHRoZSBwb2QgZnJvbSBpdHNlbGYgYW5kIGlzIHVzZWQgdG9cbiAgICogYmFsYW5jZSBvdXQgcG9kIHJlcGxpY2FzIGFjcm9zcyBhIGdpdmVuIHRvcG9sb2d5LlxuICAgKi9cbiAgcHVibGljIHNwcmVhZChvcHRpb25zOiBXb3JrbG9hZFNjaGVkdWxpbmdTcHJlYWRPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLnNlcGFyYXRlKHRoaXMuaW5zdGFuY2UsIHsgd2VpZ2h0OiBvcHRpb25zLndlaWdodCwgdG9wb2xvZ3k6IG9wdGlvbnMudG9wb2xvZ3kgPz8gcG9kLlRvcG9sb2d5LkhPU1ROQU1FIH0pO1xuICB9XG5cbn0iXX0=