PageSourceSearch

https://www.lotto-berlin.de/static/gamebroker_7/default/javascript/external/broprint.bundle.min.js

js lotto-berlin.de collected 2026-10-01 15:31:24 UTC 11,647 bytes, 268 lines download raw bytes

1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
2    "use strict";
3    Object.defineProperty(exports, "__esModule", { value: true });
4    exports.cyrb53 = exports.javaHashCode = exports.murmurhash3_32_gc = void 0;
5    // @ts-nocheck 
6    // https://github.com/artem0/canvas-fingerprinting/blob/master/hash/murmurhash3.js
7    // output - 3705295134 a hashed number of the string.
8    // https://en.wikipedia.org/wiki/MurmurHash
9    function murmurhash3_32_gc(key, seed) {
10        var remainder, bytes, h1, h1b, c1, c2, k1, i;
11        remainder = key.length & 3; // key.length % 4
12        bytes = key.length - remainder;
13        h1 = seed;
14        c1 = 0xcc9e2d51;
15        c2 = 0x1b873593;
16        i = 0;
17        while (i < bytes) {
18            k1 =
19                ((key.charCodeAt(i) & 0xff)) |
20                    ((key.charCodeAt(++i) & 0xff) << 8) |
21                    ((key.charCodeAt(++i) & 0xff) << 16) |
22                    ((key.charCodeAt(++i) & 0xff) << 24);
23            ++i;
24            k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;
25            k1 = (k1 << 15) | (k1 >>> 17);
26            k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;
27            h1 ^= k1;
28            h1 = (h1 << 13) | (h1 >>> 19);
29            h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;
30            h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));
31        }
32        k1 = 0;
33        switch (remainder) {
34            case 3:
35                k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;
36                break;
37            case 2:
38                k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;
39                break;
40            case 1:
41                k1 ^= (key.charCodeAt(i) & 0xff);
42                k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;
43                k1 = (k1 << 15) | (k1 >>> 17);
44                k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;
45                h1 ^= k1;
46                break;
47            default:
48                return 0;
49        }
50        h1 ^= key.length;
51        h1 ^= h1 >>> 16;
52        h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;
53        h1 ^= h1 >>> 13;
54        h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;
55        h1 ^= h1 >>> 16;
56        return h1 >>> 0;
57    }
58    exports.murmurhash3_32_gc = murmurhash3_32_gc;
59    // taken from same above repo
60    const javaHashCode = (string, K) => {
61        var hash = 0;
62        if (string.length === 0) {
63            return hash;
64        }
65        let char;
66        for (var i = 0; i < string.length; i++) {
67            char = string.charCodeAt(i);
68            hash = K * ((hash << 5) - hash) + char;
69            hash = hash & hash;
70        }
71        return hash;
72    };
73    exports.javaHashCode = javaHashCode;
74    // reference - https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript#answer-52171480
75    // output - 6533356943844037
76    const cyrb53 = function (str, seed = 0) {
77        let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
78        for (let i = 0, ch; i < str.length; i++) {
79            ch = str.charCodeAt(i);
80            h1 = Math.imul(h1 ^ ch, 2654435761);
81            h2 = Math.imul(h2 ^ ch, 1597334677);
82        }
83        h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
84        h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
85        return 4294967296 * (2097151 & h2) + (h1 >>> 0);
86    };
87    exports.cyrb53 = cyrb53;
88    
89    },{}],2:[function(require,module,exports){
90    "use strict";
91    Object.defineProperty(exports, "__esModule", { value: true });
92    exports.getCanvasFingerprint = exports.isCanvasSupported = void 0;
93    const isCanvasSupported = () => {
94        var elem = document.createElement('canvas');
95        return !!(elem.getContext && elem.getContext('2d'));
96    };
97    exports.isCanvasSupported = isCanvasSupported;
98    // this working code snippet is taken from - https://github.com/artem0/canvas-fingerprinting/blob/master/fingerprinting/fingerprint.js
99    const getCanvasFingerprint = () => {
100        // If canvas is not supported simply return a static string
101        if (!(0, exports.isCanvasSupported)())
102            return "broprint.js";
103        // draw a canvas of given text and return its data uri
104        // different browser generates different dataUri based on their hardware configs
105        var canvas = document.createElement('canvas');
106        var ctx = canvas.getContext('2d');
107        // https://www.browserleaks.com/canvas#how-does-it-work
108        var txt = 'BroPrint.65@345876';
109        ctx.textBaseline = "top";
110        ctx.font = "14px 'Arial'";
111        ctx.textBaseline = "alphabetic";
112        ctx.fillStyle = "#f60";
113        ctx.fillRect(125, 1, 62, 20);
114        ctx.fillStyle = "#069";
115        ctx.fillText(txt, 2, 15);
116        ctx.fillStyle = "rgba(102, 204, 0, 0.7)";
117        ctx.fillText(txt, 4, 17);
118        return canvas.toDataURL();
119    };
120    exports.getCanvasFingerprint = getCanvasFingerprint;
121    
122    },{}],3:[function(require,module,exports){
123    "use strict";
124    Object.defineProperty(exports, "__esModule", { value: true });
125    exports.generateTheAudioFingerPrint = void 0;
126    //  ref = https://github.com/rickmacgillis/audio-fingerprint/blob/master/audio-fingerprinting.js
127    // @ts-nocheck
128    exports.generateTheAudioFingerPrint = (function () {
129        var context = null;
130        var currentTime = null;
131        var oscillator = null;
132        var compressor = null;
133        var fingerprint = null;
134        var callback = null;
135        function run(cb, debug = false) {
136            callback = cb;
137            try {
138                setup();
139                oscillator.connect(compressor);
140                compressor.connect(context.destination);
141                oscillator.start(0);
142                context.startRendering();
143                context.oncomplete = onComplete;
144            }
145            catch (e) {
146                if (debug) {
147                    throw e;
148                }
149            }
150        }
151        function setup() {
152            setContext();
153            currentTime = context.currentTime;
154            setOscillator();
155            setCompressor();
156        }
157        function setContext() {
158            var audioContext = window.OfflineAudioContext || window.webkitOfflineAudioContext;
159            context = new audioContext(1, 44100, 44100);
160        }
161        function setOscillator() {
162            oscillator = context.createOscillator();
163            oscillator.type = "triangle";
164            oscillator.frequency.setValueAtTime(10000, currentTime);
165        }
166        function setCompressor() {
167            compressor = context.createDynamicsCompressor();
168            setCompressorValueIfDefined('threshold', -50);
169            setCompressorValueIfDefined('knee', 40);
170            setCompressorValueIfDefined('ratio', 12);
171            setCompressorValueIfDefined('reduction', -20);
172            setCompressorValueIfDefined('attack', 0);
173            setCompressorValueIfDefined('release', .25);
174        }
175        function setCompressorValueIfDefined(item, value) {
176            if (compressor[item] !== undefined && typeof compressor[item].setValueAtTime === 'function') {
177                compressor[item].setValueAtTime(value, context.currentTime);
178            }
179        }
180        function onComplete(event) {
181            generateFingerprints(event);
182            compressor.disconnect();
183        }
184        function generateFingerprints(event) {
185            var output = null;
186            for (var i = 4500; 5e3 > i; i++) {
187                var channelData = event.renderedBuffer.getChannelData(0)[i];
188                output += Math.abs(channelData);
189            }
190            fingerprint = output.toString();
191            if (typeof callback === 'function') {
192                return callback(fingerprint);
193            }
194        }
195        return {
196            run: run
197        };
198    })();
199    
200    },{}],4:[function(require,module,exports){
201    "use strict";
202    Object.defineProperty(exports, "__esModule", { value: true });
203    exports.getCurrentBrowserFingerPrint = void 0;
204    const EncryptDecrypt_1 = require("./code/EncryptDecrypt");
205    const GenerateCanvasFingerprint_1 = require("./code/GenerateCanvasFingerprint");
206    const generateTheAudioPrints_1 = require("./code/generateTheAudioPrints");
207    /**
208     * This functions working
209     * @Param {null}
210     * @return {Promise<string>} - resolve(string)
211     */
212    const getCurrentBrowserFingerPrint = () => {
213        /**
214         * @return {Promise} - a frequency number 120.256896523
215         * @reference - https://fingerprintjs.com/blog/audio-fingerprinting/
216         */
217        const getTheAudioPrints = new Promise((resolve, reject) => {
218            generateTheAudioPrints_1.generateTheAudioFingerPrint.run(function (fingerprint) {
219                resolve(fingerprint);
220            });
221        });
222        const getScreenResolution = () => {
223            let tSR =  {
224              width: window.screen.width,
225              height: window.screen.height,
226              viewportWidth: window.innerWidth,
227              viewportHeight: window.innerHeight,
228              devicePixelRatio: window.devicePixelRatio
229            };
230
231            return JSON.stringify(tSR);
232          };
233          const getBrowserLanguages = () => {
234            return navigator.languages || [navigator.language];
235          };
236        /**
237         *
238         * @param {null}
239         * @return {Promise<string>} - and sha512 hashed string
240         */
241        const DevicePrints = new Promise((resolve, reject) => {
242            getTheAudioPrints.then((audioChannelResult) => {
243                let fingerprint = window.btoa(audioChannelResult) + (0, GenerateCanvasFingerprint_1.getCanvasFingerprint)() + getBrowserLanguages(); 
244                // using btoa to hash the values to looks better readable
245                resolve((0, EncryptDecrypt_1.cyrb53)(fingerprint, 0));
246            }).catch(() => {
247                try {
248                    // if failed with audio fingerprint then resolve only with canvas fingerprint
249                    resolve((0, EncryptDecrypt_1.cyrb53)((0, GenerateCanvasFingerprint_1.getCanvasFingerprint)()).toString() + getBrowserLanguages());  
250                }
251                catch (error) {
252                    reject("Failed to generate the finger print of this browser");
253                }
254            });
255        }
256        );
257        return DevicePrints;
258    };
259    exports.getCurrentBrowserFingerPrint = getCurrentBrowserFingerPrint;
260    
261    },{"./code/EncryptDecrypt":1,"./code/GenerateCanvasFingerprint":2,"./code/generateTheAudioPrints":3}],5:[function(require,module,exports){
262    "use strict";
263    
264    var _index = require("@rajesh896/broprint.js/lib/index.js");
265    globalThis.window.getCurrentBrowserFingerPrint = _index.getCurrentBrowserFingerPrint;
266    
267    },{"@rajesh896/broprint.js/lib/index.js":4}]},{},[5]);
268    

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.