1/** 2 * @license jahashtable, a JavaScript implementation of a hash table. It creates a single constructor function called 3 * Hashtable in the global scope. 4 * 5 * http://www.timdown.co.uk/jshashtable/ 6 * Copyright 2013 Tim Down. 7 * Version: 3.0 8 * Build date: 17 July 2013 9 * 10 * Licensed under the Apache License, Version 2.0 (the "License"); 11 * you may not use this file except in compliance with the License. 12 * You may obtain a copy of the License at 13 * 14 * http://www.apache.org/licenses/LICENSE-2.0 15 * 16 * Unless required by applicable law or agreed to in writing, software 17 * distributed under the License is distributed on an "AS IS" BASIS, 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 * See the License for the specific language governing permissions and 20 * limitations under the License. 21 */ 22var Hashtable = (function (UNDEFINED) { 23 var FUNCTION = "function", STRING = "string", UNDEF = "undefined"; 24 25 // Require Array.prototype.splice, Object.prototype.hasOwnProperty and encodeURIComponent. In environments not 26 // having these (e.g. IE <= 5), we bail out now and leave Hashtable null. 27 if (typeof encodeURIComponent == UNDEF || 28 Array.prototype.splice === UNDEFINED || 29 Object.prototype.hasOwnProperty === UNDEFINED) { 30 return null; 31 } 32 33 function toStr(obj) { 34 return (typeof obj == STRING) ? obj : "" + obj;
35 } 36 37 function hashObject(obj) { 38 var hashCode; 39 if (typeof obj == STRING) { 40 return obj; 41 } else if (typeof obj.hashCode == FUNCTION) { 42 // Check the hashCode method really has returned a string 43 hashCode = obj.hashCode(); 44 return (typeof hashCode == STRING) ? hashCode : hashObject(hashCode); 45 } else { 46 return toStr(obj); 47 } 48 } 49 50 function merge(o1, o2) { 51 for (var i in o2) { 52 if (o2.hasOwnProperty(i)) { 53 o1[i] = o2[i]; 54 } 55 } 56 } 57 58 function equals_fixedValueHasEquals(fixedValue, variableValue) { 59 return fixedValue.equals(variableValue); 60 } 61 62 function equals_fixedValueNoEquals(fixedValue, variableValue) { 63 return (typeof variableValue.equals == FUNCTION) ? 64 variableValue.equals(fixedValue) : (fixedValue === variableValue); 65 } 66 67 function createKeyValCheck(kvStr) { 68 return function (kv) { 69 if (kv === null) { 70 throw new Error("null is not a valid " + kvStr); 71 } else if (kv === UNDEFINED) { 72 throw new Error(kvStr + " must not be undefined"); 73 } 74 }; 75 } 76 77 var checkKey = createKeyValCheck("key"), checkValue = createKeyValCheck("value"); 78 79 /*----------------------------------------------------------------------------------------------------------------*/ 80 81 function Bucket(hash, firstKey, firstValue, equalityFunction) { 82 this[0] = hash; 83 this.entries = []; 84 this.addEntry(firstKey, firstValue); 85 86 if (equalityFunction !== null) { 87 this.getEqualityFunction = function () { 88 return equalityFunction; 89 }; 90 } 91 } 92 93 var EXISTENCE = 0, ENTRY = 1, ENTRY_INDEX_AND_VALUE = 2; 94 95 function createBucketSearcher(mode) { 96 return function (key) { 97 var i = this.entries.length, entry, equals = this.getEqualityFunction(key); 98 while (i--) { 99 entry = this.entries[i]; 100 if (equals(key, entry[0])) { 101 switch (mode) { 102 case EXISTENCE: 103 return true; 104 case ENTRY: 105 return entry; 106 case ENTRY_INDEX_AND_VALUE: 107 return [i, entry[1]]; 108 } 109 } 110 } 111 return false; 112 }; 113 } 114 115 function createBucketLister(entryProperty) { 116 return function (aggregatedArr) { 117 var startIndex = aggregatedArr.length; 118 for (var i = 0, entries = this.entries, len = entries.length; i < len; ++i) { 119 aggregatedArr[startIndex + i] = entries[i][entryProperty]; 120 } 121 }; 122 } 123 124 Bucket.prototype = { 125 getEqualityFunction: function (searchValue) { 126 return (typeof searchValue.equals == FUNCTION) ? equals_fixedValueHasEquals : equals_fixedValueNoEquals; 127 }, 128 129 getEntryForKey: createBucketSearcher(ENTRY), 130 131 getEntryAndIndexForKey: createBucketSearcher(ENTRY_INDEX_AND_VALUE), 132 133 removeEntryForKey: function (key) { 134 var result = this.getEntryAndIndexForKey(key); 135 if (result) { 136 this.entries.splice(result[0], 1); 137 return result[1]; 138 } 139 return null; 140 }, 141 142 addEntry: function (key, value) { 143 this.entries.push([key, value]); 144 }, 145 146 keys: createBucketLister(0), 147 148 values: createBucketLister(1), 149 150 getEntries: function (destEntries) { 151 var startIndex = destEntries.length; 152 for (var i = 0, entries = this.entries, len = entries.length; i < len; ++i) { 153 // Clone the entry stored in the bucket before adding to array 154 destEntries[startIndex + i] = entries[i].slice(0); 155 } 156 }, 157 158 containsKey: createBucketSearcher(EXISTENCE), 159 160 containsValue: function (value) { 161 var entries = this.entries, i = entries.length; 162 while (i--) { 163 if (value === entries[i][1]) { 164 return true; 165 } 166 } 167 return false; 168 } 169 }; 170 171 /*----------------------------------------------------------------------------------------------------------------*/ 172
173 // Supporting functions for searching hashtable buckets 174 175 function searchBuckets(buckets, hash) { 176 var i = buckets.length, bucket; 177 while (i--) { 178 bucket = buckets[i]; 179 if (hash === bucket[0]) { 180 return i; 181 } 182 } 183 return null; 184 } 185 186 function getBucketForHash(bucketsByHash, hash) { 187 var bucket = bucketsByHash[hash]; 188 189 // Check that this is a genuine bucket and not something inherited from the bucketsByHash's prototype 190 return (bucket && (bucket instanceof Bucket)) ? bucket : null; 191 } 192 193 /*----------------------------------------------------------------------------------------------------------------*/ 194 195 function Hashtable() { 196 var buckets = []; 197 var bucketsByHash = {}; 198 var properties = { 199 replaceDuplicateKey: true, 200 hashCode: hashObject, 201 equals: null 202 }; 203 204 var arg0 = arguments[0], arg1 = arguments[1]; 205 if (arg1 !== UNDEFINED) { 206 properties.hashCode = arg0; 207 properties.equals = arg1; 208 } else if (arg0 !== UNDEFINED) { 209 merge(properties, arg0); 210 } 211 212 var hashCode = properties.hashCode, equals = properties.equals; 213 214 this.properties = properties; 215 216 this.put = function (key, value) { 217 checkKey(key); 218 checkValue(value); 219 var hash = hashCode(key), bucket, bucketEntry, oldValue = null; 220 221 // Check if a bucket exists for the bucket key 222 bucket = getBucketForHash(bucketsByHash, hash); 223 if (bucket) { 224 // Check this bucket to see if it already contains this key 225 bucketEntry = bucket.getEntryForKey(key); 226 if (bucketEntry) { 227 // This bucket entry is the current mapping of key to value, so replace the old value. 228 // Also, we optionally replace the key so that the latest key is stored. 229 if (properties.replaceDuplicateKey) { 230 bucketEntry[0] = key; 231 } 232 oldValue = bucketEntry[1]; 233 bucketEntry[1] = value; 234 } else { 235 // The bucket does not contain an entry for this key, so add one 236 bucket.addEntry(key, value); 237 } 238 } else { 239 // No bucket exists for the key, so create one and put our key/value mapping in 240 bucket = new Bucket(hash, key, value, equals); 241 buckets.push(bucket); 242 bucketsByHash[hash] = bucket; 243 } 244 return oldValue; 245 }; 246 247 this.get = function (key) { 248 checkKey(key); 249 250 var hash = hashCode(key); 251 252 // Check if a bucket exists for the bucket key 253 var bucket = getBucketForHash(bucketsByHash, hash); 254 if (bucket) { 255 // Check this bucket to see if it contains this key 256 var bucketEntry = bucket.getEntryForKey(key); 257 if (bucketEntry) { 258 // This bucket entry is the current mapping of key to value, so return the value. 259 return bucketEntry[1]; 260 } 261 } 262 return null; 263 }; 264 265 this.containsKey = function (key) { 266 checkKey(key); 267 var bucketKey = hashCode(key); 268 269 // Check if a bucket exists for the bucket key 270 var bucket = getBucketForHash(bucketsByHash, bucketKey); 271 272 return bucket ? bucket.containsKey(key) : false; 273 }; 274 275 this.containsValue = function (value) { 276 checkValue(value); 277 var i = buckets.length; 278 while (i--) { 279 if (buckets[i].containsValue(value)) { 280 return true; 281 } 282 } 283 return false; 284 }; 285 286 this.clear = function () { 287 buckets.length = 0; 288 bucketsByHash = {}; 289 }; 290 291 this.isEmpty = function () { 292 return !buckets.length; 293 }; 294 295 var createBucketAggregator = function (bucketFuncName) { 296 return function () { 297 var aggregated = [], i = buckets.length; 298 while (i--) { 299 buckets[i][bucketFuncName](aggregated); 300 } 301 return aggregated; 302 }; 303 }; 304 305 this.keys = createBucketAggregator("keys"); 306 this.values = createBucketAggregator("values"); 307 this.entries = createBucketAggregator("getEntries"); 308 309 this.remove = function (key) { 310 checkKey(key); 311 312 var hash = hashCode(key), bucketIndex, oldValue = null; 313 314 // Check if a bucket exists for the bucket key 315 var bucket = getBucketForHash(bucketsByHash, hash); 316 317 if (bucket) { 318 // Remove entry from this bucket for this key 319 oldValue = bucket.removeEntryForKey(key); 320 if (oldValue !== null) { 321 // Entry was removed, so check if bucket is empty 322 if (bucket.entries.length == 0) { 323 // Bucket is empty, so remove it from the bucket collections 324 bucketIndex = searchBuckets(buckets, hash); 325 buckets.splice(bucketIndex, 1); 326 delete bucketsByHash[hash]; 327 } 328 } 329 } 330 return oldValue; 331 }; 332 333 this.size = function () { 334 var total = 0, i = buckets.length; 335 while (i--) { 336 total += buckets[i].entries.length; 337 } 338 return total; 339 }; 340 } 341 342 Hashtable.prototype = { 343 each: function (callback) { 344 var entries = this.entries(), i = entries.length, entry; 345 while (i--) { 346 entry = entries[i];
347 callback(entry[0], entry[1]); 348 } 349 }, 350 351 equals: function (hashtable) { 352 var keys, key, val, count = this.size(); 353 if (count == hashtable.size()) { 354 keys = this.keys(); 355 while (count--) { 356 key = keys[count]; 357 val = hashtable.get(key); 358 if (val === null || val !== this.get(key)) { 359 return false; 360 } 361 } 362 return true; 363 } 364 return false; 365 }, 366 367 putAll: function (hashtable, conflictCallback) { 368 var entries = hashtable.entries(); 369 var entry, key, value, thisValue, i = entries.length; 370 var hasConflictCallback = (typeof conflictCallback == FUNCTION); 371 while (i--) { 372 entry = entries[i]; 373 key = entry[0]; 374 value = entry[1]; 375 376 // Check for a conflict. The default behaviour is to overwrite the value for an existing key 377 if (hasConflictCallback && (thisValue = this.get(key))) { 378 value = conflictCallback(key, thisValue, value); 379 } 380 this.put(key, value); 381 } 382 }, 383 384 clone: function () { 385 var clone = new Hashtable(this.properties); 386 clone.putAll(this); 387 return clone; 388 } 389 }; 390 391 Hashtable.prototype.toQueryString = function () { 392 var entries = this.entries(), i = entries.length, entry; 393 var parts = []; 394 while (i--) { 395 entry = entries[i]; 396 parts[i] = encodeURIComponent(toStr(entry[0])) + "=" + encodeURIComponent(toStr(entry[1])); 397 } 398 return parts.join("&"); 399 }; 400 401 return Hashtable; 402})(); 403function startsWith(c,d){return(c.indexOf(d)===0) 404}function DomDataCollection(n){var j=this; 405j.config={recursion_level:1,collection_mode:"partial",functionsToExclude:[],function_list_size:1024,json_script:n?n:"json2.js"}; 406j.emptyDomData=function(){j.dom_data={functions:{names:[],excluded:{size:0,count:0},truncated:false},inputs:[],iFrames:[],scripts:[],collection_status:DomDataCollection.NotStarted} 407}; 408j.startInspection=function(){var b=false; 409var c=true; 410BrowserDetect.init(); 411if(!(BrowserDetect.browser==="Explorer")){try{j.inspectJSFunctions(); 412c=false 413}catch(a){b=b||true 414}}else{j.dom_data.functions=[]; 415if(j.dom_data.functions===undefined||j.dom_data.functions.names===undefined){j.dom_data.functions={names:[],excluded:{size:0,count:0},truncated:false} 416}}try{j.inspectFrames(); 417c=false 418}catch(a){b=b||true 419}try{j.inspectScripts(); 420c=false 421}catch(a){b=b||true 422}try{j.inspectInputFields(); 423c=false 424}catch(a){b=b||true 425}if(b){if(c){j.dom_data.collection_status=DomDataCollection.Fail 426}else{j.dom_data.collection_status=DomDataCollection.Partial 427}}else{j.dom_data.collection_status=DomDataCollection.Success 428}if(!(BrowserDetect.browser==="Explorer")){j.handleSizeLimit() 429}}; 430j.domDataAsJSON=function(){return stripIllegalChars(JSON.stringify(j.dom_data)) 431}; 432j.recursiveGetAllFunctionNamesUnderElement=function(B,e,A){var C; 433var d; 434var g; 435var x=j.config; 436var D=x.recursion_level; 437var a=x.collection_mode; 438if(j.dom_data.functions===undefined||j.dom_data.functions.names===undefined){j.dom_data.functions={names:[],excluded:{size:0,count:0},truncated:false} 439}var f=j.dom_data.functions; 440var c=f.excluded; 441for(var E in e){try{var F=e[E]; 442C=""+F; 443if(B.length>0){prefix=B+"." 444}else{prefix="" 445}d=prefix+E; 446if(k(F)){if(j.functionShouldBeCollected(F,E)){var G=f.names; 447g=G.length; 448G[g]=d 449}else{if(a=="partial"){c.size+=C.length; 450c.count++ 451}}}if(A+1<D){j.recursiveGetAllFunctionNamesUnderElement(d,F,A+1) 452}else{f.names.sort() 453}}catch(b){if(!window.console){window.console={}; 454window.console.info=o; 455window.console.log=o; 456window.console.warn=o; 457window.console.error=o 458}if(console&&console.log){console.log("error counting functions: "+b.toString()) 459}}}}; 460function o(){}function k(a){return typeof a=="function" 461}function h(a){return a.length 462}var l=new Hashtable(); 463j.initFunctionsToExclude=function(){if(l){l.clear() 464}var a=j.config.functionsToExclude; 465var b=a.length; 466while(b--){l.put(a[b],"") 467}}; 468j.functionShouldBeCollected=function m(a,b){if(j.config.collection_mode=="full"){return true 469}else{if(l.size()===0){j.initFunctionsToExclude() 470}if(l.containsKey(b)){return false 471}else{return true 472}}}; 473j.inspectJSFunctions=function(){j.dom_data.functions=[]; 474j.recursiveGetAllFunctionNamesUnderElement("",window,0) 475}; 476j.handleSizeLimit=function(){var x=j.dom_data; 477var g=j.config; 478var v=g.function_list_size; 479var e=x.functions; 480e.names.sort(); 481var b=JSON.stringify(x); 482if(v<0){v=0 483}var a=0; 484if(g.colllection_mode!="full"&&b.length>v){var c=e.names; 485var d=c.toString(); 486var y=b.length-JSON.stringify(c).length+"[]".length; 487var f=false; 488var w=c.length; 489while(!f){if(a++==1000){f=true 490}lastComma=d.lastIndexOf(","); 491if(lastComma>=0&&w>0){quotation_marks=w*2; 492if(y+lastComma+quotation_marks>v){d=d.substring(0,lastComma-1); 493w-- 494}else{f=true 495}}else{f=true 496}}if(w>1){e.truncated=true; 497e.names=e.names.slice(0,w-1); 498x.functions.truncated=true 499}else{j.emptyDomData(); 500x=j.dom_data; 501x.collection_status=DomDataCollection.Partial; 502x.functions.truncated=true 503}}}; 504j.inspectFrames=function(){j.countElements("iframe") 505}; 506j.countElements=function(e){var d; 507var c=document.getElementsByTagName(e); 508if(j.dom_data.iFrames===undefined){j.dom_data.iFrames=[] 509}var b=j.dom_data.iFrames; 510var a=b.length; 511for(i=0; 512i<c.length; 513i++){b[a+i]=""+c[i].src 514}b.sort() 515}; 516j.inspectScripts=function(){var b=document.getElementsByTagName("script"); 517j.dom_data.scripts=[]; 518for(var a=0; 519a<b.length; 520a++){j.dom_data.scripts[a]=b[a].text.length 521}}; 522j.collectFields=function(b){var r=document.getElementsByTagName(b);
523if(j.dom_data.inputs===undefined){j.dom_data.inputs=[] 524}var e=j.dom_data.inputs; 525var g=e.length; 526var a=r.length; 527while(a--){var c=r[a]; 528var d=c.name; 529var f=c.id; 530if(d&&d.length>0){element_name=d 531}else{if(f&&f.length>0){element_name=f 532}else{element_name="NO_NAME" 533}}e[g+a]=element_name 534}e.sort() 535}; 536j.inspectInputFields=function(){j.collectFields("input"); 537j.collectFields("textarea"); 538j.collectFields("select"); 539j.collectFields("button") 540}; 541loadJSON=function(){if(!window.JSON){var a=document.getElementsByTagName("head")[0]; 542var b=document.createElement("script"); 543b.type="text/javascript"; 544b.src=j.config.json_script; 545a.appendChild(b) 546}}; 547j.emptyDomData(); 548loadJSON() 549}DomDataCollection.Success=0; 550DomDataCollection.Fail=1; 551DomDataCollection.Partial=2; 552DomDataCollection.NotStarted=3; 553function IE_FingerPrint(){this.deviceprint_browser=function(){var a=navigator.userAgent.toLowerCase(); 554t=a+SEP+navigator.appVersion+SEP+navigator.platform; 555t+=SEP+navigator.appMinorVersion+SEP+navigator.cpuClass+SEP+navigator.browserLanguage; 556t+=SEP+ScriptEngineBuildVersion(); 557return t 558}; 559this.deviceprint_software=function(){var b=""; 560var l=true; 561try{document.body.addBehavior("#default#clientCaps"); 562var k; 563var m=d.length; 564for(i=0; 565i<m; 566i++){k=activeXDetect(d[i]); 567var j=c[i]; 568if(k){if(l===true){b+=j+PAIR+k; 569l=false 570}else{b+=SEP+j+PAIR+k 571}}else{b+=""; 572l=false 573}}}catch(a){}return b 574}; 575var c=["abk","wnt","aol","arb","chs","cht","dht","dhj","dan","dsh","heb","ie5","icw","ibe","iec","ieh","iee","jap","krn","lan","swf","shw","msn","wmp","obp","oex","net","pan","thi","tks","uni","vtc","vnm","mvm","vbs","wfd"]; 576var d=["7790769C-0471-11D2-AF11-00C04FA35D02","89820200-ECBD-11CF-8B85-00AA005B4340","47F67D00-9E55-11D1-BAEF-00C04FC2D130","76C19B38-F0C8-11CF-87CC-0020AFEECF20","76C19B34-F0C8-11CF-87CC-0020AFEECF20","76C19B33-F0C8-11CF-87CC-0020AFEECF20","9381D8F2-0288-11D0-9501-00AA00B911A5","4F216970-C90C-11D1-B5C7-0000F8051515","283807B5-2C60-11D0-A31D-00AA00B92C03","44BBA848-CC51-11CF-AAFA-00AA00B6015C","76C19B36-F0C8-11CF-87CC-0020AFEECF20","89820200-ECBD-11CF-8B85-00AA005B4383","5A8D6EE0-3E18-11D0-821E-444553540000","630B1DA0-B465-11D1-9948-00C04F98BBC9","08B0E5C0-4FCB-11CF-AAA5-00401C608555","45EA75A0-A269-11D1-B5BF-0000F8051515","DE5AED00-A4BF-11D1-9948-00C04F98BBC9","76C19B30-F0C8-11CF-87CC-0020AFEECF20","76C19B31-F0C8-11CF-87CC-0020AFEECF20","76C19B50-F0C8-11CF-87CC-0020AFEECF20","D27CDB6E-AE6D-11CF-96B8-444553540000","2A202491-F00D-11CF-87CC-0020AFEECF20","5945C046-LE7D-LLDL-BC44-00C04FD912BE","22D6F312-B0F6-11D0-94AB-0080C74C7E95","3AF36230-A269-11D1-B5BF-0000F8051515","44BBA840-CC51-11CF-AAFA-00AA00B6015C","44BBA842-CC51-11CF-AAFA-00AA00B6015B","76C19B32-F0C8-11CF-87CC-0020AFEECF20","76C19B35-F0C8-11CF-87CC-0020AFEECF20","CC2A9BA0-3BDD-11D0-821E-444553540000","3BF42070-B3B1-11D1-B5C5-0000F8051515","10072CEC-8CC1-11D1-986E-00A0C955B42F","76C19B37-F0C8-11CF-87CC-0020AFEECF20","08B0E5C0-4FCB-11CF-AAA5-00401C608500","4F645220-306D-11D2-995D-00C04F98BBC9","73FA19D0-2D75-11D2-995D-00C04F98BBC9"] 577}IE_FingerPrint.prototype=new FingerPrint(); 578function Mozilla_FingerPrint(){}Mozilla_FingerPrint.prototype=new FingerPrint(); 579function Opera_FingerPrint(){}Opera_FingerPrint.prototype=new FingerPrint(); 580function Timer(){this.startTime=new Date().getTime() 581}Timer.prototype.start=function(){this.startTime=new Date().getTime() 582}; 583Timer.prototype.duration=function(){return(new Date().getTime())-this.startTime 584}; 585function randrange(n,k){var r=k-n; 586if(r<=0){throw new Exception("max must be larger than min") 587}var m=Math.ceil(Math.log2(r)/8); 588var o=Math.pow(256,m); 589var j=new Uint8Array(m); 590while(true){window.crypto.getRandomValues(j); 591var l=0; 592for(var q=0; 593q<m; 594q++){l=(l<<8)+j[q] 595}if(l+r-(l%r)<o){return n+(l%r) 596}}}function detectIE(){var k=window.navigator.userAgent; 597var f=k.indexOf("MSIE "); 598if(f>0){return parseInt(k.substring(f+5,k.indexOf(".",f)),10) 599}var g=k.indexOf("Trident/"); 600if(g>0){var h=k.indexOf("rv:"); 601return parseInt(k.substring(h+3,k.indexOf(".",h)),10) 602}var j=k.indexOf("Edge/"); 603if(j>0){return parseInt(k.substring(j+5,k.indexOf(".",j)),10) 604}return false 605}function getRandomPort(){var d=detectIE(); 606if(d==false){var c=randrange(4000,60000); 607return c 608}else{return Math.floor(Math.random()*60000+4000) 609}}var ProxyCollector={}; 610ProxyCollector.internalIP="127.0.0.1"; 611ProxyCollector.externalIP; 612ProxyCollector.internalPingTime; 613ProxyCollector.externalPingTime; 614ProxyCollector.setInternalPingTime=function(b){ProxyCollector.internalPingTime=b 615}; 616ProxyCollector.setExternalPingTime=function(b){ProxyCollector.externalPingTime=b 617}; 618ProxyCollector.PROXY_DETECTION_TIMEOUT=5000; 619ProxyCollector.TIMEOUT_CHECK_FREQUENCY=1000; 620ProxyCollector.isTimedOut=function(d,e,f){_timer=new Timer(); 621if((e-_timer.duration()<=0)&&(((typeof ProxyCollector.internalPingTime==="undefined")&&((new RegExp("internalPingTime")).test(d)))||((typeof ProxyCollector.externalPingTime==="undefined")&&((new RegExp("externalPingTime")).test(d))))){d.call(this,-1); 622f.abort() 623}else{if(((typeof ProxyCollector.internalPingTime==="undefined")&&((new RegExp("internalPingTime")).test(d)))||((typeof ProxyCollector.externalPingTime==="undefined")&&((new RegExp("externalPingTime")).test(d)))){setTimeout(function(){ProxyCollector.isTimedOut(d,e-(_timer.duration()+ProxyCollector.TIMEOUT_CHECK_FREQUENCY),f) 624},ProxyCollector.TIMEOUT_CHECK_FREQUENCY) 625}}}; 626ProxyCollector.doAjax=function(l,n){var m=document.location.protocol; 627if(m=="http:"||m=="https:"){var k=m+"//"+l+":"+getRandomPort()+"/NonExistentImage"+getRandomPort()+".gif" 628}else{n.call(this,-1); 629o.abort() 630}var o; 631var r; 632if(window.XDomainRequest){o=new window.XDomainRequest(); 633r=new Timer(); 634try{o.timeout=ProxyCollector.PROXY_DETECTION_TIMEOUT;
635o.ontimeout=function(){n.call(this,-1); 636o.abort() 637}; 638o.onprogress=function(){n.call(this,r.duration()); 639o.abort() 640}; 641o.onerror=function(){n.call(this,r.duration()); 642o.abort() 643}; 644o.open("GET",k,true); 645o.send() 646}catch(j){ProxyCollector.doAjaxViaImage(n,k) 647}}else{o=new XMLHttpRequest(); 648var q="ontimeout" in o; 649r=new Timer(); 650try{o.onreadystatechange=function(){if(o.readyState==4){if(((typeof ProxyCollector.internalPingTime==="undefined")&&((new RegExp("internalPingTime")).test(n)))||((typeof ProxyCollector.externalPingTime==="undefined")&&((new RegExp("externalPingTime")).test(n)))){n.call(this,r.duration()) 651}}}; 652o.timeout=ProxyCollector.PROXY_DETECTION_TIMEOUT; 653o.ontimeout=function(){n.call(this,-1); 654o.abort() 655}; 656o.open("GET",k,true); 657o.send(); 658if(!q){ProxyCollector.isTimedOut(n,ProxyCollector.PROXY_DETECTION_TIMEOUT-r.duration(),o) 659}}catch(j){ProxyCollector.doAjaxViaImage(n,k) 660}}}; 661ProxyCollector.doAjaxViaImage=function(g,e){var f=new Image(); 662var h=new Timer(); 663f.onerror=function(){g.call(this,h.duration()) 664}; 665f.src=e 666}; 667ProxyCollector.collect=function(){ProxyCollector.doAjax(ProxyCollector.externalIP,ProxyCollector.setExternalPingTime); 668if(typeof XDomainRequest=="object"){if(!ProxyCollector.externalPingTime){forceIE89Synchronicity() 669}}else{ProxyCollector.doAjax(ProxyCollector.internalIP,ProxyCollector.setInternalPingTime) 670}}; 671forceIE89Synchronicity=function(){if(!ProxyCollector.externalPingTime){setTimeout(forceIE89Synchronicity,100) 672}else{ProxyCollector.doAjax(ProxyCollector.internalIP,ProxyCollector.setInternalPingTime) 673}}; 674ProxyCollector.isValidIPAddress=function(h){var e=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; 675if(e.test(h)){var g=h.split("."); 676if(parseInt(parseFloat(g[0]))==0){return false 677}for(var f=0; 678f<g.length; 679f++){if(parseInt(parseFloat(g[f]))>255){return false 680}}return true 681}else{return false 682}}; 683ProxyCollector.initProxyCollection=function(){if(ProxyCollector.isValidIPAddress(ProxyCollector.externalIP)&&ProxyCollector.isValidIPAddress(ProxyCollector.internalIP)){ProxyCollector.collect() 684}}; 685function BlackberryLocationCollector(){var m=this; 686var q=null; 687this.getGeolocationWatchId=function(){return q 688}; 689var n=null; 690this.getGeolocationLastPosition=function(){return n 691}; 692var r=4; 693this.getGeolocationStatusCode=function(){return r 694}; 695var l=""; 696this.getGeolocationErrorMessage=function(){return l 697}; 698var k={aidMode:2,timeout:180,relevancy:120,expiration:48,alertDebug:false}; 699var o=-1; 700var j=0; 701this.getInvokeCount=function(){return j 702}; 703this.handleBlackBerryLocationTimeout=function(){if(o!=-1){m.stopWatch(); 704r=3; 705if(j===0&&k.aidMode!==0){j++; 706m.startLocationWatch() 707}}}; 708this.handlePosition=function(){clearTimeout(o); 709o=-1; 710var c=false; 711if(blackberry.location.latitude===0&&blackberry.location.longitude===0){if(k.alertDebug){alert("Got empty position") 712}if(n===null){r=2 713}}else{var a=null; 714if(blackberry.location.timestamp){a=getTimestampInMillis(blackberry.location.timestamp) 715}else{a=new Date().getTime() 716}var b=new Date().getTime(); 717if((b-a)<=(k.expiration*60*60*1000)){if(n===null||a>n.timestamp){var d=n===null?0:n.timestamp; 718if(k.alertDebug){alert("Saved new position. New timestamp: "+a+" Old: "+d) 719}n={timestamp:a,coords:{latitude:blackberry.location.latitude,longitude:blackberry.location.longitude}}; 720r=0 721}else{if(k.alertDebug){alert("New position is not saved. New timestamp: "+a+" Old: "+n.timestamp) 722}}}else{if(k.alertDebug){alert("New position is not saved. It is expired: "+((b-a)*1000*60*60)+" hours old") 723}}}if(n!==null){var b=new Date().getTime(); 724c=(b-n.timestamp)<(k.relevancy*1000) 725}m.stopWatch(); 726if(k.alertDebug){alert("Relevant position? "+c) 727}if((j===0&&k.aidMode!==0)||!c){j++; 728m.startLocationWatch() 729}}; 730this.init=function(a,b,d,c){if(a>=0&&a<=2){k.aidMode=a 731}if(b!==null&&b>=90&&b<=300){k.timeout=b 732}if(d!==null&&d>=60&&d<=240){k.relevancy=d 733}if(c!==null&&c>=24&&c<=60){k.expiration=c 734}}; 735this.startLocationWatch=function(){if(j===0){blackberry.location.setAidMode(0) 736}else{blackberry.location.setAidMode(k.aidMode) 737}var a=k.timeout*1000; 738o=setTimeout("geoLocator.handleBlackBerryLocationTimeout()",a); 739blackberry.location.onLocationUpdate(m.handlePosition); 740blackberry.location.refreshLocation(); 741q=1; 742return true 743}; 744this.stopWatch=function(){try{blackberry.location.removeLocationUpdate(m.handlePosition) 745}catch(a){}q=-2 746}; 747this.generateGeolocationJSONStruct=function(){var b=null; 748if(n!==null){var a=convertTimestampToGMT(n.timestamp); 749b={GeoLocationInfo:[{Status:r,Longitude:n.coords.longitude,Latitude:n.coords.latitude,Timestamp:a}]} 750}else{b={GeoLocationInfo:[{Status:r}]} 751}return JSON.stringify(b) 752} 753}function detectFields(){var u="form"; 754var n="input"; 755var j=document.getElementsByTagName("form"); 756var w=j.length; 757var m; 758var v; 759var q=[]; 760q.push("url="+window.location.href); 761for(var r=0; 762r<w; 763r++){q.push(u+"="+j[r].name); 764m=j[r].getElementsByTagName("input"); 765v=m.length; 766for(var s=0; 767s<v; 768s++){if(m[s].type!="hidden"){q.push(n+"="+m[s].name) 769}}}var o=q.join("|"); 770return o 771}var SEP="|"; 772var PAIR="="; 773var DEV="~"; 774function FingerPrint(){var d="3.6_1"; 775var c=new Hashtable(); 776c.put("npnul32","def"); 777c.put("npqtplugin6","qt6"); 778c.put("npqtplugin5","qt5"); 779c.put("npqtplugin4","qt4"); 780c.put("npqtplugin3","qt3"); 781c.put("npqtplugin2","qt2"); 782c.put("npqtplugin","qt1"); 783c.put("nppdf32","pdf"); 784c.put("NPSWF32","swf"); 785c.put("NPJava11","j11"); 786c.put("NPJava12","j12"); 787c.put("NPJava13","j13"); 788c.put("NPJava32","j32"); 789c.put("NPJava14","j14"); 790c.put("npoji600","j61"); 791c.put("NPJava131_16","j16"); 792c.put("NPOFFICE","mso"); 793c.put("npdsplay","wpm"); 794c.put("npwmsdrm","drm"); 795c.put("npdrmv2","drn"); 796c.put("nprjplug","rjl"); 797c.put("nppl3260","rpl"); 798c.put("nprpjplug","rpv"); 799c.put("npchime","chm"); 800c.put("npCortona","cor"); 801c.put("np32dsw","dsw"); 802c.put("np32asw","asw"); 803c.put("internal-pdf-viewer","pdf"); 804c.put("mhjfbmdgcfjbbpaeojofohoefgiehjai","pdf"); 805c.put("internal-nacl-plugin","nacl"); 806c.put("widevinecdmadapter","dll"); 807c.put("Flash","flash"); 808c.put("npctrl","dll"); 809this.deviceprint_version=function(){return d 810}; 811this.deviceprint_browser=function(){var a=navigator.userAgent.toLowerCase(); 812var b=a+SEP+navigator.appVersion+SEP+navigator.platform; 813return b 814}; 815this.deviceprint_software=function(){var a=""; 816var q=true; 817var b=""; 818var n=""; 819var s=navigator.plugins; 820var o=navigator.mimeTypes; 821if(s.length>0){var r=""; 822var u="Plugins"; 823var m=s.length; 824for(i=0; 825i<m; 826i++){plugin=s[i]; 827r=stripFullPath(plugin.filename,u,"."); 828if(q===true){n=c.containsKey(r); 829if(n){b+=c.get(r); 830q=false 831}else{b=""; 832q=false 833}}else{n=c.containsKey(r); 834if(n){b+=SEP+c.get(r) 835}else{b+="" 836}}}a=stripIllegalChars(b) 837}else{if(o.length>0){n=""; 838for(i=0; 839i<o.length; 840i++){mimeType=o[i]; 841if(q===true){n=c.containsKey(mimeType); 842if(n){a+=c.get(mimeType)+PAIR+mimeType; 843q=false 844}
844else{a+="unknown"+PAIR+mimeType; 845q=false 846}}else{n=c.containsKey(mimeType); 847if(n){a+=SEP+c.get(mimeType)+PAIR+mimeType 848}else{b+="" 849}}}}}return a 850}; 851this.deviceprint_display=function(){var a=""; 852if(self.screen){a+=screen.colorDepth+SEP+screen.width+SEP+screen.height+SEP+screen.availHeight 853}return a 854}; 855this.deviceprint_all_software=function(){var m=""; 856var r=true; 857var q=navigator.plugins; 858var b=q.length; 859if(b>0){var o=""; 860var a=""; 861var n=""; 862for(i=0; 863i<b; 864i++){var l=q[i]; 865a=l.filename; 866a=stripFullPath(a,"Plugins","."); 867if(r===true){o+=a; 868r=false 869}else{o+=SEP+a 870}}m=stripIllegalChars(o) 871}return m 872}; 873this.deviceprint_timezone=function(){var a=(new Date().getTimezoneOffset()/60)*(-1); 874var b=new Date(); 875if(b.deviceprint_dst()){a-- 876}else{}return a 877}; 878Date.prototype.deviceprint_stdTimezoneOffset=function(){var b=new Date(this.getFullYear(),0,1); 879var a=new Date(this.getFullYear(),6,1); 880return Math.max(b.getTimezoneOffset(),a.getTimezoneOffset()) 881}; 882Date.prototype.deviceprint_dst=function(){return this.getTimezoneOffset()<this.deviceprint_stdTimezoneOffset() 883}; 884this.deviceprint_language=function(){var j; 885var a=navigator.language; 886var k=navigator.browserLanguage; 887var b=navigator.systemLanguage; 888var h=navigator.userLanguage; 889if(typeof(a)!=="undefined"){j="lang"+PAIR+a+SEP 890}else{if(typeof(k)!=="undefined"){j="lang"+PAIR+k+SEP 891}else{j="lang"+PAIR+""+SEP 892}}if((typeof(b)!=="undefined")){j+="syslang"+PAIR+b+SEP 893}else{j+="syslang"+PAIR+""+SEP 894}if((typeof(h)!=="undefined")){j+="userlang"+PAIR+h 895}else{j+="userlang"+PAIR+"" 896}return j 897}; 898this.deviceprint_java=function(){var a=(navigator.javaEnabled())?1:0; 899return a 900}; 901this.deviceprint_cookie=function(){var a=(navigator.cookieEnabled)?1:0; 902if(typeof navigator.cookieEnabled==="undefined"&&!a){document.cookie="testcookie"; 903a=(document.cookie.indexOf("testcookie")!==-1)?1:0 904}return a 905}; 906this.deviceprint_appName=function(){var a=navigator.appName; 907return(typeof(a)!="undefined")?a:"" 908}; 909this.deviceprint_appCodeName=function(){var a=navigator.appCodeName; 910return(typeof(a)!="undefined")?a:"" 911}; 912this.deviceprint_online=function(){var a=navigator.onLine; 913return(typeof(a)!="undefined")?a:"" 914}; 915this.deviceprint_opsProfile=function(){var a=navigator.opsProfile; 916return((typeof(a)!="undefined")&&(a!==null))?a:"" 917}; 918this.deviceprint_userProfile=function(){var a=navigator.userProfile; 919return((typeof(a)!="undefined")&&(a!==null))?a:"" 920}; 921this.deviceprint_screen_availWidth=function(){var a=screen.availWidth; 922return(typeof(a)!="undefined")?a:"" 923}; 924this.deviceprint_screen_pixelDepth=function(){var a=screen.pixelDepth; 925return(typeof(a)!="undefined")?a:"" 926}; 927this.deviceprint_screen_bufferDepth=function(){var a=screen.bufferDepth; 928return(typeof(a)!="undefined")?a:"" 929}; 930this.deviceprint_screen_deviceXDPI=function(){var a=screen.deviceXDPI; 931return(typeof(a)!="undefined")?a:"" 932}; 933this.deviceprint_screen_deviceYDPI=function(){var a=screen.deviceYDPI; 934return(typeof(a)!="undefined")?a:"" 935}; 936this.deviceprint_screen_logicalXDPI=function(){var a=screen.logicalXDPI; 937return(typeof(a)!="undefined")?a:"" 938}; 939this.deviceprint_screen_logicalYDPI=function(){var a=screen.logicalYDPI; 940return(typeof(a)!="undefined")?a:"" 941}; 942this.deviceprint_screen_fontSmoothingEnabled=function(){var a=screen.fontSmoothingEnabled; 943return(typeof(a)!="undefined")?a:"" 944}; 945this.deviceprint_screen_updateInterval=function(){var a=screen.updateInterval; 946return(typeof(a)!="undefined")?a:"" 947}; 948this.deviceprint_ping_in=function(){if(ProxyCollector&&ProxyCollector.internalPingTime){return ProxyCollector.internalPingTime 949}else{return"" 950}}; 951this.deviceprint_ping_ex=function(){if(ProxyCollector&&ProxyCollector.externalPingTime){return ProxyCollector.externalPingTime 952}else{return"" 953}} 954}function urlEncode(c){var d=encodeURIComponent(c).replace(/\~/g,"%7E").replace(/\!/g,"%21").replace(/\*/g,"%2A").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\'/g,"%27").replace(/\-/g,"%2D").replace(/\_/g,"%5F").replace(/\./g,"%2E"); 955return d 956}function encode_deviceprint(){var b=add_deviceprint(); 957return urlEncode(b) 958}function decode_deviceprint(){var b=encode_deviceprint; 959return decodeURIComponent(urlEncode(b)) 960}function post_deviceprint(){document.forms[0].pm_fp.value=encode_deviceprint(); 961return true 962}function post_fingerprints(b){b.deviceprint.value=encode_deviceprint() 963}function add_deviceprint(){BrowserDetect.init(); 964var d; 965switch(BrowserDetect.browser){case"Explorer":var e=detectIE(); 966d=new IE_FingerPrint(); 967if(e>10){d=new FingerPrint() 968}else{d=new IE_FingerPrint() 969}break; 970case"Firefox":d=new Mozilla_FingerPrint(); 971break; 972case"Opera":d=new Opera_FingerPrint(); 973break;
974case"Edge":var e=detectIE(); 975if(e>10){d=new FingerPrint() 976}else{d=new IE_FingerPrint() 977}break; 978default:d=new FingerPrint() 979}var f="version="+d.deviceprint_version()+"&pm_fpua="+d.deviceprint_browser()+"&pm_fpsc="+d.deviceprint_display()+"&pm_fpsw="+d.deviceprint_software()+"&pm_fptz="+d.deviceprint_timezone()+"&pm_fpln="+d.deviceprint_language()+"&pm_fpjv="+d.deviceprint_java()+"&pm_fpco="+d.deviceprint_cookie(); 980f=f+"&pm_fpasw="+d.deviceprint_all_software(); 981f=f+"&pm_fpan="+d.deviceprint_appName()+"&pm_fpacn="+d.deviceprint_appCodeName()+"&pm_fpol="+d.deviceprint_online()+"&pm_fposp="+d.deviceprint_opsProfile()+"&pm_fpup="+d.deviceprint_userProfile()+"&pm_fpsaw="+d.deviceprint_screen_availWidth()+"&pm_fpspd="+d.deviceprint_screen_pixelDepth()+"&pm_fpsbd="+d.deviceprint_screen_bufferDepth()+"&pm_fpsdx="+d.deviceprint_screen_deviceXDPI()+"&pm_fpsdy="+d.deviceprint_screen_deviceYDPI()+"&pm_fpslx="+d.deviceprint_screen_logicalXDPI()+"&pm_fpsly="+d.deviceprint_screen_logicalYDPI()+"&pm_fpsfse="+d.deviceprint_screen_fontSmoothingEnabled()+"&pm_fpsui="+d.deviceprint_screen_updateInterval(); 982f=f+"&pm_os="+BrowserDetect.OS+"&pm_brmjv="+parseInt(BrowserDetect.version,10)+"&pm_br="+BrowserDetect.browser; 983f=f+"&pm_inpt="+d.deviceprint_ping_in()+"&pm_expt="+d.deviceprint_ping_ex(); 984return f 985}function form_add_data(d,e,f){if(d&&d.length>0){d+="&" 986}else{d="" 987}d+=e+"="+escape(f.toString()); 988return d 989}function form_add_deviceprint(d,e,f){d=form_add_data(d,e+"d",f); 990return d 991}function detectIE(){var k=window.navigator.userAgent; 992var f=k.indexOf("MSIE "); 993if(f>0){return parseInt(k.substring(f+5,k.indexOf(".",f)),10) 994}var g=k.indexOf("Trident/"); 995if(g>0){var h=k.indexOf("rv:"); 996return parseInt(k.substring(h+3,k.indexOf(".",h)),10) 997}var j=k.indexOf("Edge/"); 998if(j>0){return parseInt(k.substring(j+5,k.indexOf(".",j)),10) 999}return false 1000}var HTML5="HTML5"; 1001var BLACKBERRY="blackberry"; 1002var UNDEFINED="undefined"; 1003var GEO_LOCATION_DEFAULT_STRUCT='{"GeoLocationInfo":[{"Status":4}]}'; 1004var geoLocator=null; 1005var geoLocatorStatus=false; 1006function detectDeviceCollectionAPIMode(){if(typeof(navigator.geolocation)!=UNDEFINED){return HTML5 1007}else{if(typeof(window.blackberry)!=UNDEFINED&&blackberry.location.GPSSupported){return BLACKBERRY 1008}else{return UNDEFINED 1009}}}function init(j,k,h,g,l){var m=detectDeviceCollectionAPIMode(); 1010if(m==HTML5){geoLocator=new HTML5LocationCollector(); 1011geoLocator.init(j,k,h,g); 1012return true 1013}else{if(m==BLACKBERRY){geoLocator=new BlackberryLocationCollector(); 1014geoLocator.init(l,k,h,g); 1015return true 1016}}return false 1017}function startCollection(h,j,g,f,k){geoLocatorStatus=init(h,j,g,f,k); 1018if(geoLocatorStatus){return geoLocator.startLocationWatch() 1019}else{return false 1020}}function stopCollection(){if(geoLocatorStatus){geoLocator.stopWatch() 1021}}function getGeolocationStruct(){if(geoLocatorStatus){return geoLocator.generateGeolocationJSONStruct() 1022}else{return GEO_LOCATION_DEFAULT_STRUCT 1023}}function HTML5LocationCollector(){var k=this; 1024var m=-1; 1025this.getGeolocationWatchId=function(){return m 1026}; 1027var l=null; 1028this.getGeolocationLastPosition=function(){return l 1029}; 1030var g=4; 1031this.getGeolocationStatusCode=function(){return g 1032}; 1033var j=""; 1034this.getGeolocationErrorMessage=function(){return j 1035}; 1036var h={accuracy:100,timeout:180,relevancy:120,expiration:48}; 1037this.getGeolocationConfig=function(){return h 1038}; 1039this.startLocationWatch=function(){var a={enableHighAccuracy:true,timeout:(h.timeout*1000),maximumAge:h.expiration}; 1040if(navigator.geolocation){m=navigator.geolocation.watchPosition(this.handlePosition,this.handleError,a); 1041return true 1042}else{g=4 1043}return false 1044}; 1045this.init=function(a,b,d,c){if(a!==null&&a>=0&&a<=200){h.accuracy=a 1046}if(b!==null&&b>=90&&b<=300){h.timeout=b 1047}if(d!==null&&d>=60&&d<=240){h.relevancy=d 1048}if(c!==null&&c>=24&&c<=60){h.expiration=c 1049}}; 1050this.handlePosition=function(d){var c=new Date().getTime(); 1051var b=getTimestampInMillis(d.timestamp); 1052if((c-b)<=(h.expiration*60*60*1000)){if(l===null||d.timestamp>l.timestamp||d.coords.accuracy<l.coords.accuracy){l=d; 1053g=0 1054}}if(l!==null){var a=c-l.timestamp; 1055if(a<=(h.relevancy*1000)&&l.coords.accuracy<=h.accuracy){k.stopWatch() 1056}}}; 1057this.generateGeolocationJSONStruct=function(){var b=null; 1058if(l!==null){var a=convertTimestampToGMT(l.timestamp); 1059b={GeoLocationInfo:[{Status:g,Longitude:l.coords.longitude,Latitude:l.coords.latitude,Altitude:Math.round(l.coords.altitude),HorizontalAccuracy:Math.round(l.coords.accuracy),AltitudeAccuracy:Math.round(l.coords.altitudeAccuracy),Heading:Math.round(l.coords.heading),Speed:Math.round(l.coords.speed),Timestamp:a}]} 1060}else{b={GeoLocationInfo:[{Status:g}]} 1061}return JSON.stringify(b) 1062}; 1063this.handleError=function(a){switch(a.code){case a.TIMEOUT:k.stopWatch(); 1064g=3; 1065break; 1066case a.POSITION_UNAVAILABLE:g=2; 1067j=a.message; 1068break; 1069case a.PERMISSION_DENIED:g=1; 1070break; 1071case a.UNKNOWN_ERROR:g=2; 1072j=a.message; 1073break 1074}}; 1075this.stopWatch=function(){navigator.geolocation.clearWatch(m); 1076m=-2 1077} 1078}var TimestampCollector=(function(){var z; 1079var u; 1080var r; 1081var s; 1082var w=1; 1083var v=""; 1084window.onfocus=function(){u=true 1085};
1086window.onblur=function(){u=false 1087}; 1088var n=function(){while(true){if(new Date().getUTCMilliseconds()==0){return 1089}}}; 1090var q=function(){var c=z; 1091n(); 1092var b=new Date(); 1093if(b.getSeconds()%c==0){var a=y(b,u,r()); 1094A(a); 1095return 1096}}; 1097var x=function(a,b,c){v=encode_deviceprint(); 1098z=c; 1099u; 1100r=a; 1101s=b; 1102if(z!=1&&z!=2&&z!=5&&z!=10){z=5 1103}setInterval(q,995) 1104}; 1105var A=function(b){if(b&&b.userLoginName){if(window.XMLHttpRequest&&window.JSON){var a=new XMLHttpRequest(); 1106a.open("POST",s); 1107if(w!=0){w=2 1108}a.setRequestHeader("Content-Type","application/json"); 1109a.send(JSON.stringify(b)); 1110a.onloadend=function(){if(a.status==204){w=0 1111}else{if(w!=0){w=3 1112}}if(typeof debugCollection!="undefined"&&debugCollection){console.log(JSON.stringify(b)); 1113console.log("browserEvent returned with status code:"+w) 1114}} 1115}}else{if(typeof debugCollection!="undefined"&&debugCollection){console.log("User did not provide any user login name, reporting aborted.") 1116}}}; 1117var y=function(a,c,b){var d={}; 1118d.deviceId=v; 1119d.jsTime=a; 1120d.userLoginName=b; 1121d.url=window.location.href; 1122d.activeWindow=c; 1123return d 1124}; 1125var o=function(){return w 1126}; 1127return{startEventReporting:x,actualRestSending:A,getStatus:o} 1128})(); 1129var UIEventCollector=(function(){var K=null; 1130var N=null; 1131var Y=null; 1132var M=null; 1133var F=["output_size_limit"]; 1134O(); 1135R(); 1136function O(b){M={output_size_limit:1024,collection_mode:"partial"}; 1137if(b){for(p in b){if(!(p._config===undefined)){var a=false; 1138for(var c=F.length-1; 1139c>=0; 1140c--){if(F[c]==p){found=true; 1141continue 1142}}if(!a){M[p]=b[p] 1143}}}}Y=false; 1144N=X(); 1145K={elements:new UIElementList(),events:[],collection_status:0,toString:function(){return"RecordedData: {elements: "+this.elements+", events: "+this.events+"}" 1146}}; 1147R() 1148}function J(){var c=V(); 1149for(var a=0,b=c.length; 1150a<b; 1151a++){T(c[a]) 1152}}function V(){var a=[]; 1153var e=document.getElementsByTagName("input"); 1154for(var b=0,c=e.length; 1155b<c; 1156b++){var d=e[b]; 1157if(G(d)){a.push(d) 1158}}return a 1159}function G(b){if(b.tagName&&b.tagName.toLowerCase()=="input"){var a=b.getAttribute("type"); 1160if(a=="text"||a=="checkbox"||a=="checkbox"){return true 1161}}return false 1162}function X(){var a=(document.createEvent)?document.createEvent("Event"):document.createEventObject(); 1163var b=a.timeStamp||new Date(); 1164b=new Date(b); 1165if(b.getYear()>2100){b=new Date(b/1000) 1166}b=b.getTime(); 1167return b 1168}function T(a){var b=null; 1169var c=K.elements; 1170var d=c.size(); 1171var e=Z(a); 1172if(!K.elements.containsKey(e)){b=new InteractionElement(); 1173b.id(e); 1174b.type(D(a)); 1175b.length(a.value?a.value.length:0); 1176c.put(b) 1177}else{b=c.get(e) 1178}return b 1179}function P(d){var f=d||window.event; 1180var a=W(f); 1181if(G(a)){var b=T(a); 1182b.incrementEventCount(); 1183var c=new UIEvent(); 1184c.index(b.index()); 1185c.type(aa(f)); 1186var e=I(f); 1187c.offset(e-N); 1188K.events.push(c) 1189}return true 1190}function E(a){var b=a||window.event; 1191if(H(b)){var c={target:W(b),type:"paste"}; 1192return P(c) 1193}else{return P(b) 1194}}function H(b){if(b.type=="keydown"){var a=b.which||b.charCode||b.keyCode; 1195var c=(typeof KeyboardEvent!="undefined"&&a==KeyboardEvent.DOM_VK_V)||a==118||a==86; 1196if(c&&(b.ctrlKey||b.metaKey)){return true 1197}}return false 1198}function W(a){return a.target?a.target:a.srcElement 1199}function I(b){var a; 1200if(b.timeStamp&&b.timeStamp!==0){a=b.timeStamp; 1201if(new Date(a).getYear()>2100){a=a/1000 1202}}else{a=new Date().getTime() 1203}return a 1204}function L(a){}function Q(){J(); 1205var b=K.elements; 1206for(var e=b.size(); 1207e>=1; 1208e--){var c=b.getByIndex(e); 1209var d=c.id(); 1210var a=document.getElementById(d); 1211if(!a){var f=document.getElementsByName(d); 1212if(f.length>0){a=f[0] 1213}}if(a&&a.value){c.length(a.value.length) 1214}}}function S(d){var f=d||window.event; 1215var a=d.target; 1216if(a.nodeType==1){var c=a.getElementsByTagName("form"); 1217for(var e=c.length-1; 1218e>=0; 1219e--){var b=c[e]; 1220b.onsubmit=recordFormSubmitEvent 1221}}}function R(){var a=P; 1222var b=document; 1223if(b.addEventListener){b.addEventListener("keydown",E,false); 1224b.addEventListener("paste",a,false); 1225b.addEventListener("focus",a,true); 1226b.addEventListener("blur",a,true) 1227}else{if(b.attachEvent){b.onkeydown=E; 1228b.onfocusin=a; 1229b.onfocusout=a 1230}}}function U(){return private_config 1231}function aa(a){if(a.type=="keydown"){return UIEvent.KeyDown 1232}else{if(a.type=="submit"){return UIEvent.Submit 1233}else{if(a.type=="paste"){return UIEvent.Paste 1234}else{if(a.type=="focus"||a.type=="focusin"){return UIEvent.Focus 1235}else{if(a.type=="blur"||a.type=="focusout"){return UIEvent.Blur 1236}else{return UIEvent.Unknown 1237}}}}}}function C(a){if(a==UIEvent.KeyDown){return"keydown" 1238}else{if(a==UIEvent.Submit){return"submit" 1239}else{if(a==UIEvent.Focus){return"focus" 1240}else{if(a==UIEvent.Blur){return"blur" 1241}else{if(a==UIEvent.Paste){return"paste" 1242}else{return"unknown" 1243}}}}}}function D(a){return a.nodeName+(a.type?(":"+a.type):"") 1244}function Z(a){return a.id?a.id:(a.name?a.name:a.nodeName) 1245}return{addElement:function(a){return T(a) 1246},getEventType:function(a){return aa(a) 1247}
1247,getEventCode:function(a){return C(a) 1248},getRecordedData:function(){return K 1249},getElementType:function(a){return D(a) 1250},getElementId:function(a){return Z(a) 1251},initEventCollection:function(a){O(a) 1252},getConfig:function(){return M 1253},serialize:function(){Q(); 1254var b=this.getRecordedData(); 1255var l=b.elements; 1256var q=TimestampCollector.getStatus(); 1257var B=[]; 1258for(var d=0; 1259d<l.length; 1260d++){B[d]=false 1261}var A=b.events; 1262var o=b.collection_status; 1263var ad=this.getConfig().collection_mode=="partial"; 1264var e=this.getConfig().output_size_limit; 1265var v=A.length; 1266var n="@"; 1267var ae=";"; 1268var af=","; 1269var f=2*n.length; 1270var c=(""+N)+af+(""+o)+af+(""+q); 1271var r=1; 1272f+=r; 1273f+=af.length; 1274f+=c.length; 1275var u=""; 1276L("serializing elements "); 1277for(var m=l.size(); 1278m>0; 1279m--){var a=l.getByIndex(m); 1280var h=a.serialize()+ae; 1281L("elementsStr.length: "+u.length); 1282if(ad&&((f+u.length+h.length)>e)){Y=true; 1283break 1284}var s=a.type().match("INPUT:checkbox"); 1285if(s==null){if(a.length()>0&&a.eventCount()==0){L("collecting element without input: "+a); 1286u=h+u 1287}}}f+=u.length; 1288var y=""; 1289L("serializing events "); 1290while(v--){var j=A[v]; 1291var k=j.index(); 1292var w=j.serialize()+ae; 1293var h=l.getByIndex(k).serialize()+ae; 1294var z=w.length; 1295if(!B[k]){z+=h.length 1296}L("eventsStr.length: "+y.length); 1297if(ad&&((f+y.length+z)>e)){Y=true; 1298break 1299}L("collecting event: "+j); 1300if(!B[k]){u=h+u; 1301f+=h.length; 1302L("also adding element event: "+h) 1303}B[k]=true; 1304y=w+y 1305}if(u.length>0){u=u.substring(0,u.length-1) 1306}if(y.length>0){y=y.substring(0,y.length-1) 1307}var g=Y?1:0; 1308var x=u+n+y+n+g+af+c; 1309return x 1310}} 1311})(); 1312function UIEvent(){var b=(this===window)?{}:this; 1313b.index=function(a){if(arguments.length===0){return b._index 1314}else{b._index=arguments[0] 1315}}; 1316b.offset=function(a){if(arguments.length===0){return b._offset 1317}else{b._offset=arguments[0] 1318}}; 1319b.type=function(a){if(arguments.length===0){return b._type 1320}else{b._type=arguments[0] 1321}}; 1322b.serialize=function(){var a=","; 1323var d="0"; 1324return b.index()+a+b.type()+a+d 1325}; 1326b.toString=function(){return"UIEvent: [index: "+b.index()+", type: "+b.type()+", offset: "+b.offset()+"]" 1327} 1328}UIEvent.Unknown=0; 1329UIEvent.KeyDown=1; 1330UIEvent.Submit=2; 1331UIEvent.Focus=3; 1332UIEvent.Blur=4; 1333UIEvent.Paste=5; 1334function InteractionElement(){var b=(this===window)?{}:this; 1335b._eventCount=0; 1336b.id=function(a){if(arguments.length===0){return b._id 1337}else{b._id=arguments[0] 1338}}; 1339b.index=function(a){if(arguments.length===0){return b._index 1340}else{b._index=arguments[0] 1341}}; 1342b.length=function(a){if(arguments.length===0){return b._length 1343}else{b._length=arguments[0] 1344}}; 1345b.type=function(a){if(arguments.length===0){return b._type 1346}else{b._type=arguments[0] 1347}}; 1348b.incrementEventCount=function(){b._eventCount++ 1349}; 1350b.eventCount=function(){return b._eventCount 1351}; 1352b.serialize=function(){var a=","; 1353var d=b.index(); 1354return b.index()+a+d+a+b.type()+a+b.length() 1355}; 1356b.toString=function(){return"InteractionElement: [id: "+b.id()+", index: "+b.index()+", length: "+b.length()+", type: "+b.type()+"]" 1357} 1358}function UIElementList(){var e=(this===window)?{}:this; 1359var d=new Hashtable(); 1360var f=new Hashtable(); 1361e.get=function(a){return d.get(a) 1362}; 1363e.getByIndex=function(a){return f.get(a) 1364}; 1365e.containsKey=function(a){return d.containsKey(a) 1366}; 1367e.indexByKey=function(a){return get(a).index() 1368}; 1369e.size=function(){return d.size() 1370}; 1371e.put=function(a){var b=a.id(); 1372if(!d.containsKey(b)){d.put(b,a); 1373var c=d.size(); 1374a.index(c); 1375f.put(c,a) 1376}}; 1377e.toString=function(){return"[size: "+d.size()+", names: ["+d+"], indexes: ["+f+"]]" 1378} 1379}function activeXDetect(e){var f=null; 1380try{f=document.body.getComponentVersion("{"+e+"}","ComponentID") 1381}catch(d){}return(f!==null)?f:false 1382}function stripIllegalChars(h){t=""; 1383h=h.toLowerCase(); 1384var g=h.length; 1385for(var f=0; 1386f<g; 1387f++){var e=h.charAt(f); 1388if(e!="\n"&&e!="/"&&e!="\\"){t+=e 1389}else{if(e=="\n"){t+="n" 1390}}}return t 1391}function stripFullPath(k,n,m){var q=n; 1392var o=m; 1393var l=k; 1394var j=l.lastIndexOf(q); 1395if(j>=0){filenameLen=l.length; 1396l=l.substring(j+q.length,filenameLen) 1397}var r=l.indexOf(o); 1398if(r>=0){l=l.slice(0,r) 1399}return l 1400}var BrowserDetect={init:function(){this.browser=this.searchString(this.dataBrowser)||"an unknown browser"; 1401this.version=this.searchVersion(navigator.userAgent)||this.searchVersion(navigator.appVersion)||"an unknown version"; 1402this.OS=this.searchString(this.dataOS)||"an unknown OS" 1403},searchString:function(l){var k=l.length; 1404for(var o=0; 1405o<k; 1406o++){var h=l[o]; 1407var n=h.string; 1408var m=h.prop; 1409var j=h.identity; 1410this.versionSearchString=h.versionSearch||j; 1411if(n){if(n.toLowerCase().indexOf(h.subString.toLowerCase())!==-1){return j 1412}}else{if(m){return j 1413}}}},searchVersion:function(d){var e=d.toLowerCase().indexOf(this.versionSearchString.toLowerCase()); 1414if(e===-1){return 1415}var f=d.substring(e+this.versionSearchString.length); 1416if(f.indexOf(" ")===0||f.indexOf("/")===0||f.indexOf(":")===0){f=f.substring(1) 1417}return parseFloat(f) 1418},dataBrowser:[{string:navigator.userAgent,subString:"edge",identity:"Edge"},{string:navigator.userAgent.toLowerCase(),subString:"opera",identity:"Opera",versionSearch:"version"},{string:navigator.userAgent,subString:"OPR",versionSearch:"OPR/",identity:"Opera"},{string:navigator.userAgent,subString:"Chrome",identity:"Chrome"},{string:navigator.userAgent,subString:"CriOS",versionSearch:"CriOS/",identity:"Chrome"},{string:navigator.userAgent,subString:"OmniWeb",versionSearch:"OmniWeb/",identity:"OmniWeb"},{string:navigator.vendor,subString:"Apple",identity:"Safari",versionSearch:"Version"},{string:navigator.userAgent,subString:"mobile safari",identity:"Mobile Safari",versionSearch:"mobile safari"},{string:navigator.vendor,subString:"iCab",identity:"iCab"},{string:navigator.vendor,subString:"KDE",identity:"Konqueror"},{string:navigator.userAgent,subString:"Firefox",identity:"Firefox"},{string:navigator.vendor,subString:"Camino",identity:"Camino"},{string:navigator.userAgent.toLocaleLowerCase(),subString:"blackberry",identity:"BlackBerry",versionSearch:"0/"},{string:navigator.userAgent,subString:"Netscape",identity:"Netscape"},{string:navigator.userAgent,subString:"MSIE",identity:"Explorer",versionSearch:"MSIE"},{string:navigator.userAgent,subString:"Trident",identity:"Explorer",versionSearch:"rv"},{string:navigator.userAgent,subString:"Gecko",identity:"Mozilla",versionSearch:"rv"},{string:navigator.userAgent,subString:"Mozilla",identity:"Netscape",versionSearch:"Mozilla"}],dataOS:[{string:navigator.userAgent,subString:"BlackBerry",identity:"BlackBerry"},{string:navigator.userAgent.toLowerCase(),subString:"android",identity:"Android"},{string:navigator.userAgent,subString:"Symbian",identity:"Symbian"},{string:navigator.platform,subString:"Mac",identity:"Mac"},{string:navigator.userAgent,subString:"iPhone",identity:"iPhone/iPod"},{string:navigator.platform,subString:"Linux",identity:"Linux"},{string:navigator.userAgent,subString:"Windows CE",identity:"Windows CE"},{string:navigator.platform,subString:"Win",identity:"Windows"}]}; 1419function convertTimestampToGMT(c){var d=c; 1420if(!(c instanceof Date)){d=new Date(c) 1421}offsetFromGmt=d.getTimezoneOffset()*60000; 1422return d.getTime()+offsetFromGmt 1423}function getTimestampInMillis(c){var d=c; 1424if(c instanceof Date){d=c.getTime() 1425}return d 1426}function debug(b){}; 1427//!© 2016 Fiserv, Inc. or its affiliates. All rights reserved. This work, including its contents and programming, is confidential and its use is strictly limited. This work is furnished only for use by duly authorized licensees of Fiserv, Inc. or its affiliates, and their designated agents or employees responsible for installation or operation of the products. Any other use, duplication, or dissemination without the prior written consent of Fiserv, Inc. or its affiliates is strictly prohibited. Except as specified by the agreement under which the materials are furnished, Fiserv, Inc. and its affiliates do not accept any liabilities with respect to the information contained herein and is not responsible for any direct, indirect, special, consequential or exemplary damages resulting from the use of this information. No warranties, either express or implied, are granted or extended by this work or the delivery of this work. 1428var EBC; 1429(function (EBC) { 1430 var DevicePrint; 1431 (function (DevicePrint) { 1432 "use strict"; 1433 var DevicePrintService = /** @class */ (function () { 1434 function DevicePrintService() { 1435 this.getDevicePrintValue = function () { 1436 return encode_deviceprint(); 1437 }; 1438 } 1439 return DevicePrintService; 1440 }()); 1441 DevicePrint.DevicePrintService = DevicePrintService; 1442 if (typeof angular === "object") { 1443 angular.module("EBC.DevicePrint", []).service("DevicePrintService", EBC.DevicePrint.DevicePrintService); 1444 } 1445 })(DevicePrint = EBC.DevicePrint || (EBC.DevicePrint = {})); 1446})(EBC || (EBC = {})); 1447 1448"use strict"; 1449 1450var EBC = EBC || {}; 1451 1452EBC.RemoteLogin = function(args) { 1453 var _this = this; 1454 1455 if(!args.applicationPath) { return; } 1456 if(!args.formId) { return; } 1457 if(!args.passwordId) { return; } 1458 if(!args.routingTransit) { return; } 1459 if(!args.usernameId) { return; } 1460 1461 _this._applicationPath = args.applicationPath; 1462 if(args.applicationPath.substr(args.applicationPath.length - 1) != "/") { 1463 _this._applicationPath += "/"; 1464 } 1465 1466 _this._passwordElement = document.getElementById(args.passwordId); 1467 _this._formElement = document.getElementById(args.formId); 1468 _this._errorCallback = args.errorCallback; 1469 _this._routingTransit = args.routingTransit; 1470 _this._submitCallback = args.submitCallback; 1471 _this._profileNumber = args.profileNumber || null; 1472 _this._usernameElement = document.getElementById(args.usernameId); 1473 _this._devicePrintService = new EBC.DevicePrint.DevicePrintService; 1474 1475 _this._formElement.onsubmit = initialize; 1476 1477 function getEncryptedPassword(modulus, publicExponent, sessionId) { 1478 var cleanPassword = _this._passwordElement.value, 1479 encryptedPassword = null, 1480 rsaKey = new RSAKey(); 1481 1482 rsaKey.setPublic(modulus, publicExponent);
1483 encryptedPassword = rsaKey.encrypt(sessionId + cleanPassword); 1484 1485 return encryptedPassword; 1486 } 1487 1488 function ajax(args, success, error) { 1489 if(!args.url) { 1490 return; 1491 } 1492 1493 var request = new XMLHttpRequest(); 1494 request.onreadystatechange = function() { 1495 if(request.readyState == XMLHttpRequest.DONE) { 1496 if(request.status == 200) { 1497 if(success && typeof (success) == "function") { 1498 try { 1499 success(JSON.parse(request.responseText)); 1500 } catch(ex) { 1501 error(); 1502 } 1503 } 1504 } else { 1505 if(error && typeof (error) == "function") { 1506 error(); 1507 } 1508 } 1509 } 1510 } 1511 1512 var async = args.async || true, 1513 method = args.method || "GET", 1514 url = _this._applicationPath + args.url; 1515 1516 request.open(method, url, async); 1517 request.withCredentials = true; 1518 request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 1519 1520 if(!args.data) { 1521 request.send(); 1522 } else { 1523 var data = ""; 1524 data = Object.keys(args.data).map(function (k) { 1525 return encodeURIComponent(k) + '=' + encodeURIComponent(args.data[k]) 1526 }).join('&'); 1527 1528 request.send(data); 1529 } 1530 } 1531 1532 function initialize(event) { 1533 if(typeof (_this._submitCallback) == "function") { 1534 _this._submitCallback(); 1535 } 1536 1537 var args = { 1538 method: "GET", 1539 url: "Login/RemoteInitialize/" + _this._routingTransit + (_this._profileNumber ? ("/" + _this._profileNumber) : "") 1540 }; 1541 1542 ajax(args, submit, error); 1543 1544 return false; 1545 } 1546 1547 function submit(initializeResponse) { 1548 if(!initializeResponse.success) { 1549 error(); 1550 } 1551 1552 var fingerprint = null; 1553 1554 if (typeof (_this._devicePrintService.getDevicePrintValue) == "function") { 1555 fingerprint = _this._devicePrintService.getDevicePrintValue(); 1556 } 1557 1558 var username = _this._usernameElement.value; 1559 var password = _this._passwordElement.value; 1560 1561 var data = { 1562 username: username, 1563 password: password, 1564 devicePrintFingerprint: fingerprint, 1565 shouldRememberUser: false, 1566 __RequestVerificationToken: initializeResponse.antiForgeryToken 1567 }; 1568 1569 var args = { 1570 method: "POST", 1571 url: "Login/SubmitRemote", 1572 data: data 1573 }; 1574 1575 ajax(args, processSubmit, error); 1576 } 1577 1578 function processSubmit(response) { 1579 if(response.redirectURL) { 1580 window.location.href = response.redirectURL; 1581 } else { 1582 error(); 1583 } 1584 } 1585 1586 function error() { 1587 if(typeof (_this._errorCallback) == "function") { 1588 _this._errorCallback(); 1589 } else { 1590 window.location.href = _this._applicationPath + "Login/" + _this._routingTransit + (_this._profileNumber ? ("/" + _this._profileNumber) : ""); 1591 } 1592 } 1593};
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.