cdk8s-plus-25
Version:
cdk8s+ is a software development framework that provides high level abstractions for authoring Kubernetes applications. cdk8s-plus-25 synthesizes Kubernetes manifests for Kubernetes 1.25.0
122 lines • 15.7 kB
JavaScript
"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: utils_1.undefinedIfEmpty(this._matchExpressions),
matchLabels: 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-25.Workload", version: "2.22.79" };
/**
* 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-25.WorkloadScheduling", version: "2.22.79" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2xvYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd29ya2xvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBOEU7QUFHOUUsNkJBQTZCO0FBQzdCLG1DQUEyQztBQXFEM0M7Ozs7R0FJRztBQUNILE1BQXNCLFFBQVMsU0FBUSxHQUFHLENBQUMsV0FBVztJQWdCcEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUF1QixFQUFFO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBVFQsaUJBQVksR0FBMkIsRUFBRSxDQUFDO1FBQzFDLHNCQUFpQixHQUErQixFQUFFLENBQUM7UUFVbEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7UUFFcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxhQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDM0Y7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFdBQVc7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLG1DQUEyQixDQUFDO2dCQUNsRCxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVztnQkFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzFCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNsRTtRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsR0FBRyxTQUE4QjtRQUM3QyxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRTtZQUNoQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1RCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxFQUFFO2dCQUNqRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUNoQztTQUNGO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZ0JBQWdCO1FBQ3JCLE9BQU87WUFDTCxnQkFBZ0IsRUFBRSx3QkFBZ0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDMUQsV0FBVyxFQUFFLHdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDakQsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVU7UUFDZixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZjtnQkFDRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztvQkFDckIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUTtpQkFDaEMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO29CQUNyQixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJO2lCQUM1QixDQUFDLENBQUM7YUFDSjtTQUNGO1FBQUEsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFN0MsT0FBTztZQUNMLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUNyQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDN0IsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzdCLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztTQUNwQyxDQUFDO0lBQ0osQ0FBQzs7QUE3R0gsNEJBOEdDOzs7QUF1QkQ7OztHQUdHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxHQUFHLENBQUMsYUFBYTtJQUV2RDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQTJDLEVBQUU7UUFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2hILENBQUM7O0FBVEgsZ0RBV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlPYmplY3RNZXRhZGF0YSwgQXBpT2JqZWN0TWV0YWRhdGFEZWZpbml0aW9uLCBOYW1lcyB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgazhzIGZyb20gJy4vaW1wb3J0cy9rOHMnO1xuaW1wb3J0ICogYXMgcG9kIGZyb20gJy4vcG9kJztcbmltcG9ydCB7IHVuZGVmaW5lZElmRW1wdHkgfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBgV29ya2xvYWRgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtsb2FkUHJvcHMgZXh0ZW5kcyBwb2QuQWJzdHJhY3RQb2RQcm9wcyB7XG5cbiAgLyoqXG4gICAqIFRoZSBwb2QgbWV0YWRhdGEgb2YgdGhpcyB3b3JrbG9hZC5cbiAgICovXG4gIHJlYWRvbmx5IHBvZE1ldGFkYXRhPzogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgYWxsb2NhdGVzIGEgcG9kIGxhYmVsIHNlbGVjdG9yIGZvciB0aGlzIHdvcmtsb2FkIGFuZCBhZGRcbiAgICogaXQgdG8gdGhlIHBvZCBtZXRhZGF0YS4gVGhpcyBlbnN1cmVzIHRoaXMgd29ya2xvYWQgbWFuYWdlcyBwb2RzIGNyZWF0ZWQgYnlcbiAgICogaXRzIHBvZCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZWN0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBzcHJlYWQgcG9kcyBhY3Jvc3MgaG9zdG5hbWUgYW5kIHpvbmVzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3NjaGVkdWxpbmctZXZpY3Rpb24vdG9wb2xvZ3ktc3ByZWFkLWNvbnN0cmFpbnRzLyNpbnRlcm5hbC1kZWZhdWx0LWNvbnN0cmFpbnRzXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzcHJlYWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0XG4gKiByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWJlbFNlbGVjdG9yUmVxdWlyZW1lbnQge1xuICAvKipcbiAgICogVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0b3I6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5XG4gICAqIG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbiAgICogdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEEgd29ya2xvYWQgaXMgYW4gYXBwbGljYXRpb24gcnVubmluZyBvbiBLdWJlcm5ldGVzLiBXaGV0aGVyIHlvdXIgd29ya2xvYWQgaXMgYSBzaW5nbGVcbiAqIGNvbXBvbmVudCBvciBzZXZlcmFsIHRoYXQgd29yayB0b2dldGhlciwgb24gS3ViZXJuZXRlcyB5b3UgcnVuIGl0IGluc2lkZSBhIHNldCBvZiBwb2RzLlxuICogSW4gS3ViZXJuZXRlcywgYSBQb2QgcmVwcmVzZW50cyBhIHNldCBvZiBydW5uaW5nIGNvbnRhaW5lcnMgb24geW91ciBjbHVzdGVyLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV29ya2xvYWQgZXh0ZW5kcyBwb2QuQWJzdHJhY3RQb2Qge1xuXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uczogcG9kLlBvZENvbm5lY3Rpb25zO1xuXG4gIHB1YmxpYyByZWFkb25seSBzY2hlZHVsaW5nOiBXb3JrbG9hZFNjaGVkdWxpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzcHJlYWQ6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbWF0Y2hMYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF0Y2hFeHByZXNzaW9uczogTGFiZWxTZWxlY3RvclJlcXVpcmVtZW50W10gPSBbXTtcblxuICBwcml2YXRlIF9wb2RNZXRhZGF0YT86IEFwaU9iamVjdE1ldGFkYXRhRGVmaW5pdGlvbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9wcm9wczogV29ya2xvYWRQcm9wcztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF0Y2hlcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBXb3JrbG9hZFByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMuX3Byb3BzID0gcHJvcHM7XG4gICAgdGhpcy5zY2hlZHVsaW5nID0gbmV3IFdvcmtsb2FkU2NoZWR1bGluZyh0aGlzKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gbmV3IHBvZC5Qb2RDb25uZWN0aW9ucyh0aGlzKTtcbiAgICB0aGlzLnNwcmVhZCA9IHByb3BzLnNwcmVhZCA/PyBmYWxzZTtcblxuICAgIHRoaXMuX21hdGNoZXIgPSBOYW1lcy50b0xhYmVsVmFsdWUodGhpcyk7XG5cbiAgICBpZiAocHJvcHMuc2VsZWN0ID8/IHRydWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0KHBvZC5MYWJlbFNlbGVjdG9yLm9mKHsgbGFiZWxzOiB7IFtwb2QuUG9kLkFERFJFU1NfTEFCRUxdOiB0aGlzLl9tYXRjaGVyIH0gfSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWV0YWRhdGEgb2YgcG9kcyBpbiB0aGlzIHdvcmtsb2FkLlxuICAgKi9cbiAgcHVibGljIGdldCBwb2RNZXRhZGF0YSgpOiBBcGlPYmplY3RNZXRhZGF0YURlZmluaXRpb24ge1xuICAgIGlmICghdGhpcy5fcG9kTWV0YWRhdGEpIHtcbiAgICAgIHRoaXMuX3BvZE1ldGFkYXRhID0gbmV3IEFwaU9iamVjdE1ldGFkYXRhRGVmaW5pdGlvbih7XG4gICAgICAgIC4uLnRoaXMuX3Byb3BzLnBvZE1ldGFkYXRhLFxuICAgICAgICBhcGlPYmplY3Q6IHRoaXMuYXBpT2JqZWN0LFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9wb2RNZXRhZGF0YS5hZGRMYWJlbChwb2QuUG9kLkFERFJFU1NfTEFCRUwsIHRoaXMuX21hdGNoZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcG9kTWV0YWRhdGE7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlndXJlIHNlbGVjdG9ycyBmb3IgdGhpcyB3b3JrbG9hZC5cbiAgICovXG4gIHB1YmxpYyBzZWxlY3QoLi4uc2VsZWN0b3JzOiBwb2QuTGFiZWxTZWxlY3RvcltdKSB7XG4gICAgZm9yIChjb25zdCBzZWxlY3RvciBvZiBzZWxlY3RvcnMpIHtcbiAgICAgIGNvbnN0IGt1YmUgPSBzZWxlY3Rvci5fdG9LdWJlKCk7XG4gICAgICB0aGlzLl9tYXRjaEV4cHJlc3Npb25zLnB1c2goLi4ua3ViZS5tYXRjaEV4cHJlc3Npb25zID8/IFtdKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGt1YmUubWF0Y2hMYWJlbHMgPz8ge30pKSB7XG4gICAgICAgIHRoaXMuX21hdGNoTGFiZWxzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxhYmVsIG1hdGNoZXJzIHRoaXMgd29ya2xvYWQgd2lsbCB1c2UgaW4gb3JkZXIgdG8gc2VsZWN0IHBvZHMuXG4gICAqXG4gICAqIFJldHVybnMgYSBhIGNvcHkuIFVzZSBgc2VsZWN0KClgIHRvIGFkZCBsYWJlbCBtYXRjaGVycy5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF0Y2hMYWJlbHMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fbWF0Y2hMYWJlbHMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZXhwcmVzc2lvbiBtYXRjaGVycyB0aGlzIHdvcmtsb2FkIHdpbGwgdXNlIGluIG9yZGVyIHRvIHNlbGVjdCBwb2RzLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgYSBjb3B5LiBVc2UgYHNlbGVjdCgpYCB0byBhZGQgZXhwcmVzc2lvbiBtYXRjaGVycy5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF0Y2hFeHByZXNzaW9ucygpOiBMYWJlbFNlbGVjdG9yUmVxdWlyZW1lbnRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9tYXRjaEV4cHJlc3Npb25zXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfdG9MYWJlbFNlbGVjdG9yKCk6IGs4cy5MYWJlbFNlbGVjdG9yIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0Y2hFeHByZXNzaW9uczogdW5kZWZpbmVkSWZFbXB0eSh0aGlzLl9tYXRjaEV4cHJlc3Npb25zKSxcbiAgICAgIG1hdGNoTGFiZWxzOiB1bmRlZmluZWRJZkVtcHR5KHRoaXMuX21hdGNoTGFiZWxzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b1BvZFNwZWMoKTogazhzLlBvZFNwZWMge1xuICAgIGlmICh0aGlzLnNwcmVhZCkge1xuICAgICAge1xuICAgICAgICB0aGlzLnNjaGVkdWxpbmcuc3ByZWFkKHtcbiAgICAgICAgICB0b3BvbG9neTogcG9kLlRvcG9sb2d5LkhPU1ROQU1FLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zY2hlZHVsaW5nLnNwcmVhZCh7XG4gICAgICAgICAgdG9wb2xvZ3k6IHBvZC5Ub3BvbG9neS5aT05FLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgc2NoZWR1bGluZyA9IHRoaXMuc2NoZWR1bGluZy5fdG9LdWJlKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIuX3RvUG9kU3BlYygpLFxuICAgICAgYWZmaW5pdHk6IHNjaGVkdWxpbmcuYWZmaW5pdHksXG4gICAgICBub2RlTmFtZTogc2NoZWR1bGluZy5ub2RlTmFtZSxcbiAgICAgIHRvbGVyYXRpb25zOiBzY2hlZHVsaW5nLnRvbGVyYXRpb25zLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgV29ya2xvYWRTY2hlZHVsaW5nLnNwcmVhZGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2xvYWRTY2hlZHVsaW5nU3ByZWFkT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgc3ByZWFkIGlzIG9wdGlvbmFsLCB3aXRoIHRoaXMgd2VpZ2h0IHNjb3JlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHdlaWdodC4gc3ByZWFkIGlzIGFzc3VtZWQgdG8gYmUgcmVxdWlyZWQuXG4gICAqL1xuICByZWFkb25seSB3ZWlnaHQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoaWNoIHRvcG9sb2d5IHRvIHNwcmVhZCBvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUb3BvbG9neS5IT1NUTkFNRVxuICAgKi9cbiAgcmVhZG9ubHkgdG9wb2xvZ3k/OiBwb2QuVG9wb2xvZ3k7XG5cbn1cblxuLyoqXG4gKiBDb250cm9scyB0aGUgcG9kIHNjaGVkdWxpbmcgc3RyYXRlZ3kgb2YgdGhpcyB3b3JrbG9hZC5cbiAqIEl0IG9mZmVycyBzb21lIGFkZGl0aW9uYWwgQVBJJ3Mgb24gdG9wIG9mIHRoZSBjb3JlIHBvZCBzY2hlZHVsaW5nLlxuICovXG5leHBvcnQgY2xhc3MgV29ya2xvYWRTY2hlZHVsaW5nIGV4dGVuZHMgcG9kLlBvZFNjaGVkdWxpbmcge1xuXG4gIC8qKlxuICAgKiBTcHJlYWQgdGhlIHBvZHMgaW4gdGhpcyB3b3JrbG9hZCBieSB0aGUgdG9wb2xvZ3kga2V5LlxuICAgKiBBIHNwcmVhZCBpcyBhIHNlcGFyYXRpb24gb2YgdGhlIHBvZCBmcm9tIGl0c2VsZiBhbmQgaXMgdXNlZCB0b1xuICAgKiBiYWxhbmNlIG91dCBwb2QgcmVwbGljYXMgYWNyb3NzIGEgZ2l2ZW4gdG9wb2xvZ3kuXG4gICAqL1xuICBwdWJsaWMgc3ByZWFkKG9wdGlvbnM6IFdvcmtsb2FkU2NoZWR1bGluZ1NwcmVhZE9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuc2VwYXJhdGUodGhpcy5pbnN0YW5jZSwgeyB3ZWlnaHQ6IG9wdGlvbnMud2VpZ2h0LCB0b3BvbG9neTogb3B0aW9ucy50b3BvbG9neSA/PyBwb2QuVG9wb2xvZ3kuSE9TVE5BTUUgfSk7XG4gIH1cblxufSJdfQ==