| ;(function (root, factory) { | 
|     if (typeof exports === "object") { | 
|         // CommonJS | 
|         module.exports = exports = factory(require("./core")); | 
|     } | 
|     else if (typeof define === "function" && define.amd) { | 
|         // AMD | 
|         define(["./core"], factory); | 
|     } | 
|     else { | 
|         // Global (browser) | 
|         factory(root.CryptoJS); | 
|     } | 
| }(this, function (CryptoJS) { | 
|   | 
|     (function () { | 
|         // Shortcuts | 
|         var C = CryptoJS; | 
|         var C_lib = C.lib; | 
|         var WordArray = C_lib.WordArray; | 
|         var C_enc = C.enc; | 
|   | 
|         /** | 
|          * Base64 encoding strategy. | 
|          */ | 
|         var Base64 = C_enc.Base64 = { | 
|             /** | 
|              * Converts a word array to a Base64 string. | 
|              * | 
|              * @param {WordArray} wordArray The word array. | 
|              * | 
|              * @return {string} The Base64 string. | 
|              * | 
|              * @static | 
|              * | 
|              * @example | 
|              * | 
|              *     var base64String = CryptoJS.enc.Base64.stringify(wordArray); | 
|              */ | 
|             stringify: function (wordArray) { | 
|                 // Shortcuts | 
|                 var words = wordArray.words; | 
|                 var sigBytes = wordArray.sigBytes; | 
|                 var map = this._map; | 
|   | 
|                 // Clamp excess bits | 
|                 wordArray.clamp(); | 
|   | 
|                 // Convert | 
|                 var base64Chars = []; | 
|                 for (var i = 0; i < sigBytes; i += 3) { | 
|                     var byte1 = (words[i >>> 2]       >>> (24 - (i % 4) * 8))       & 0xff; | 
|                     var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; | 
|                     var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; | 
|   | 
|                     var triplet = (byte1 << 16) | (byte2 << 8) | byte3; | 
|   | 
|                     for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { | 
|                         base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); | 
|                     } | 
|                 } | 
|   | 
|                 // Add padding | 
|                 var paddingChar = map.charAt(64); | 
|                 if (paddingChar) { | 
|                     while (base64Chars.length % 4) { | 
|                         base64Chars.push(paddingChar); | 
|                     } | 
|                 } | 
|   | 
|                 return base64Chars.join(''); | 
|             }, | 
|   | 
|             /** | 
|              * Converts a Base64 string to a word array. | 
|              * | 
|              * @param {string} base64Str The Base64 string. | 
|              * | 
|              * @return {WordArray} The word array. | 
|              * | 
|              * @static | 
|              * | 
|              * @example | 
|              * | 
|              *     var wordArray = CryptoJS.enc.Base64.parse(base64String); | 
|              */ | 
|             parse: function (base64Str) { | 
|                 // Shortcuts | 
|                 var base64StrLength = base64Str.length; | 
|                 var map = this._map; | 
|                 var reverseMap = this._reverseMap; | 
|   | 
|                 if (!reverseMap) { | 
|                         reverseMap = this._reverseMap = []; | 
|                         for (var j = 0; j < map.length; j++) { | 
|                             reverseMap[map.charCodeAt(j)] = j; | 
|                         } | 
|                 } | 
|   | 
|                 // Ignore padding | 
|                 var paddingChar = map.charAt(64); | 
|                 if (paddingChar) { | 
|                     var paddingIndex = base64Str.indexOf(paddingChar); | 
|                     if (paddingIndex !== -1) { | 
|                         base64StrLength = paddingIndex; | 
|                     } | 
|                 } | 
|   | 
|                 // Convert | 
|                 return parseLoop(base64Str, base64StrLength, reverseMap); | 
|   | 
|             }, | 
|   | 
|             _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' | 
|         }; | 
|   | 
|         function parseLoop(base64Str, base64StrLength, reverseMap) { | 
|           var words = []; | 
|           var nBytes = 0; | 
|           for (var i = 0; i < base64StrLength; i++) { | 
|               if (i % 4) { | 
|                   var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); | 
|                   var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); | 
|                   var bitsCombined = bits1 | bits2; | 
|                   words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8); | 
|                   nBytes++; | 
|               } | 
|           } | 
|           return WordArray.create(words, nBytes); | 
|         } | 
|     }()); | 
|   | 
|   | 
|     return CryptoJS.enc.Base64; | 
|   | 
| })); |