/**
 * @license
 * Copyright Google LLC All Rights Reserved.
 *
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://angular.io/license
 */
(function (factory) {
    if (typeof module === "object" && typeof module.exports === "object") {
        var v = factory(null, exports);
        if (v !== undefined) module.exports = v;
    }
    else if (typeof define === "function" && define.amd) {
        define("@angular/common/locales/extra/sr-Cyrl-XK", ["require", "exports"], factory);
    }
})(function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    // THIS CODE IS GENERATED - DO NOT MODIFY
    // See angular/tools/gulp-tasks/cldr/extract.js
    var u = undefined;
    exports.default = [
        [
            ['поноћ', 'подне', 'јутро', 'по под.', 'вече', 'ноћ'],
            ['поноћ', 'подне', 'јутро', 'по под.', 'увече', 'ноћу'],
            ['поноћ', 'подне', 'ујутро', 'по подне', 'увече', 'ноћу']
        ],
        [['поноћ', 'подне', 'јутро', 'поподне', 'вече', 'ноћ'], u, u],
        ['00:00', '12:00', ['06:00', '12:00'], ['12:00', '18:00'], ['18:00', '21:00'], ['21:00', '06:00']]
    ];
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ItQ3lybC1YSy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9sb2NhbGVzL2V4dHJhL3NyLUN5cmwtWEsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFFSCx5Q0FBeUM7SUFDekMsK0NBQStDO0lBRS9DLElBQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUVwQixrQkFBZTtRQUNiO1lBQ0UsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztZQUNyRCxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO1lBQ3ZELENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUM7U0FDMUQ7UUFDRCxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNuRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8vIFRISVMgQ09ERSBJUyBHRU5FUkFURUQgLSBETyBOT1QgTU9ESUZZXG4vLyBTZWUgYW5ndWxhci90b29scy9ndWxwLXRhc2tzL2NsZHIvZXh0cmFjdC5qc1xuXG5jb25zdCB1ID0gdW5kZWZpbmVkO1xuXG5leHBvcnQgZGVmYXVsdCBbXG4gIFtcbiAgICBbJ9C/0L7QvdC+0ZsnLCAn0L/QvtC00L3QtScsICfRmNGD0YLRgNC+JywgJ9C/0L4g0L/QvtC0LicsICfQstC10YfQtScsICfQvdC+0ZsnXSxcbiAgICBbJ9C/0L7QvdC+0ZsnLCAn0L/QvtC00L3QtScsICfRmNGD0YLRgNC+JywgJ9C/0L4g0L/QvtC0LicsICfRg9Cy0LXRh9C1JywgJ9C90L7Rm9GDJ10sXG4gICAgWyfQv9C+0L3QvtGbJywgJ9C/0L7QtNC90LUnLCAn0YPRmNGD0YLRgNC+JywgJ9C/0L4g0L/QvtC00L3QtScsICfRg9Cy0LXRh9C1JywgJ9C90L7Rm9GDJ11cbiAgXSxcbiAgW1sn0L/QvtC90L7RmycsICfQv9C+0LTQvdC1JywgJ9GY0YPRgtGA0L4nLCAn0L/QvtC/0L7QtNC90LUnLCAn0LLQtdGH0LUnLCAn0L3QvtGbJ10sIHUsIHVdLFxuICBbJzAwOjAwJywgJzEyOjAwJywgWycwNjowMCcsICcxMjowMCddLCBbJzEyOjAwJywgJzE4OjAwJ10sIFsnMTg6MDAnLCAnMjE6MDAnXSwgWycyMTowMCcsICcwNjowMCddXVxuXTtcbiJdfQ==