UNPKG

@decaf-ts/decorator-validation

Version:
168 lines 17.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DEFAULT_PATTERNS = exports.DEFAULT_ERROR_MESSAGES = exports.DAYS_OF_WEEK_NAMES = exports.MONTH_NAMES = exports.ValidationKeys = exports.ComparisonValidationKeys = void 0; const constants_1 = require("./../../utils/constants.cjs"); /** * @summary Keys used for comparison-based validations. * * @property {string} EQUALS - Validates if two values are equal. * @property {string} DIFF - Validates if two values are different. * @property {string} LESS_THAN - Validates if a value is less than another. * @property {string} LESS_THAN_OR_EQUAL - Validates if a value is less than or equal to another. * @property {string} GREATER_THAN - Validates if a value is greater than another. * @property {string} GREATER_THAN_OR_EQUAL - Validates if a value is greater than or equal to another. * * @constant ComparisonValidationKeys * @memberof module:decorator-validation.Validation * @category Validation */ exports.ComparisonValidationKeys = { EQUALS: "equals", DIFF: "different", LESS_THAN: "lessThan", LESS_THAN_OR_EQUAL: "lessThanOrEqual", GREATER_THAN: "greaterThan", GREATER_THAN_OR_EQUAL: "greaterThanOrEqual", }; /** * @summary The keys used for validation * * @property {string} REFLECT prefixes others * @property {string} REQUIRED sets as required * @property {string} MIN defines min value * @property {string} MAX defines max value * @property {string} STEP defines step * @property {string} MIN_LENGTH defines min length * @property {string} MAX_LENGTH defines max length * @property {string} PATTERN defines pattern * @property {string} EMAIL defines email * @property {string} URL defines url * @property {string} DATE defines date * @property {string} TYPE defines type * @property {string} PASSWORD defines password * @property {string} LIST defines list * * @constant ValidationKeys * @memberOf module:decorator-validation.Validation * @category Validation */ exports.ValidationKeys = { REFLECT: `${constants_1.ModelKeys.REFLECT}validation.`, VALIDATOR: "validator", REQUIRED: "required", MIN: "min", MAX: "max", STEP: "step", MIN_LENGTH: "minlength", MAX_LENGTH: "maxlength", PATTERN: "pattern", EMAIL: "email", URL: "url", DATE: "date", TYPE: "type", PASSWORD: "password", LIST: "list", FORMAT: "format", ...exports.ComparisonValidationKeys, }; /** * @summary list of month names * @description Stores month names. Can be changed for localization purposes * * @constant MONTH_NAMES * @memberOf module:decorator-validation.Validation * @category Validation */ exports.MONTH_NAMES = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ]; /** * @summary list of names of days of the week * @description Stores names for days of the week. Can be changed for localization purposes * * @constant DAYS_OF_WEEK_NAMES * @memberOf module:decorator-validation.Validation * @category Validation */ exports.DAYS_OF_WEEK_NAMES = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", ]; /** * @summary Defines the default error messages * * @property {string} REQUIRED default error message * @property {string} MIN default error message * @property {string} MAX default error message * @property {string} MIN_LENGTH default error message * @property {string} MAX_LENGTH default error message * @property {string} PATTERN default error message * @property {string} EMAIL default error message * @property {string} URL default error message * @property {string} TYPE default error message * @property {string} STEP default error message * @property {string} DATE default error message * @property {string} DEFAULT default error message * @property {string} PASSWORD default error message * @property {string} LIST default error message * @property {string} LIST_INSIDE default error message * @property {string} MODEL_NOT_FOUND default error message * * @constant DEFAULT_ERROR_MESSAGES * @memberOf module:decorator-validation.Validation * @category Validation */ exports.DEFAULT_ERROR_MESSAGES = { REQUIRED: "This field is required", MIN: "The minimum value is {0}", MAX: "The maximum value is {0}", MIN_LENGTH: "The minimum length is {0}", MAX_LENGTH: "The maximum length is {0}", PATTERN: "The value does not match the pattern", EMAIL: "The value is not a valid email", URL: "The value is not a valid URL", TYPE: "Invalid type. Expected {0}, received {1}", STEP: "Invalid value. Not a step of {0}", DATE: "Invalid value. not a valid Date", DEFAULT: "There is an Error", PASSWORD: "Must be at least 8 characters and contain one of number, lower and upper case letters, and special character (@$!%*?&_-.,)", LIST: "Invalid list of {0}", MODEL_NOT_FOUND: "No model registered under {0}", EQUALS: "This field must be equal to field {0}", DIFF: "This field must be different from field {0}", LESS_THAN: "This field must be less than field {0}", LESS_THAN_OR_EQUAL: "This field must be less than or equal to field {0}", GREATER_THAN: "This field must be greater than field {0}", GREATER_THAN_OR_EQUAL: "This field must be greater than or equal to field {0}", }; /** * @summary Defines the various default regexp patterns used * * @enum DEFAULT_PATTERNS * @memberOf module:decorator-validation.Validation * @category Validation */ exports.DEFAULT_PATTERNS = { EMAIL: /[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?/, URL: /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?$/i, PASSWORD: { CHAR8_ONE_OF_EACH: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&_\-.,])[A-Za-z\d@$!%*?&_\-.,]{8,}$/g, }, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ZhbGlkYXRpb24vVmFsaWRhdG9ycy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQWtEO0FBRWxEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDVSxRQUFBLHdCQUF3QixHQUFHO0lBQ3RDLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLElBQUksRUFBRSxXQUFXO0lBQ2pCLFNBQVMsRUFBRSxVQUFVO0lBQ3JCLGtCQUFrQixFQUFFLGlCQUFpQjtJQUNyQyxZQUFZLEVBQUUsYUFBYTtJQUMzQixxQkFBcUIsRUFBRSxvQkFBb0I7Q0FDbkMsQ0FBQztBQUVYOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDVSxRQUFBLGNBQWMsR0FBRztJQUM1QixPQUFPLEVBQUUsR0FBRyxxQkFBUyxDQUFDLE9BQU8sYUFBYTtJQUMxQyxTQUFTLEVBQUUsV0FBVztJQUN0QixRQUFRLEVBQUUsVUFBVTtJQUNwQixHQUFHLEVBQUUsS0FBSztJQUNWLEdBQUcsRUFBRSxLQUFLO0lBQ1YsSUFBSSxFQUFFLE1BQU07SUFDWixVQUFVLEVBQUUsV0FBVztJQUN2QixVQUFVLEVBQUUsV0FBVztJQUN2QixPQUFPLEVBQUUsU0FBUztJQUNsQixLQUFLLEVBQUUsT0FBTztJQUNkLEdBQUcsRUFBRSxLQUFLO0lBQ1YsSUFBSSxFQUFFLE1BQU07SUFDWixJQUFJLEVBQUUsTUFBTTtJQUNaLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLElBQUksRUFBRSxNQUFNO0lBQ1osTUFBTSxFQUFFLFFBQVE7SUFDaEIsR0FBRyxnQ0FBd0I7Q0FDbkIsQ0FBQztBQUVYOzs7Ozs7O0dBT0c7QUFDVSxRQUFBLFdBQVcsR0FBRztJQUN6QixTQUFTO0lBQ1QsVUFBVTtJQUNWLE9BQU87SUFDUCxPQUFPO0lBQ1AsS0FBSztJQUNMLE1BQU07SUFDTixNQUFNO0lBQ04sUUFBUTtJQUNSLFdBQVc7SUFDWCxTQUFTO0lBQ1QsVUFBVTtJQUNWLFVBQVU7Q0FDWCxDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNVLFFBQUEsa0JBQWtCLEdBQUc7SUFDaEMsUUFBUTtJQUNSLFFBQVE7SUFDUixTQUFTO0lBQ1QsV0FBVztJQUNYLFVBQVU7SUFDVixRQUFRO0lBQ1IsVUFBVTtDQUNYLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDVSxRQUFBLHNCQUFzQixHQUEyQjtJQUM1RCxRQUFRLEVBQUUsd0JBQXdCO0lBQ2xDLEdBQUcsRUFBRSwwQkFBMEI7SUFDL0IsR0FBRyxFQUFFLDBCQUEwQjtJQUMvQixVQUFVLEVBQUUsMkJBQTJCO0lBQ3ZDLFVBQVUsRUFBRSwyQkFBMkI7SUFDdkMsT0FBTyxFQUFFLHNDQUFzQztJQUMvQyxLQUFLLEVBQUUsZ0NBQWdDO0lBQ3ZDLEdBQUcsRUFBRSw4QkFBOEI7SUFDbkMsSUFBSSxFQUFFLDBDQUEwQztJQUNoRCxJQUFJLEVBQUUsa0NBQWtDO0lBQ3hDLElBQUksRUFBRSxpQ0FBaUM7SUFDdkMsT0FBTyxFQUFFLG1CQUFtQjtJQUM1QixRQUFRLEVBQ04sNEhBQTRIO0lBQzlILElBQUksRUFBRSxxQkFBcUI7SUFDM0IsZUFBZSxFQUFFLCtCQUErQjtJQUNoRCxNQUFNLEVBQUUsdUNBQXVDO0lBQy9DLElBQUksRUFBRSw2Q0FBNkM7SUFDbkQsU0FBUyxFQUFFLHdDQUF3QztJQUNuRCxrQkFBa0IsRUFBRSxvREFBb0Q7SUFDeEUsWUFBWSxFQUFFLDJDQUEyQztJQUN6RCxxQkFBcUIsRUFDbkIsdURBQXVEO0NBQzFELENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHO0lBQzlCLEtBQUssRUFDSCw0SkFBNEo7SUFDOUosR0FBRyxFQUFFLHlhQUF5YTtJQUM5YSxRQUFRLEVBQUU7UUFDUixpQkFBaUIsRUFDZixpRkFBaUY7S0FDcEY7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWxLZXlzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2NvbnN0YW50c1wiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IEtleXMgdXNlZCBmb3IgY29tcGFyaXNvbi1iYXNlZCB2YWxpZGF0aW9ucy5cbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRVFVQUxTIC0gVmFsaWRhdGVzIGlmIHR3byB2YWx1ZXMgYXJlIGVxdWFsLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IERJRkYgLSBWYWxpZGF0ZXMgaWYgdHdvIHZhbHVlcyBhcmUgZGlmZmVyZW50LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IExFU1NfVEhBTiAtIFZhbGlkYXRlcyBpZiBhIHZhbHVlIGlzIGxlc3MgdGhhbiBhbm90aGVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IExFU1NfVEhBTl9PUl9FUVVBTCAtIFZhbGlkYXRlcyBpZiBhIHZhbHVlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBhbm90aGVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IEdSRUFURVJfVEhBTiAtIFZhbGlkYXRlcyBpZiBhIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBhbm90aGVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IEdSRUFURVJfVEhBTl9PUl9FUVVBTCAtIFZhbGlkYXRlcyBpZiBhIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBhbm90aGVyLlxuICpcbiAqIEBjb25zdGFudCBDb21wYXJpc29uVmFsaWRhdGlvbktleXNcbiAqIEBtZW1iZXJvZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uVmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IENvbXBhcmlzb25WYWxpZGF0aW9uS2V5cyA9IHtcbiAgRVFVQUxTOiBcImVxdWFsc1wiLFxuICBESUZGOiBcImRpZmZlcmVudFwiLFxuICBMRVNTX1RIQU46IFwibGVzc1RoYW5cIixcbiAgTEVTU19USEFOX09SX0VRVUFMOiBcImxlc3NUaGFuT3JFcXVhbFwiLFxuICBHUkVBVEVSX1RIQU46IFwiZ3JlYXRlclRoYW5cIixcbiAgR1JFQVRFUl9USEFOX09SX0VRVUFMOiBcImdyZWF0ZXJUaGFuT3JFcXVhbFwiLFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUga2V5cyB1c2VkIGZvciB2YWxpZGF0aW9uXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRkxFQ1QgcHJlZml4ZXMgb3RoZXJzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVRVUlSRUQgc2V0cyBhcyByZXF1aXJlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IE1JTiBkZWZpbmVzIG1pbiB2YWx1ZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE1BWCBkZWZpbmVzIG1heCB2YWx1ZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFNURVAgZGVmaW5lcyBzdGVwXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTUlOX0xFTkdUSCBkZWZpbmVzIG1pbiBsZW5ndGhcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBNQVhfTEVOR1RIIGRlZmluZXMgbWF4IGxlbmd0aFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFBBVFRFUk4gZGVmaW5lcyBwYXR0ZXJuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRU1BSUwgZGVmaW5lcyBlbWFpbFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFVSTCBkZWZpbmVzIHVybFxuICogQHByb3BlcnR5IHtzdHJpbmd9IERBVEUgZGVmaW5lcyBkYXRlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVFlQRSBkZWZpbmVzIHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBQQVNTV09SRCBkZWZpbmVzIHBhc3N3b3JkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTElTVCBkZWZpbmVzIGxpc3RcbiAqXG4gKiBAY29uc3RhbnQgVmFsaWRhdGlvbktleXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uVmFsaWRhdGlvblxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IFZhbGlkYXRpb25LZXlzID0ge1xuICBSRUZMRUNUOiBgJHtNb2RlbEtleXMuUkVGTEVDVH12YWxpZGF0aW9uLmAsXG4gIFZBTElEQVRPUjogXCJ2YWxpZGF0b3JcIixcbiAgUkVRVUlSRUQ6IFwicmVxdWlyZWRcIixcbiAgTUlOOiBcIm1pblwiLFxuICBNQVg6IFwibWF4XCIsXG4gIFNURVA6IFwic3RlcFwiLFxuICBNSU5fTEVOR1RIOiBcIm1pbmxlbmd0aFwiLFxuICBNQVhfTEVOR1RIOiBcIm1heGxlbmd0aFwiLFxuICBQQVRURVJOOiBcInBhdHRlcm5cIixcbiAgRU1BSUw6IFwiZW1haWxcIixcbiAgVVJMOiBcInVybFwiLFxuICBEQVRFOiBcImRhdGVcIixcbiAgVFlQRTogXCJ0eXBlXCIsXG4gIFBBU1NXT1JEOiBcInBhc3N3b3JkXCIsXG4gIExJU1Q6IFwibGlzdFwiLFxuICBGT1JNQVQ6IFwiZm9ybWF0XCIsXG4gIC4uLkNvbXBhcmlzb25WYWxpZGF0aW9uS2V5cyxcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogQHN1bW1hcnkgbGlzdCBvZiBtb250aCBuYW1lc1xuICogQGRlc2NyaXB0aW9uIFN0b3JlcyBtb250aCBuYW1lcy4gQ2FuIGJlIGNoYW5nZWQgZm9yIGxvY2FsaXphdGlvbiBwdXJwb3Nlc1xuICpcbiAqIEBjb25zdGFudCBNT05USF9OQU1FU1xuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgY29uc3QgTU9OVEhfTkFNRVMgPSBbXG4gIFwiSmFudWFyeVwiLFxuICBcIkZlYnJ1YXJ5XCIsXG4gIFwiTWFyY2hcIixcbiAgXCJBcHJpbFwiLFxuICBcIk1heVwiLFxuICBcIkp1bmVcIixcbiAgXCJKdWx5XCIsXG4gIFwiQXVndXN0XCIsXG4gIFwiU2VwdGVtYmVyXCIsXG4gIFwiT2N0b2JlclwiLFxuICBcIk5vdmVtYmVyXCIsXG4gIFwiRGVjZW1iZXJcIixcbl07XG5cbi8qKlxuICogQHN1bW1hcnkgbGlzdCBvZiBuYW1lcyBvZiBkYXlzIG9mIHRoZSB3ZWVrXG4gKiBAZGVzY3JpcHRpb24gU3RvcmVzIG5hbWVzIGZvciBkYXlzIG9mIHRoZSB3ZWVrLiBDYW4gYmUgY2hhbmdlZCBmb3IgbG9jYWxpemF0aW9uIHB1cnBvc2VzXG4gKlxuICogQGNvbnN0YW50IERBWVNfT0ZfV0VFS19OQU1FU1xuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgY29uc3QgREFZU19PRl9XRUVLX05BTUVTID0gW1xuICBcIlN1bmRheVwiLFxuICBcIk1vbmRheVwiLFxuICBcIlR1ZXNkYXlcIixcbiAgXCJXZWRuZXNkYXlcIixcbiAgXCJUaHVyc2RheVwiLFxuICBcIkZyaWRheVwiLFxuICBcIlNhdHVyZGF5XCIsXG5dO1xuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGRlZmF1bHQgZXJyb3IgbWVzc2FnZXNcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVRVUlSRUQgZGVmYXVsdCBlcnJvciBtZXNzYWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTUlOIGRlZmF1bHQgZXJyb3IgbWVzc2FnZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE1BWCBkZWZhdWx0IGVycm9yIG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBNSU5fTEVOR1RIIGRlZmF1bHQgZXJyb3IgbWVzc2FnZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE1BWF9MRU5HVEggZGVmYXVsdCBlcnJvciBtZXNzYWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUEFUVEVSTiBkZWZhdWx0IGVycm9yIG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBFTUFJTCBkZWZhdWx0IGVycm9yIG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBVUkwgZGVmYXVsdCBlcnJvciBtZXNzYWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVFlQRSBkZWZhdWx0IGVycm9yIG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTVEVQIGRlZmF1bHQgZXJyb3IgbWVzc2FnZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IERBVEUgZGVmYXVsdCBlcnJvciBtZXNzYWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gREVGQVVMVCBkZWZhdWx0IGVycm9yIG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBQQVNTV09SRCBkZWZhdWx0IGVycm9yIG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBMSVNUIGRlZmF1bHQgZXJyb3IgbWVzc2FnZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IExJU1RfSU5TSURFIGRlZmF1bHQgZXJyb3IgbWVzc2FnZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE1PREVMX05PVF9GT1VORCBkZWZhdWx0IGVycm9yIG1lc3NhZ2VcbiAqXG4gKiBAY29uc3RhbnQgREVGQVVMVF9FUlJPUl9NRVNTQUdFU1xuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FUlJPUl9NRVNTQUdFUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgUkVRVUlSRUQ6IFwiVGhpcyBmaWVsZCBpcyByZXF1aXJlZFwiLFxuICBNSU46IFwiVGhlIG1pbmltdW0gdmFsdWUgaXMgezB9XCIsXG4gIE1BWDogXCJUaGUgbWF4aW11bSB2YWx1ZSBpcyB7MH1cIixcbiAgTUlOX0xFTkdUSDogXCJUaGUgbWluaW11bSBsZW5ndGggaXMgezB9XCIsXG4gIE1BWF9MRU5HVEg6IFwiVGhlIG1heGltdW0gbGVuZ3RoIGlzIHswfVwiLFxuICBQQVRURVJOOiBcIlRoZSB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0dGVyblwiLFxuICBFTUFJTDogXCJUaGUgdmFsdWUgaXMgbm90IGEgdmFsaWQgZW1haWxcIixcbiAgVVJMOiBcIlRoZSB2YWx1ZSBpcyBub3QgYSB2YWxpZCBVUkxcIixcbiAgVFlQRTogXCJJbnZhbGlkIHR5cGUuIEV4cGVjdGVkIHswfSwgcmVjZWl2ZWQgezF9XCIsXG4gIFNURVA6IFwiSW52YWxpZCB2YWx1ZS4gTm90IGEgc3RlcCBvZiB7MH1cIixcbiAgREFURTogXCJJbnZhbGlkIHZhbHVlLiBub3QgYSB2YWxpZCBEYXRlXCIsXG4gIERFRkFVTFQ6IFwiVGhlcmUgaXMgYW4gRXJyb3JcIixcbiAgUEFTU1dPUkQ6XG4gICAgXCJNdXN0IGJlIGF0IGxlYXN0IDggY2hhcmFjdGVycyBhbmQgY29udGFpbiBvbmUgb2YgbnVtYmVyLCBsb3dlciBhbmQgdXBwZXIgY2FzZSBsZXR0ZXJzLCBhbmQgc3BlY2lhbCBjaGFyYWN0ZXIgKEAkISUqPyZfLS4sKVwiLFxuICBMSVNUOiBcIkludmFsaWQgbGlzdCBvZiB7MH1cIixcbiAgTU9ERUxfTk9UX0ZPVU5EOiBcIk5vIG1vZGVsIHJlZ2lzdGVyZWQgdW5kZXIgezB9XCIsXG4gIEVRVUFMUzogXCJUaGlzIGZpZWxkIG11c3QgYmUgZXF1YWwgdG8gZmllbGQgezB9XCIsXG4gIERJRkY6IFwiVGhpcyBmaWVsZCBtdXN0IGJlIGRpZmZlcmVudCBmcm9tIGZpZWxkIHswfVwiLFxuICBMRVNTX1RIQU46IFwiVGhpcyBmaWVsZCBtdXN0IGJlIGxlc3MgdGhhbiBmaWVsZCB7MH1cIixcbiAgTEVTU19USEFOX09SX0VRVUFMOiBcIlRoaXMgZmllbGQgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gZmllbGQgezB9XCIsXG4gIEdSRUFURVJfVEhBTjogXCJUaGlzIGZpZWxkIG11c3QgYmUgZ3JlYXRlciB0aGFuIGZpZWxkIHswfVwiLFxuICBHUkVBVEVSX1RIQU5fT1JfRVFVQUw6XG4gICAgXCJUaGlzIGZpZWxkIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGZpZWxkIHswfVwiLFxufTtcblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSB2YXJpb3VzIGRlZmF1bHQgcmVnZXhwIHBhdHRlcm5zIHVzZWRcbiAqXG4gKiBAZW51bSBERUZBVUxUX1BBVFRFUk5TXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLlZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BBVFRFUk5TID0ge1xuICBFTUFJTDpcbiAgICAvW2EtekEtWjAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKyg/OlxcLlthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkAoPzpbYS16QS1aMC05XSg/OlthLXowLTktXSpbYS16QS1aMC05XSk/XFwuKStbYS16QS1aMC05XSg/OlthLXpBLVowLTktXSpbYS16QS1aMC05XSk/LyxcbiAgVVJMOiAvXig/Oig/Oig/Omh0dHBzP3xmdHApOik/XFwvXFwvKSg/OlxcUysoPzo6XFxTKik/QCk/KD86KD8hKD86MTB8MTI3KSg/OlxcLlxcZHsxLDN9KXszfSkoPyEoPzoxNjlcXC4yNTR8MTkyXFwuMTY4KSg/OlxcLlxcZHsxLDN9KXsyfSkoPyExNzJcXC4oPzoxWzYtOV18MlxcZHwzWzAtMV0pKD86XFwuXFxkezEsM30pezJ9KSg/OlsxLTldXFxkP3wxXFxkXFxkfDJbMDFdXFxkfDIyWzAtM10pKD86XFwuKD86MT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkpezJ9KD86XFwuKD86WzEtOV1cXGQ/fDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNF0pKXwoPzooPzpbYS16MC05XFx1MDBhMS1cXHVmZmZmXVthLXowLTlcXHUwMGExLVxcdWZmZmZfLV17MCw2Mn0pP1thLXowLTlcXHUwMGExLVxcdWZmZmZdXFwuKSsoPzpbYS16XFx1MDBhMS1cXHVmZmZmXXsyLH1cXC4/KSkoPzo6XFxkezIsNX0pPyg/OlsvPyNdXFxTKik/JC9pLFxuICBQQVNTV09SRDoge1xuICAgIENIQVI4X09ORV9PRl9FQUNIOlxuICAgICAgL14oPz0uKlthLXpdKSg/PS4qW0EtWl0pKD89LipcXGQpKD89LipbQCQhJSo/Jl9cXC0uLF0pW0EtWmEtelxcZEAkISUqPyZfXFwtLixdezgsfSQvZyxcbiAgfSxcbn07XG4iXX0=