AdsBypasserLite

Bypass Ads

目前为 2015-07-04 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name AdsBypasserLite
  3. // @namespace AdsBypasser
  4. // @description Bypass Ads
  5. // @copyright 2012+, Wei-Cheng Pan (legnaleurc)
  6. // @version 5.28.0
  7. // @license BSD
  8. // @homepageURL https://adsbypasser.github.io/
  9. // @supportURL https://github.com/adsbypasser/adsbypasser/issues
  10. // @icon https://raw.githubusercontent.com/adsbypasser/adsbypasser/v5.28.0/img/logo.png
  11. // @grant unsafeWindow
  12. // @grant GM_xmlhttpRequest
  13.  
  14. // @grant GM_getValue
  15. // @grant GM_openInTab
  16. // @grant GM_registerMenuCommand
  17. // @grant GM_setValue
  18. // @run-at document-start
  19.  
  20. // @include http://*
  21. // @include https://*
  22. // ==/UserScript==
  23.  
  24. (function (context, factory) {
  25. if (typeof module === 'object' && typeof module.exports === 'object') {
  26. var bluebird = require('bluebird');
  27. module.exports = factory(context, bluebird.Promise);
  28. } else {
  29. var P = null;
  30. if (context.unsafeWindow.Future) {
  31. P = function (fn) {
  32. return context.unsafeWindow.Future.call(this, function (fr) {
  33. fn(fr.resolve.bind(fr), fr.reject.bind(fr));
  34. });
  35. };
  36. } else if (context.PromiseResolver) {
  37. P = function (fn) {
  38. return new context.Promise(function (pr) {
  39. fn(pr.resolve.bind(pr), pr.reject.bind(pr));
  40. });
  41. };
  42. } else {
  43. P = context.Promise;
  44. }
  45. factory(context, P);
  46. }
  47. }(this, function (context, Promise) {
  48. 'use strict';
  49. var _ = context._ = {};
  50. function setupStack () {
  51. if (Error.captureStackTrace) {
  52. Error.captureStackTrace(this, this.constructor);
  53. } else if (!this.hasOwnProperty('stack')) {
  54. var stack = (new Error()).stack.split('\n').slice(2);
  55. var e = stack[0].match(/^.*@(.*):(\d*)$/);
  56. this.fileName = e[1];
  57. this.lineNumber = parseInt(e[2], 10);
  58. this.stack = stack.join('\n');
  59. }
  60. }
  61. function AdsBypasserError (message) {
  62. setupStack.call(this);
  63. this.message = message;
  64. }
  65. AdsBypasserError.prototype = Object.create(Error.prototype);
  66. AdsBypasserError.prototype.constructor = AdsBypasserError;
  67. AdsBypasserError.prototype.name = 'AdsBypasserError';
  68. AdsBypasserError.extend = function (protoProps, staticProps) {
  69. var parent = this, child = function () {
  70. setupStack.call(this);
  71. protoProps.constructor.apply(this, arguments);
  72. };
  73. extend(child, parent, staticProps);
  74. child.prototype = Object.create(parent.prototype);
  75. extend(child.prototype, protoProps);
  76. child.prototype.constructor = child;
  77. child.super = parent.prototype;
  78. return child;
  79. };
  80. AdsBypasserError.super = null;
  81. _.AdsBypasserError = AdsBypasserError;
  82. function any (c, fn) {
  83. if (c.some) {
  84. return c.some(fn);
  85. }
  86. if (typeof c.length === 'number') {
  87. return Array.prototype.some.call(c, fn);
  88. }
  89. return Object.keys(c).some(function (k) {
  90. return fn(c[k], k, c);
  91. });
  92. }
  93. function all (c, fn) {
  94. if (c.every) {
  95. return c.every(fn);
  96. }
  97. if (typeof c.length === 'number') {
  98. return Array.prototype.every.call(c, fn);
  99. }
  100. return Object.keys(c).every(function (k) {
  101. return fn(c[k], k, c);
  102. });
  103. }
  104. function each (c, fn) {
  105. if (c.forEach) {
  106. c.forEach(fn);
  107. } else if (typeof c.length === 'number') {
  108. Array.prototype.forEach.call(c, fn);
  109. } else {
  110. Object.keys(c).forEach(function (k) {
  111. fn(c[k], k, c);
  112. });
  113. }
  114. }
  115. function map (c, fn) {
  116. if (c.map) {
  117. return c.map(fn);
  118. }
  119. if (typeof c.length === 'number') {
  120. return Array.prototype.map.call(c, fn);
  121. }
  122. return Object.keys(c).map(function (k) {
  123. return fn(c[k], k, c);
  124. });
  125. }
  126. function extend(c) {
  127. Array.prototype.slice.call(arguments, 1).forEach(function (source) {
  128. if (!source) {
  129. return;
  130. }
  131. _.C(source).each(function (v, k) {
  132. c[k] = v;
  133. });
  134. });
  135. return c;
  136. }
  137. function CollectionProxy (collection) {
  138. this._c = collection;
  139. }
  140. CollectionProxy.prototype.size = function () {
  141. if (typeof this._c.length === 'number') {
  142. return this._c.length;
  143. }
  144. return Object.keys(c).length;
  145. };
  146. CollectionProxy.prototype.at = function (k) {
  147. return this._c[k];
  148. };
  149. CollectionProxy.prototype.each = function (fn) {
  150. each(this._c, fn);
  151. return this;
  152. };
  153. CollectionProxy.prototype.find = function (fn) {
  154. var result;
  155. any(this._c, function (value, index, self) {
  156. var tmp = fn(value, index, self);
  157. if (tmp !== _.none) {
  158. result = {
  159. key: index,
  160. value: value,
  161. payload: tmp,
  162. };
  163. return true;
  164. }
  165. return false;
  166. });
  167. return result;
  168. };
  169. CollectionProxy.prototype.all = function (fn) {
  170. return all(this._c, fn);
  171. };
  172. CollectionProxy.prototype.map = function (fn) {
  173. return map(this._c, fn);
  174. };
  175. _.C = function (collection) {
  176. return new CollectionProxy(collection);
  177. };
  178. _.T = function (s) {
  179. if (typeof s === 'string') {
  180. } else if (s instanceof String) {
  181. s = s.toString();
  182. } else {
  183. throw new AdsBypasserError('template must be a string');
  184. }
  185. var T = {
  186. '{{': '{',
  187. '}}': '}',
  188. };
  189. return function () {
  190. var args = Array.prototype.slice.call(arguments);
  191. var kwargs = args[args.length-1];
  192. return s.replace(/\{\{|\}\}|\{([^\}]+)\}/g, function (m, key) {
  193. if (T.hasOwnProperty(m)) {
  194. return T[m];
  195. }
  196. if (args.hasOwnProperty(key)) {
  197. return args[key];
  198. }
  199. if (kwargs.hasOwnProperty(key)) {
  200. return kwargs[key];
  201. }
  202. return m;
  203. });
  204. };
  205. };
  206. _.P = function (fn) {
  207. if (typeof fn !== 'function') {
  208. throw new _.AdsBypasserError('must give a function');
  209. }
  210. var slice = Array.prototype.slice;
  211. var args = slice.call(arguments, 1);
  212. return function () {
  213. return fn.apply(this, args.concat(slice.call(arguments)));
  214. };
  215. };
  216. _.D = function (fn) {
  217. return new Promise(fn);
  218. };
  219. _.parseJSON = function (json) {
  220. try {
  221. return JSON.parse(json);
  222. } catch (e) {
  223. _.warn(e);
  224. }
  225. return _.none;
  226. };
  227. _.isString = function (value) {
  228. return (typeof value === 'string') || (value instanceof String);
  229. };
  230. _.nop = function () {
  231. };
  232. _.none = _.nop;
  233. function log (method, args) {
  234. if (_._quiet) {
  235. return;
  236. }
  237. args = Array.prototype.slice.call(args);
  238. if (_.isString(args[0])) {
  239. args[0] = 'AdsBypasser: ' + args[0];
  240. } else {
  241. args.unshift('AdsBypasser:');
  242. }
  243. var f = console[method];
  244. if (typeof f === 'function') {
  245. f.apply(console, args);
  246. }
  247. }
  248. _._quiet = false;
  249. _.info = function () {
  250. log('info', arguments);
  251. };
  252. _.warn = function () {
  253. log('warn', arguments);
  254. };
  255. return _;
  256. }));
  257.  
  258. (function (context, factory) {
  259. if (typeof module === 'object' && typeof module.exports === 'object') {
  260. module.exports = function (context) {
  261. var core = require('./core.js');
  262. return factory(context, core);
  263. };
  264. } else {
  265. context.$ = factory(context, context._);
  266. }
  267. }(this, function (context, _) {
  268. 'use strict';
  269. var window = context.window;
  270. var document = window.document;
  271. var DomNotFoundError = _.AdsBypasserError.extend({
  272. name: 'DomNotFoundError',
  273. constructor: function (selector) {
  274. DomNotFoundError.super.constructor.call(this, _.T('`{0}` not found')(selector));
  275. },
  276. });
  277. var $ = function (selector, context) {
  278. if (!context || !context.querySelector) {
  279. context = document;
  280. }
  281. var n = context.querySelector(selector);
  282. if (!n) {
  283. throw new DomNotFoundError(selector);
  284. }
  285. return n;
  286. };
  287. $.$ = function (selector, context) {
  288. try {
  289. return $(selector, context);
  290. } catch (e) {
  291. return null;
  292. }
  293. };
  294. $.$$ = function (selector, context) {
  295. if (!context || !context.querySelectorAll) {
  296. context = document;
  297. }
  298. var ns = context.querySelectorAll(selector);
  299. return _.C(ns);
  300. };
  301. $.toDOM = function(rawHTML) {
  302. try {
  303. var parser = new DOMParser();
  304. var DOMHTML = parser.parseFromString(rawHTML, "text/html");
  305. return DOMHTML;
  306. } catch (e) {
  307. throw new _.AdsBypasserError('could not parse HTML to DOM');
  308. }
  309. };
  310. $.removeNodes = function (selector, context) {
  311. $.$$(selector, context).each(function (e) {
  312. e.parentNode.removeChild(e);
  313. });
  314. };
  315. function searchScriptsByRegExp (pattern, context) {
  316. var m = $.$$('script', context).find(function (s) {
  317. var m = s.innerHTML.match(pattern);
  318. if (!m) {
  319. return _.none;
  320. }
  321. return m;
  322. });
  323. if (!m) {
  324. return null;
  325. }
  326. return m.payload;
  327. }
  328. function searchScriptsByString (pattern, context) {
  329. var m = $.$$('script', context).find(function (s) {
  330. var m = s.innerHTML.indexOf(pattern);
  331. if (m < 0) {
  332. return _.none;
  333. }
  334. return m;
  335. });
  336. if (!m) {
  337. return null;
  338. }
  339. return m.value.innerHTML;
  340. }
  341. $.searchScripts = function (pattern, context) {
  342. if (pattern instanceof RegExp) {
  343. return searchScriptsByRegExp(pattern, context);
  344. } else if (_.isString(pattern)) {
  345. return searchScriptsByString(pattern, context);
  346. } else {
  347. return null;
  348. }
  349. };
  350. return $;
  351. }));
  352.  
  353. (function (context, factory) {
  354. if (typeof module === 'object' && typeof module.exports === 'object') {
  355. module.exports = function (context, GM) {
  356. var core = require('./core.js');
  357. return factory(context, GM, core);
  358. };
  359. } else {
  360. factory(context, {
  361. xmlhttpRequest: GM_xmlhttpRequest,
  362. }, context._);
  363. }
  364. }(this, function (context, GM, _) {
  365. 'use strict';
  366. var window = context.window;
  367. var document = window.document;
  368. var $ = context.$ || {};
  369. function deepJoin (prefix, object) {
  370. return _.C(object).map(function (v, k) {
  371. var key = _.T('{0}[{1}]')(prefix, k);
  372. if (typeof v === 'object') {
  373. return deepJoin(key, v);
  374. }
  375. return _.T('{0}={1}').apply(this, [key, v].map(encodeURIComponent));
  376. }).join('&');
  377. }
  378. function toQuery (data) {
  379. var type = typeof data;
  380. if (data === null || (type !== 'string' && type !== 'object')) {
  381. return '';
  382. }
  383. if (type === 'string') {
  384. return data;
  385. }
  386. if (data instanceof String) {
  387. return data.toString();
  388. }
  389. return _.C(data).map(function (v, k) {
  390. if (typeof v === 'object') {
  391. return deepJoin(k, v);
  392. }
  393. return _.T('{0}={1}').apply(this, [k, v].map(encodeURIComponent));
  394. }).join('&');
  395. }
  396. function ajax (method, url, data, headers) {
  397. var l = document.createElement('a');
  398. l.href = url;
  399. var reqHost = l.hostname;
  400. var overrideHeaders = {
  401. Host: reqHost || window.location.host,
  402. Origin: window.location.origin,
  403. Referer: window.location.href,
  404. 'X-Requested-With': 'XMLHttpRequest',
  405. };
  406. _.C(overrideHeaders).each(function (v, k, c) {
  407. if (headers[k] === _.none) {
  408. delete headers[k];
  409. } else {
  410. headers[k] = v;
  411. }
  412. });
  413. var xhr = null;
  414. var promise = _.D(function (resolve, reject) {
  415. xhr = GM.xmlhttpRequest({
  416. method: method,
  417. url: url,
  418. data: data,
  419. headers: headers,
  420. onload: function (response) {
  421. response = (typeof response.responseText !== 'undefined') ? response : this;
  422. if (response.status !== 200) {
  423. reject(response.responseText);
  424. } else {
  425. resolve(response.responseText);
  426. }
  427. },
  428. onerror: function (response) {
  429. response = (typeof response.responseText !== 'undefined') ? response : this;
  430. reject(response.responseText);
  431. },
  432. });
  433. });
  434. promise.abort = function () {
  435. xhr.abort();
  436. };
  437. return promise;
  438. }
  439. $.get = function (url, data, headers) {
  440. data = toQuery(data);
  441. data = data ? '?' + data : '';
  442. headers = headers || {};
  443. return ajax('GET', url + data, '', headers);
  444. };
  445. $.post = function (url, data, headers) {
  446. data = toQuery(data);
  447. var h = {
  448. 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
  449. 'Content-Length': data.length,
  450. };
  451. if (headers) {
  452. _.C(headers).each(function (v, k) {
  453. h[k] = v;
  454. });
  455. }
  456. return ajax('POST', url, data, h);
  457. };
  458. return $;
  459. }));
  460.  
  461. (function (context, factory) {
  462. if (typeof module === 'object' && typeof module.exports === 'object') {
  463. module.exports = function (context) {
  464. var core = require('./core.js');
  465. return factory(context, core);
  466. };
  467. } else {
  468. factory(context, context._);
  469. }
  470. }(this, function (context, _) {
  471. 'use strict';
  472. var window = context.window;
  473. var document = window.document;
  474. var $ = context.$ || {};
  475. $.setCookie = function (key, value) {
  476. var now = new Date();
  477. now.setTime(now.getTime() + 3600 * 1000);
  478. var tpl = _.T('{0}={1};path=/;');
  479. document.cookie = tpl(key, value, now.toUTCString());
  480. };
  481. $.getCookie = function (key) {
  482. var c = _.C(document.cookie.split(';')).find(function (v) {
  483. var k = v.replace(/^\s*(\w+)=.+$/, '$1');
  484. if (k !== key) {
  485. return _.none;
  486. }
  487. });
  488. if (!c) {
  489. return null;
  490. }
  491. c = c.value.replace(/^\s*\w+=([^;]+).+$/, '$1');
  492. if (!c) {
  493. return null;
  494. }
  495. return c;
  496. };
  497. $.resetCookies = function () {
  498. var a = document.domain;
  499. var b = document.domain.replace(/^www\./, '');
  500. var c = document.domain.replace(/^(\w+\.)+?(\w+\.\w+)$/, '$2');
  501. var d = (new Date(1e3)).toUTCString();
  502. _.C(document.cookie.split(';')).each(function (v) {
  503. var k = v.replace(/^\s*(\w+)=.+$/, '$1');
  504. document.cookie = _.T('{0}=;expires={1};')(k, d);
  505. document.cookie = _.T('{0}=;path=/;expires={1};')(k, d);
  506. var e = _.T('{0}=;path=/;domain={1};expires={2};');
  507. document.cookie = e(k, a, d);
  508. document.cookie = e(k, b, d);
  509. document.cookie = e(k, c, d);
  510. });
  511. };
  512. return $;
  513. }));
  514.  
  515. (function (context, factory) {
  516. if (typeof module === 'object' && typeof module.exports === 'object') {
  517. module.exports = function (context) {
  518. var core = require('./core.js');
  519. return factory(context, core);
  520. };
  521. } else {
  522. factory(context, context._);
  523. }
  524. }(this, function (context, _) {
  525. 'use strict';
  526. var window = context.window;
  527. var document = window.document;
  528. var $ = context.$ || {};
  529. var patterns = [];
  530. $.register = function (pattern) {
  531. patterns.push(pattern);
  532. };
  533. function dispatchByObject (rule, url_6) {
  534. var matched = {};
  535. var passed = _.C(rule).all(function (pattern, part) {
  536. if (pattern instanceof RegExp) {
  537. matched[part] = url_6[part].match(pattern);
  538. } else if (pattern instanceof Array) {
  539. var r = _.C(pattern).find(function (p) {
  540. var m = url_6[part].match(p);
  541. return m || _.none;
  542. });
  543. matched[part] = r ? r.payload : null;
  544. }
  545. return !!matched[part];
  546. });
  547. return passed ? matched : null;
  548. }
  549. function dispatchByRegExp (rule, url_1) {
  550. return url_1.match(rule);
  551. }
  552. function dispatchByArray (byLocation, rules, url_1, url_3, url_6) {
  553. var tmp = _.C(rules).find(function (rule) {
  554. var m = dispatch(byLocation, rule, url_1, url_3, url_6);
  555. if (!m) {
  556. return _.none;
  557. }
  558. return m;
  559. });
  560. return tmp ? tmp.payload : null;
  561. }
  562. function dispatchByString (rule, url_3) {
  563. var scheme = /\*|https?|file|ftp|chrome-extension/;
  564. var host = /\*|(\*\.)?([^\/*]+)/;
  565. var path = /\/.*/;
  566. var up = new RegExp(_.T('^({scheme})://({host})?({path})$')({
  567. scheme: scheme.source,
  568. host: host.source,
  569. path: path.source,
  570. }));
  571. var matched = rule.match(up);
  572. if (!matched) {
  573. return null;
  574. }
  575. scheme = matched[1];
  576. host = matched[2];
  577. var wc = matched[3];
  578. var sd = matched[4];
  579. path = matched[5];
  580. if (scheme === '*' && !/https?/.test(url_3.scheme)) {
  581. return null;
  582. } else if (scheme !== url_3.scheme) {
  583. return null;
  584. }
  585. if (scheme !== 'file' && host !== '*') {
  586. if (wc) {
  587. up = url_3.host.indexOf(sd);
  588. if (up < 0 || up + sd.length !== url_3.host.length) {
  589. return null;
  590. }
  591. } else if (host !== url_3.host) {
  592. return null;
  593. }
  594. }
  595. path = new RegExp(_.T('^{0}$')(path.replace(/[*.\[\]?+#]/g, function (c) {
  596. if (c === '*') {
  597. return '.*';
  598. }
  599. return '\\' + c;
  600. })));
  601. if (!path.test(url_3.path)) {
  602. return null;
  603. }
  604. return url_3;
  605. }
  606. function dispatchByFunction (rule, url_1, url_3, url_6) {
  607. return rule(url_1, url_3, url_6);
  608. }
  609. function dispatch (byLocation, rule, url_1, url_3, url_6) {
  610. if (rule instanceof Array) {
  611. return dispatchByArray(byLocation, rule, url_1, url_3, url_6);
  612. }
  613. if (typeof rule === 'function') {
  614. if (byLocation) {
  615. return null;
  616. }
  617. return dispatchByFunction(rule, url_1, url_3, url_6);
  618. }
  619. if (rule instanceof RegExp) {
  620. return dispatchByRegExp(rule, url_1);
  621. }
  622. if (_.isString(rule)) {
  623. return dispatchByString(rule, url_3);
  624. }
  625. return dispatchByObject(rule, url_6);
  626. }
  627. $._findHandler = function (byLocation) {
  628. var url_1 = window.location.toString();
  629. var url_3 = {
  630. scheme: window.location.protocol.slice(0, -1),
  631. host: window.location.host,
  632. path: window.location.pathname + window.location.search + window.location.hash,
  633. };
  634. var url_6 = {
  635. scheme: window.location.protocol,
  636. host: window.location.hostname,
  637. port: window.location.port,
  638. path: window.location.pathname,
  639. query: window.location.search,
  640. hash: window.location.hash,
  641. };
  642. var pattern = _.C(patterns).find(function (pattern) {
  643. var m = dispatch(byLocation, pattern.rule, url_1, url_3, url_6);
  644. if (!m) {
  645. return _.none;
  646. }
  647. return m;
  648. });
  649. if (!pattern) {
  650. return null;
  651. }
  652. var matched = pattern.payload;
  653. pattern = pattern.value;
  654. if (!pattern.start && !pattern.ready) {
  655. return null;
  656. }
  657. return {
  658. start: pattern.start ? _.P(pattern.start, matched) : _.nop,
  659. ready: pattern.ready ? _.P(pattern.ready, matched) : _.nop,
  660. };
  661. };
  662. return $;
  663. }));
  664.  
  665. (function (context, factory) {
  666. if (typeof module === 'object' && typeof module.exports === 'object') {
  667. module.exports = function (context) {
  668. var core = require('./core.js');
  669. return factory(context, core);
  670. };
  671. } else {
  672. factory(context, context._);
  673. }
  674. }(this, function (context, _) {
  675. 'use strict';
  676. var window = context.window;
  677. var document = window.document;
  678. var $ = context.$ || {};
  679. function prepare (e) {
  680. if (!document.body) {
  681. document.body = document.createElement('body');
  682. }
  683. document.body.appendChild(e);
  684. }
  685. function get (url) {
  686. var a = document.createElement('a');
  687. a.href = url;
  688. prepare(a);
  689. a.click();
  690. }
  691. function post (path, params) {
  692. params = params || {};
  693. var form = document.createElement('form');
  694. form.method = 'post';
  695. form.action = path;
  696. _.C(params).each(function (value, key) {
  697. var input = document.createElement('input');
  698. input.type = 'hidden';
  699. input.name = key;
  700. input.value = value;
  701. form.appendChild(input);
  702. });
  703. prepare(form);
  704. form.submit();
  705. }
  706. $.openLink = function (to, options) {
  707. if (!_.isString(to) && !to) {
  708. _.warn('false URL');
  709. return;
  710. }
  711. options = options || {};
  712. var withReferer = typeof options.referer === 'undefined' ? true : options.referer;
  713. var postData = options.post;
  714. var from = window.location.toString();
  715. _.info(_.T('{0} -> {1}')(from, to));
  716. if (postData) {
  717. post(to, postData);
  718. return;
  719. }
  720. if (withReferer) {
  721. get(to);
  722. return;
  723. }
  724. window.top.location.replace(to);
  725. };
  726. return $;
  727. }));
  728.  
  729. (function (context, factory) {
  730. if (typeof module === 'object' && typeof module.exports === 'object') {
  731. module.exports = function (context) {
  732. var core = require('./core.js');
  733. var ajax = require('./ajax.js');
  734. var $ = ajax(context);
  735. return factory(context, core, $);
  736. };
  737. } else {
  738. factory(context, context._, context.$);
  739. }
  740. }(this, function (context, _, $) {
  741. 'use strict';
  742. var window = context.window;
  743. var unsafeWindow = context.unsafeWindow || (0, eval)('this').window;
  744. var document = window.document;
  745. $.removeAllTimer = function () {
  746. var handle = window.setInterval(_.nop, 10);
  747. while (handle > 0) {
  748. window.clearInterval(handle--);
  749. }
  750. handle = window.setTimeout(_.nop, 10);
  751. while (handle > 0) {
  752. window.clearTimeout(handle--);
  753. }
  754. };
  755. $.captcha = function (imgSrc, cb) {
  756. if (!$.config.externalServerSupport) {
  757. return;
  758. }
  759. var a = document.createElement('canvas');
  760. var b = a.getContext('2d');
  761. var c = new Image();
  762. c.src = imgSrc;
  763. c.onload = function () {
  764. a.width = c.width;
  765. a.height = c.height;
  766. b.drawImage(c, 0, 0);
  767. var d = a.toDataURL();
  768. var e = d.substr(d.indexOf(',') + 1);
  769. $.post('http://www.wcpan.info/cgi-bin/captcha.cgi', {
  770. i: e,
  771. }, cb);
  772. };
  773. };
  774. function clone (safe) {
  775. if (safe === null || !(safe instanceof Object)) {
  776. return safe;
  777. }
  778. if (safe instanceof String) {
  779. return safe.toString();
  780. }
  781. if (safe instanceof Function) {
  782. return exportFunction(safe, unsafeWindow, {
  783. allowCrossOriginArguments: true,
  784. });
  785. }
  786. if (safe instanceof Array) {
  787. var unsafe = new unsafeWindow.Array();
  788. for (var i = 0; i < safe.length; ++i) {
  789. unsafe.push(clone(safe[i]));
  790. }
  791. return unsafe;
  792. }
  793. var unsafe = new unsafeWindow.Object();
  794. _.C(safe).each(function (v, k) {
  795. unsafe[k] = clone(v);
  796. });
  797. return unsafe;
  798. }
  799. var MAGIC_KEY = '__adsbypasser_reverse_proxy__';
  800. $.window = (function () {
  801. var isFirefox = typeof InstallTrigger !== 'undefined';
  802. if (!isFirefox) {
  803. return unsafeWindow;
  804. }
  805. var decorator = {
  806. set: function (target, key, value) {
  807. if (key === MAGIC_KEY) {
  808. return false;
  809. }
  810. if (target === unsafeWindow && key === 'open') {
  811. var d = Object.getOwnPropertyDescriptor(target, key);
  812. d.value = clone(value);
  813. Object.defineProperty(target, key, d);
  814. } else {
  815. target[key] = clone(value);
  816. }
  817. return true;
  818. },
  819. get: function (target, key) {
  820. if (key === MAGIC_KEY) {
  821. return target;
  822. }
  823. var value = target[key];
  824. var type = typeof value;
  825. if (value === null || (type !== 'function' && type !== 'object')) {
  826. return value;
  827. }
  828. return new Proxy(value, decorator);
  829. },
  830. apply: function (target, self, args) {
  831. args = Array.prototype.slice.call(args);
  832. if (target === unsafeWindow.Object.defineProperty) {
  833. args[0] = args[0][MAGIC_KEY];
  834. }
  835. if (target === unsafeWindow.Function.apply) {
  836. self = self[MAGIC_KEY];
  837. args[1] = Array.prototype.slice.call(args[1]);
  838. }
  839. var usargs = clone(args);
  840. return target.apply(self, usargs);
  841. },
  842. construct: function (target, args) {
  843. args = Array.prototype.slice.call(args);
  844. args.unshift(undefined);
  845. var usargs = clone(args);
  846. var bind = unsafeWindow.Function.prototype.bind;
  847. return new (bind.apply(target, usargs));
  848. },
  849. };
  850. return new Proxy(unsafeWindow, decorator);
  851. })();
  852. return $;
  853. }));
  854.  
  855. (function (context, factory) {
  856. if (typeof module === 'object' && typeof module.exports === 'object') {
  857. module.exports = function (context, GM) {
  858. var _ = require('lodash');
  859. var core = require('./core.js');
  860. var misc = require('./misc.js');
  861. var dispatcher = require('./dispatcher.js');
  862. var modules = [misc, dispatcher].map(function (v) {
  863. return v.call(null, context, GM);
  864. });
  865. var $ = _.assign.apply(null, modules);
  866. return factory(context, GM, core, $);
  867. };
  868. } else {
  869. factory(context, {
  870. getValue: GM_getValue,
  871. setValue: GM_setValue,
  872. }, context._, context.$);
  873. }
  874. }(this, function (context, GM, _, $) {
  875. 'use strict';
  876. var window = context.window;
  877. $.config = {
  878. set version (value) {
  879. GM.setValue('version', value);
  880. },
  881. get version () {
  882. return GM.getValue('version', 0);
  883. },
  884. set alignCenter (value) {
  885. GM.setValue('align_center', value);
  886. },
  887. get alignCenter () {
  888. return GM.getValue('align_center');
  889. },
  890. set changeBackground (value) {
  891. GM.setValue('change_background', value);
  892. },
  893. get changeBackground () {
  894. return GM.getValue('change_background');
  895. },
  896. set externalServerSupport (value) {
  897. GM.setValue('external_server_support', value);
  898. },
  899. get externalServerSupport () {
  900. return GM.getValue('external_server_support');
  901. },
  902. set redirectImage (value) {
  903. GM.setValue('redirect_image', value);
  904. },
  905. get redirectImage () {
  906. return GM.getValue('redirect_image');
  907. },
  908. set scaleImage (value) {
  909. GM.setValue('scale_image', value);
  910. },
  911. get scaleImage () {
  912. return GM.getValue('scale_image');
  913. },
  914. set logLevel (value) {
  915. GM.setValue('log_level', 1 * value);
  916. },
  917. get logLevel () {
  918. return GM.getValue('log_level');
  919. },
  920. };
  921. fixup($.config);
  922. function fixup (c) {
  923. var patches = [
  924. function (c) {
  925. var ac = typeof c.alignCenter !== 'undefined';
  926. if (typeof c.changeBackground === 'undefined') {
  927. c.changeBackground = ac ? c.alignCenter : true;
  928. }
  929. if (typeof c.scaleImage === 'undefined') {
  930. c.scaleImage = ac ? c.alignCenter : true;
  931. }
  932. if (!ac) {
  933. c.alignCenter = true;
  934. }
  935. if (typeof c.redirectImage === 'undefined') {
  936. c.redirectImage = true;
  937. }
  938. },
  939. function (c) {
  940. if (typeof c.externalServerSupport === 'undefined') {
  941. c.externalServerSupport = false;
  942. }
  943. },
  944. function (c) {
  945. if (typeof c.logLevel === 'undefined') {
  946. c.logLevel = 1;
  947. }
  948. },
  949. ];
  950. while (c.version < patches.length) {
  951. patches[c.version](c);
  952. ++c.version;
  953. }
  954. }
  955. $.register({
  956. rule: {
  957. host: /^adsbypasser\.github\.io$/,
  958. path: /^\/configure\.html$/,
  959. },
  960. ready: function () {
  961. $.window.commit = function (data) {
  962. data.version = $.config.version;
  963. _.C(data).each(function (v, k) {
  964. $.config[k] = v;
  965. });
  966. };
  967. $.window.render({
  968. version: $.config.version,
  969. options: {
  970. alignCenter: {
  971. type: 'checkbox',
  972. value: $.config.alignCenter,
  973. label: 'Align Center',
  974. help: 'Align image to the center if possible. (default: enabled)',
  975. },
  976. changeBackground: {
  977. type: 'checkbox',
  978. value: $.config.changeBackground,
  979. label: 'Change Background',
  980. help: 'Use Firefox-like image background if possible. (default: enabled)',
  981. },
  982. redirectImage: {
  983. type: 'checkbox',
  984. value: $.config.redirectImage,
  985. label: 'Redirect Image',
  986. help: [
  987. 'Directly open image link if possible. (default: enabled)',
  988. 'If disabled, redirection will only works on link shortener sites.',
  989. ].join('<br/>\n'),
  990. },
  991. scaleImage: {
  992. type: 'checkbox',
  993. value: $.config.scaleImage,
  994. label: 'Scale Image',
  995. help: 'When image loaded, scale it to fit window if possible. (default: enabled)',
  996. },
  997. externalServerSupport: {
  998. type: 'checkbox',
  999. value: $.config.externalServerSupport,
  1000. label: 'External Server Support',
  1001. help: [
  1002. 'Send URL information to external server to enhance features (e.g.: captcha resolving). (default: disabled)',
  1003. 'Affected sites:',
  1004. 'setlinks.us (captcha)',
  1005. ].join('<br/>\n'),
  1006. },
  1007. logLevel: {
  1008. type: 'select',
  1009. value: $.config.logLevel,
  1010. menu: [
  1011. [0, '0 (quiet)'],
  1012. [1, '1 (default)'],
  1013. [2, '2 (verbose)'],
  1014. ],
  1015. label: 'Log Level',
  1016. help: [
  1017. 'Log level in developer console. (default: 1)',
  1018. '0 will not print anything in console.',
  1019. '1 will only print logs on affected sites.',
  1020. '2 will print on any sites.',
  1021. ].join('<br/>\n'),
  1022. },
  1023. },
  1024. });
  1025. },
  1026. });
  1027. return $;
  1028. }));
  1029.  
  1030. $.register({
  1031. rule: {
  1032. host: /^01\.nl$/,
  1033. },
  1034. ready: function () {
  1035. 'use strict';
  1036. var f = $('iframe#redirectframe');
  1037. $.openLink(f.src);
  1038. },
  1039. });
  1040.  
  1041. $.register({
  1042. rule: {
  1043. host: /^(www\.)?1be\.biz$/,
  1044. path: /^\/s\.php$/,
  1045. query: /^\?(.+)/,
  1046. },
  1047. start: function (m) {
  1048. 'use strict';
  1049. $.openLink(m.query[1]);
  1050. },
  1051. });
  1052.  
  1053. $.register({
  1054. rule: {
  1055. host: /^(www\.)?1tiny\.net$/,
  1056. path: /\/\w+/
  1057. },
  1058. ready: function () {
  1059. 'use strict';
  1060. var directUrl = $.searchScripts(/window\.location='([^']+)';/);
  1061. if (!directUrl) {
  1062. throw new _.AdsBypasserError('script content changed');
  1063. }
  1064. $.openLink(directUrl[1]);
  1065. },
  1066. });
  1067.  
  1068. $.register({
  1069. rule: {
  1070. host: /^2ty\.cc$/,
  1071. path: /^\/.+/,
  1072. },
  1073. ready: function () {
  1074. 'use strict';
  1075. $.removeNodes('iframe');
  1076. var a = $('#close');
  1077. $.openLink(a.href);
  1078. },
  1079. });
  1080.  
  1081. $.register({
  1082. rule: {
  1083. host: /^(www\.)?3ra\.be$/,
  1084. },
  1085. ready: function () {
  1086. 'use strict';
  1087. $.removeNodes('iframe');
  1088. var f = $.window.fc;
  1089. if (!f) {
  1090. throw new _.AdsBypasserError('window.fc is undefined');
  1091. }
  1092. f = f.toString();
  1093. f = f.match(/href="([^"]*)/);
  1094. if (!f) {
  1095. throw new _.AdsBypasserError('url pattern outdated');
  1096. }
  1097. $.openLink(f[1]);
  1098. },
  1099. });
  1100.  
  1101. $.register({
  1102. rule: {
  1103. host: /^(www\.)?4fun\.tw$/,
  1104. },
  1105. ready: function () {
  1106. 'use strict';
  1107. var i = $('#original_url');
  1108. $.openLink(i.value);
  1109. },
  1110. });
  1111.  
  1112. $.register({
  1113. rule: {
  1114. host: /^ad2links\.com$/,
  1115. path: /^\/\w-.+$/,
  1116. },
  1117. ready: function () {
  1118. 'use strict';
  1119. $.removeNodes('iframe');
  1120. $.openLinkByPost(window.location.toString(), {
  1121. post: {
  1122. image: 'Skip Ad.',
  1123. },
  1124. });
  1125. },
  1126. });
  1127.  
  1128. (function () {
  1129. 'use strict';
  1130. $.register({
  1131. rule: {
  1132. host: /^ad7.biz$/,
  1133. path: /^\/\d+\/(.*)$/,
  1134. },
  1135. start: function (m) {
  1136. $.removeNodes('iframe');
  1137. var redirectLink = m.path[1];
  1138. if (!redirectLink.match(/^https?:\/\//)) {
  1139. redirectLink = "http://" + redirectLink;
  1140. }
  1141. $.openLink(redirectLink);
  1142. },
  1143. });
  1144. $.register({
  1145. rule: {
  1146. host: /^ad7.biz$/,
  1147. path: /^\/\w+$/,
  1148. },
  1149. ready: function () {
  1150. $.removeNodes('iframe');
  1151. var script = $.searchScripts('var r_url');
  1152. var url = script.match(/&url=([^&]+)/);
  1153. url = url[1];
  1154. $.openLink(url);
  1155. },
  1156. });
  1157. })();
  1158.  
  1159. $.register({
  1160. rule: {
  1161. host: /^(www\.)?adb\.ug|(www\.)?lynk\.my$/,
  1162. path: /^(?!\/(?:privacy|terms|contact(\/.*)?|#.*)?$).*$/
  1163. },
  1164. ready: function () {
  1165. 'use strict';
  1166. $.removeNodes('iframe');
  1167. var m = $.searchScripts(/top\.location\.href="([^"]+)"/);
  1168. if (m) {
  1169. $.openLink(m[1]);
  1170. return;
  1171. }
  1172. m = $.searchScripts(/\{_args.+\}\}/);
  1173. if (!m) {
  1174. throw new _.AdsBypasserError('script content changed');
  1175. }
  1176. m = eval('(' + m[0] + ')');
  1177. var url = window.location.pathname + '/skip_timer';
  1178. var i = setInterval(function () {
  1179. $.post(url, m).then(function (text) {
  1180. var jj = _.parseJSON(text);
  1181. if (!jj.errors && jj.messages) {
  1182. clearInterval(i);
  1183. $.openLink(jj.messages.url);
  1184. }
  1185. });
  1186. }, 1000);
  1187. },
  1188. });
  1189.  
  1190. (function () {
  1191. 'use strict';
  1192. $.register({
  1193. rule: {
  1194. path: /\/locked$/,
  1195. query: /url=([^&]+)/,
  1196. },
  1197. start: function (m) {
  1198. $.resetCookies();
  1199. var url = decodeURIComponent(m.query[1]);
  1200. if (url.match(/^http/)) {
  1201. $.openLink(url);
  1202. } else {
  1203. $.openLink('/' + url);
  1204. }
  1205. },
  1206. });
  1207. $.register({
  1208. rule: function () {
  1209. var h = $.$('html[id="adfly_html"]');
  1210. var b = $.$('body[id="home"]');
  1211. if (h && b) {
  1212. return true;
  1213. } else {
  1214. return null;
  1215. }
  1216. },
  1217. ready: function () {
  1218. var h = $.$('#adfly_html'), b = $.$('#home');
  1219. if (!h || !b || h.nodeName !== 'HTML' || b.nodeName !== 'BODY') {
  1220. return;
  1221. }
  1222. $.removeNodes('iframe');
  1223. $.window.cookieCheck = _.nop;
  1224. h = $.window.eu;
  1225. if (!h) {
  1226. h = $('#adfly_bar');
  1227. $.window.close_bar();
  1228. return;
  1229. }
  1230. var a = h.indexOf('!HiTommy');
  1231. if (a >= 0) {
  1232. h = h.substring(0, a);
  1233. }
  1234. a = '';
  1235. b = '';
  1236. for (var i = 0; i < h.length; ++i) {
  1237. if (i % 2 === 0) {
  1238. a = a + h.charAt(i);
  1239. } else {
  1240. b = h.charAt(i) + b;
  1241. }
  1242. }
  1243. h = atob(a + b);
  1244. h = h.substr(2);
  1245. if (location.hash) {
  1246. h += location.hash;
  1247. }
  1248. $.openLink(h);
  1249. },
  1250. });
  1251. $.register({
  1252. rule: 'http://ad7.biz/*',
  1253. ready: function () {
  1254. $.removeNodes('iframe');
  1255. $.resetCookies();
  1256. var script = $.searchScripts('var r_url');
  1257. var url = script.match(/&url=([^&]+)/);
  1258. url = url[1];
  1259. $.openLink(url);
  1260. },
  1261. });
  1262. })();
  1263.  
  1264. $.register({
  1265. rule: {
  1266. host: /^(www\.)?adfe\.es$/,
  1267. path: /^\/\w+$/,
  1268. },
  1269. ready: function () {
  1270. 'use strict';
  1271. var f = $('#frmvideo');
  1272. if (!f.STEP4) {
  1273. return;
  1274. }
  1275. f.submit();
  1276. },
  1277. });
  1278.  
  1279. $.register({
  1280. rule: 'http://adfoc.us/*',
  1281. ready: function () {
  1282. 'use strict';
  1283. var root = document.body;
  1284. var observer = new MutationObserver(function (mutations) {
  1285. var o = $.$('#showSkip');
  1286. if (o) {
  1287. observer.disconnect();
  1288. o = o.querySelector('a');
  1289. $.openLink(o.href);
  1290. }
  1291. });
  1292. observer.observe(root, {
  1293. childList: true,
  1294. subtree: true,
  1295. });
  1296. },
  1297. });
  1298.  
  1299. $.register({
  1300. rule: {
  1301. host: /^(www\.)?adjet\.biz$/,
  1302. },
  1303. ready: function () {
  1304. 'use strict';
  1305. var m = $.searchScripts(/href=(\S+)/);
  1306. if (!m) {
  1307. throw new _.AdsBypasserError('site changed');
  1308. }
  1309. $.openLink(m[1]);
  1310. },
  1311. });
  1312.  
  1313. $.register({
  1314. rule: {
  1315. host: /^adlock\.org$/,
  1316. },
  1317. ready: function () {
  1318. 'use strict';
  1319. var a = $.$('#xre a.xxr, #downloadButton1');
  1320. if (a) {
  1321. $.openLink(a.href);
  1322. return;
  1323. }
  1324. a = $.window.fileLocation;
  1325. if (a) {
  1326. $.openLink(a);
  1327. }
  1328. },
  1329. });
  1330.  
  1331. $.register({
  1332. rule: {
  1333. host: /^(www\.)?adlot\.us$/,
  1334. },
  1335. ready: function () {
  1336. 'use strict';
  1337. $.removeNodes('iframe');
  1338. var script = $.searchScripts('form');
  1339. var p = /name='([^']+)' value='([^']+)'/g;
  1340. var opt = {
  1341. image: ' ',
  1342. };
  1343. var tmp = null;
  1344. while (tmp = p.exec(script)) {
  1345. opt[tmp[1]] = tmp[2];
  1346. }
  1347. $.openLink('', {
  1348. path: opt,
  1349. });
  1350. },
  1351. });
  1352.  
  1353. $.register({
  1354. rule: {
  1355. host: /^(www\.)?ah-informatique\.com$/,
  1356. path: /^\/ZipUrl/,
  1357. },
  1358. ready: function () {
  1359. 'use strict';
  1360. var a = $('#zip3 a');
  1361. $.openLink(a.href);
  1362. },
  1363. });
  1364.  
  1365. $.register({
  1366. rule: {
  1367. host: /^aka\.gr$/
  1368. },
  1369. ready: function () {
  1370. 'use strict';
  1371. var l = $('iframe#yourls-frame');
  1372. $.openLink(l.src);
  1373. },
  1374. });
  1375.  
  1376. $.register({
  1377. rule: {
  1378. host: /^(www\.)?allkeyshop\.com$/,
  1379. },
  1380. ready: function (m) {
  1381. 'use strict';
  1382. var matches = $.searchScripts(/window\.location\.href = "([^"]+)"/);
  1383. $.openLink(matches[1]);
  1384. $.removeAllTimer();
  1385. },
  1386. });
  1387.  
  1388. $.register({
  1389. rule: {
  1390. host: /^anonymbucks\.com$/,
  1391. },
  1392. ready: function () {
  1393. 'use strict';
  1394. var a = $('#boton-continuar');
  1395. a.click();
  1396. },
  1397. });
  1398.  
  1399. $.register({
  1400. rule: {
  1401. host: [
  1402. /^(awet|sortir)\.in$/,
  1403. /^st\.benfile\.com$/,
  1404. ],
  1405. },
  1406. ready: function () {
  1407. 'use strict';
  1408. var m = $.searchScripts(/window\.location="([^"]*)";/);
  1409. $.openLink(m[1]);
  1410. },
  1411. });
  1412.  
  1413. (function () {
  1414. 'use strict';
  1415. $.register({
  1416. rule: {
  1417. host: /^bc\.vc$/,
  1418. path: /^.+(https?:\/\/.+)$/,
  1419. },
  1420. start: function (m) {
  1421. $.openLink(m.path[1] + document.location.search + document.location.hash);
  1422. },
  1423. });
  1424. function decompress (script, unzip) {
  1425. if (!unzip) {
  1426. return script;
  1427. }
  1428. var matches = script.match(/eval(.*)/);
  1429. matches = matches[1];
  1430. script = eval(matches);
  1431. return script;
  1432. }
  1433. function searchScript (unzip) {
  1434. var content = $.searchScripts('make_log');
  1435. if (content) {
  1436. return {
  1437. direct: false,
  1438. script: decompress(content, unzip),
  1439. };
  1440. }
  1441. content = $.searchScripts('click_log');
  1442. if (content) {
  1443. return {
  1444. direct: true,
  1445. script: decompress(content, unzip),
  1446. };
  1447. }
  1448. throw _.AdsBypasserError('script changed');
  1449. }
  1450. function knockServer (script, dirtyFix) {
  1451. var matches = script.match(/\$.post\('([^']*)'[^{]+(\{opt:'make_log'[^}]+\}\}),/i);
  1452. var make_url = matches[1];
  1453. var make_opts = eval('(' + matches[2] + ')');
  1454. var i = setInterval(function () {
  1455. $.post(make_url, make_opts).then(function (text) {
  1456. if (dirtyFix) {
  1457. text = text.match(/\{.+\}/)[0];
  1458. }
  1459. var jj = _.parseJSON(text);
  1460. if (jj.message) {
  1461. clearInterval(i);
  1462. $.openLink(jj.message.url);
  1463. }
  1464. });
  1465. }, 1000);
  1466. }
  1467. function knockServer2 (script) {
  1468. var post = $.window.$.post;
  1469. $.window.$.post = function (a, b, c) {
  1470. if (typeof c !== 'function') {
  1471. return;
  1472. }
  1473. setTimeout(function () {
  1474. var data = {
  1475. error: false,
  1476. message: {
  1477. url: '#',
  1478. },
  1479. };
  1480. c(JSON.stringify(data));
  1481. }, 1000);
  1482. };
  1483. var matches = script.match(/\$.post\('([^']*)'[^{]+(\{opt:'make_log'[^}]+\}\}),/i);
  1484. var make_url = matches[1];
  1485. var make_opts = eval('(' + matches[2] + ')');
  1486. function makeLog () {
  1487. make_opts.opt = 'make_log';
  1488. post(make_url, make_opts, function (text) {
  1489. var data = _.parseJSON(text);
  1490. _.info('make_log', data);
  1491. if (!data.message) {
  1492. checksLog();
  1493. return;
  1494. }
  1495. $.openLink(data.message.url);
  1496. });
  1497. }
  1498. function checkLog () {
  1499. make_opts.opt = 'check_log';
  1500. post(make_url, make_opts, function (text) {
  1501. var data = _.parseJSON(text);
  1502. _.info('check_log', data);
  1503. if (!data.message) {
  1504. checkLog();
  1505. return;
  1506. }
  1507. makeLog();
  1508. });
  1509. }
  1510. function checksLog () {
  1511. make_opts.opt = 'checks_log';
  1512. post(make_url, make_opts, function () {
  1513. _.info('checks_log');
  1514. checkLog();
  1515. });
  1516. }
  1517. checksLog();
  1518. }
  1519. $.register({
  1520. rule: {
  1521. host: /^bc\.vc$/,
  1522. path: /^\/.+/,
  1523. },
  1524. ready: function () {
  1525. $.removeNodes('iframe');
  1526. var result = searchScript(false);
  1527. if (!result.direct) {
  1528. knockServer2(result.script);
  1529. } else {
  1530. result = result.script.match(/top\.location\.href = '([^']+)'/);
  1531. if (!result) {
  1532. throw new _.AdsBypasserError('script changed');
  1533. }
  1534. result = result[1];
  1535. $.openLink(result);
  1536. }
  1537. },
  1538. });
  1539. function run (dirtyFix) {
  1540. $.removeNodes('iframe');
  1541. var result = searchScript(true);
  1542. if (!result.direct) {
  1543. knockServer(result.script,dirtyFix);
  1544. } else {
  1545. result = result.script.match(/top\.location\.href='([^']+)'/);
  1546. if (!result) {
  1547. throw new _.AdsBypasserError('script changed');
  1548. }
  1549. result = result[1];
  1550. $.openLink(result);
  1551. }
  1552. }
  1553. $.register({
  1554. rule: {
  1555. host: /^adcrun\.ch$/,
  1556. path: /^\/\w+$/,
  1557. },
  1558. ready: function () {
  1559. $.removeNodes('.user_content');
  1560. var rSurveyLink = /http\.open\("GET", "api_ajax\.php\?sid=\d*&ip=[^&]*&longurl=([^"]+)" \+ first_time, (?:true|false)\);/;
  1561. var l = $.searchScripts(rSurveyLink);
  1562. if (l) {
  1563. $.openLink(l[1]);
  1564. return;
  1565. }
  1566. run(true);
  1567. },
  1568. });
  1569. $.register({
  1570. rule: {
  1571. host: [
  1572. /^1tk\.us$/,
  1573. /^gx\.si$/,
  1574. /^adwat\.ch$/,
  1575. /^(fly2url|urlwiz|xafox)\.com$/,
  1576. /^(zpoz|ultry)\.net$/,
  1577. /^(wwy|myam)\.me$/,
  1578. /^ssl\.gs$/,
  1579. /^link\.tl$/,
  1580. /^hit\.us$/,
  1581. /^shortit\.in$/,
  1582. /^(adbla|tl7)\.us$/,
  1583. /^www\.adjet\.eu$/,
  1584. /^srk\.gs$/,
  1585. /^cun\.bz$/,
  1586. /^miniurl\.tk$/,
  1587. /^vizzy\.es$/,
  1588. /^kazan\.vc$/,
  1589. ],
  1590. path: /^\/.+/,
  1591. },
  1592. ready: run,
  1593. });
  1594. $.register({
  1595. rule: {
  1596. host: /^adtr\.im|ysear\.ch|xip\.ir$/,
  1597. path: /^\/.+/,
  1598. },
  1599. ready: function () {
  1600. var a = $.$('div.fly_head a.close');
  1601. var f = $.$('iframe.fly_frame');
  1602. if (a && f) {
  1603. $.openLink(f.src);
  1604. } else {
  1605. run();
  1606. }
  1607. },
  1608. });
  1609. $.register({
  1610. rule: {
  1611. host: /^ad5\.eu$/,
  1612. path: /^\/[^.]+$/,
  1613. },
  1614. ready: function() {
  1615. $.removeNodes('iframe');
  1616. var s = searchScript(true);
  1617. var m = s.script.match(/(<form name="form1"method="post".*(?!<\\form>)<\/form>)/);
  1618. if (!m) {return;}
  1619. m = m[1];
  1620. var tz = -(new Date().getTimezoneOffset()/60);
  1621. m = m.replace("'+timezone+'",tz);
  1622. var d = document.createElement('div');
  1623. d.setAttribute('id','AdsBypasserFTW');
  1624. d.setAttribute('style', 'display:none;');
  1625. d.innerHTML = m;
  1626. document.body.appendChild(d);
  1627. $('#AdsBypasserFTW > form[name=form1]').submit();
  1628. },
  1629. });
  1630. $.register({
  1631. rule: {
  1632. host: /^tr5\.in$/,
  1633. path: /^\/.+/,
  1634. },
  1635. ready: function () {
  1636. run(true);
  1637. },
  1638. });
  1639. })();
  1640.  
  1641. $.register({
  1642. rule: {
  1643. host: /^(www\.)?biglistofwebsites\.com$/,
  1644. path: /^\/go\/(\w+\.\w+)$/
  1645. },
  1646. start: function (m) {
  1647. 'use strict';
  1648. $.openLink('http://' + m.path[1]);
  1649. },
  1650. });
  1651.  
  1652. $.register({
  1653. rule: 'http://www.bild.me/bild.php?file=*',
  1654. ready: function () {
  1655. 'use strict';
  1656. var i = $('#Bild');
  1657. $.openLink(i.src);
  1658. },
  1659. });
  1660.  
  1661. $.register({
  1662. rule: 'http://bildr.no/view/*',
  1663. ready: function () {
  1664. 'use strict';
  1665. var i = $('img.bilde');
  1666. $.openLink(i.src);
  1667. },
  1668. });
  1669.  
  1670. $.register({
  1671. rule: {
  1672. host: /^(www\.)?([a-zA-Z0-9]+\.)?binbox\.io$/,
  1673. path: /\/o\/([a-zA-Z0-9]+)/,
  1674. },
  1675. start: function (m) {
  1676. 'use strict';
  1677. var direct_link = window.atob(m.path[1]);
  1678. $.openLink(direct_link);
  1679. },
  1680. });
  1681.  
  1682. $.register({
  1683. rule: {
  1684. host: /^bk-ddl\.net$/,
  1685. path: /^\/\w+$/,
  1686. },
  1687. ready: function (m) {
  1688. 'use strict';
  1689. var l = $('a.btn-block.redirect').href;
  1690. var b64 = l.match(/\?r=(\w+={0,2}?)/);
  1691. $.openLink(atob(b64[1]));
  1692. },
  1693. });
  1694.  
  1695. $.register({
  1696. rule: {
  1697. host: /^(www\.)?boxcash\.net$/,
  1698. path: /^\/\w+$/,
  1699. },
  1700. ready: function () {
  1701. 'use strict';
  1702. var m = $.searchScripts(/\'\/ajax_link\.php\',\{key:'(\w+)',url:'(\d+)',t:'(\d+)',r:'(\w*)'\}/);
  1703. $.post('/ajax_link.php', {
  1704. key: m[1],
  1705. url: m[2],
  1706. t: m[3],
  1707. r: m[4],
  1708. }).then(function (response) {
  1709. var l = response.match(/window(?:.top.window)\.location="([^"]+)"/);
  1710. $.openLink(l[1]);
  1711. });
  1712. },
  1713. });
  1714. $.register({
  1715. rule: {
  1716. host: /^(www\.)?boxcash\.net$/,
  1717. path: /^\/redirect\.html$/,
  1718. query: /url=(.+)$/,
  1719. },
  1720. start: function (m) {
  1721. 'use strict';
  1722. var l = decodeURIComponent(m.query[1]);
  1723. $.openLink(l);
  1724. },
  1725. });
  1726.  
  1727. $.register({
  1728. rule: {
  1729. host: /^(www\.)?(buz|vzt)url\.com$/,
  1730. },
  1731. ready: function () {
  1732. 'use strict';
  1733. var frame = $('frame[scrolling=yes]');
  1734. $.openLink(frame.src);
  1735. },
  1736. });
  1737.  
  1738. $.register({
  1739. rule: {
  1740. host: /^(cf|ex|xt)\d\.(me|co)$/,
  1741. },
  1742. ready: function (m) {
  1743. 'use strict';
  1744. $.removeNodes('iframe');
  1745. var a = $('#skip_button');
  1746. $.openLink(a.href);
  1747. },
  1748. });
  1749.  
  1750. $.register({
  1751. rule: {
  1752. host: /^cf\.ly$/,
  1753. path: /^\/[^\/]+$/,
  1754. },
  1755. start: function (m) {
  1756. 'use strict';
  1757. $.removeNodes('iframe');
  1758. $.openLink('/skip' + m.path[0]);
  1759. },
  1760. });
  1761.  
  1762. $.register({
  1763. rule: {
  1764. host: /^(www\.)?cli\.gs$/,
  1765. },
  1766. ready: function () {
  1767. 'use strict';
  1768. var a = $('a.RedirectLink');
  1769. $.openLink(a.href);
  1770. },
  1771. });
  1772.  
  1773. $.register({
  1774. rule: {
  1775. host: /^(www\.)?clictune\.com$/,
  1776. path: /^\/id=\d+/,
  1777. },
  1778. ready: function () {
  1779. 'use strict';
  1780. $.removeNodes('iframe');
  1781. var matches = $.searchScripts(/<a href="http:\/\/(?:www.)?clictune\.com\/redirect\.php\?url=([^&]+)&/);
  1782. var url = decodeURIComponent(matches[1]);
  1783. $.openLink(url);
  1784. },
  1785. });
  1786.  
  1787. $.register({
  1788. rule: {
  1789. host: /^clk\.im$/,
  1790. },
  1791. ready: function (m) {
  1792. 'use strict';
  1793. $.removeNodes('iframe');
  1794. var matches = $.searchScripts(/\$\("\.countdown"\)\.attr\("href","([^"]+)"\)/);
  1795. $.openLink(matches[1]);
  1796. },
  1797. });
  1798.  
  1799. $.register({
  1800. rule: {
  1801. host: /^(?:(\w+)\.)?(coinurl\.com|cur\.lv)$/,
  1802. path: /^\/([-\w]+)$/
  1803. },
  1804. ready: function (m) {
  1805. 'use strict';
  1806. $.removeNodes('iframe');
  1807. var host = 'http://cur.lv/redirect_curlv.php';
  1808. var param = m.host[1] === undefined ? {
  1809. code: m.path[1],
  1810. } : {
  1811. zone: m.host[1],
  1812. name: m.path[1],
  1813. };
  1814. $.get(host, param).then(function(mainFrameContent) {
  1815. try {
  1816. var docMainFrame = $.toDOM(mainFrameContent);
  1817. } catch (e) {
  1818. throw new _.AdsBypasserError('main frame changed');
  1819. }
  1820. var rExtractLink = /onclick="open_url\('([^']+)',\s*'go'\)/;
  1821. var innerFrames = $.$$('iframe', docMainFrame).each(function (currFrame) {
  1822. var currFrameAddr = currFrame.getAttribute('src');
  1823. $.get(currFrameAddr).then(function(currFrameContent) {
  1824. var aRealLink = rExtractLink.exec(currFrameContent);
  1825. if (aRealLink === undefined || aRealLink[1] === undefined) {
  1826. return;
  1827. }
  1828. var realLink = aRealLink[1];
  1829. $.openLink(realLink);
  1830. });
  1831. });
  1832. });
  1833. },
  1834. });
  1835.  
  1836. $.register({
  1837. rule: {
  1838. host: /^comyonet\.com$/,
  1839. },
  1840. ready: function () {
  1841. 'use strict';
  1842. var input = $('input[name="enter"]');
  1843. input.click();
  1844. },
  1845. });
  1846.  
  1847. $.register({
  1848. rule: {
  1849. host: /^(www\.)?cvc\.la$/,
  1850. path: /^\/\w+$/,
  1851. },
  1852. start: function () {
  1853. 'use strict';
  1854. $.post(document.location.href, {
  1855. hidden: 24, // Either 24 or 276, but both seem to work anyway
  1856. image: ' ',
  1857. }).then(function (text) {
  1858. var matches = text.match(/window\.location\.replace\('([^']+)'\);/);
  1859. $.openLink(matches[1]);
  1860. });
  1861. },
  1862. });
  1863.  
  1864. $.register({
  1865. rule: {
  1866. host: /^(www\.)?dapat\.in$/,
  1867. },
  1868. ready: function () {
  1869. 'use strict';
  1870. var f = $('iframe[name=pagetext]');
  1871. $.openLink(f.src);
  1872. },
  1873. });
  1874.  
  1875. $.register({
  1876. rule: {
  1877. host: /^(www\.)?dd\.ma$/,
  1878. },
  1879. ready: function (m) {
  1880. 'use strict';
  1881. var i = $.$('#mainframe');
  1882. if (i) {
  1883. $.openLink(i.src);
  1884. return;
  1885. }
  1886. var a = $('#btn_open a');
  1887. $.openLink(a.href);
  1888. },
  1889. });
  1890.  
  1891. $.register({
  1892. rule: {
  1893. host: /^(www\.)?dereferer\.website$/,
  1894. query: /^\?(.+)/,
  1895. },
  1896. start: function (m) {
  1897. 'use strict';
  1898. $.openLink(m.query[1]);
  1899. },
  1900. });
  1901.  
  1902. $.register({
  1903. rule: {
  1904. host: /^dikit\.in$/,
  1905. },
  1906. ready: function () {
  1907. 'use strict';
  1908. $.removeNodes('iframe');
  1909. var a = $('.disclaimer a');
  1910. $.openLink(a.href);
  1911. },
  1912. });
  1913.  
  1914. $.register({
  1915. rule: 'http://www.dumppix.com/viewer.php?*',
  1916. ready: function () {
  1917. 'use strict';
  1918. var i = $.$('#boring');
  1919. if (i) {
  1920. $.openLink(i.src);
  1921. return;
  1922. }
  1923. i = $('table td:nth-child(1) a');
  1924. $.openLink(i.href);
  1925. },
  1926. });
  1927.  
  1928. $.register({
  1929. rule: {
  1930. host: /^durl\.me$/,
  1931. },
  1932. ready: function () {
  1933. 'use strict';
  1934. var a = $('a[class="proceedBtn"]');
  1935. $.openLink(a.href);
  1936. },
  1937. });
  1938.  
  1939. $.register({
  1940. rule: {
  1941. host: /easyurl\.net|(atu|clickthru|redirects|readthis)\.ca|goshrink\.com$/,
  1942. },
  1943. ready: function () {
  1944. 'use strict';
  1945. var f = $('frame[name=main]');
  1946. $.openLink(f.src);
  1947. },
  1948. });
  1949.  
  1950. $.register({
  1951. rule: {
  1952. host: /empireload\.com$/,
  1953. path: /^\/plugin\.php$/,
  1954. query: /^\?id=linkout&url=([^&]+)$/,
  1955. },
  1956. start: function (m) {
  1957. $.openLink(m.query[1]);
  1958. },
  1959. });
  1960.  
  1961. $.register({
  1962. rule: {
  1963. host: [
  1964. /^ethi\.in$/,
  1965. /^st\.wardhanime\.net$/,
  1966. ],
  1967. path: /^\/i\/\d+$/,
  1968. },
  1969. ready: function () {
  1970. 'use strict';
  1971. var a = $('#wrapper > [class^="tombo"] > a[target="_blank"]');
  1972. $.openLink(a.href);
  1973. },
  1974. });
  1975.  
  1976. $.register({
  1977. rule: {
  1978. host: /^(www\.)?filoops.info$/
  1979. },
  1980. ready: function () {
  1981. 'use strict';
  1982. var a = $('#text > center a, #text > div[align=center] a');
  1983. $.openLink(a.href);
  1984. },
  1985. });
  1986.  
  1987. $.register({
  1988. rule: {
  1989. host: /^fit\.sh$/,
  1990. },
  1991. ready: function () {
  1992. 'use strict';
  1993. $.removeNodes('.container-body');
  1994. var m = $.searchScripts(/token="([^"]+)"/);
  1995. if (!m) {
  1996. throw new _.AdsBypasserError('site changed');
  1997. }
  1998. m = m[1];
  1999. var interLink = '/go/' + m + '?fa=15466&a=' + window.location.hash.substr(1);
  2000. setTimeout(function () {
  2001. $.openLink(interLink);
  2002. }, 6000);
  2003. },
  2004. });
  2005.  
  2006. $.register({
  2007. rule: {
  2008. host: /^www\.free-tv-video-online\.info$/,
  2009. path: /^\/interstitial2\.html$/,
  2010. query: /lnk=([^&]+)/,
  2011. },
  2012. start: function (m) {
  2013. 'use strict';
  2014. var url = decodeURIComponent(m.query[1]);
  2015. $.openLink(url);
  2016. },
  2017. });
  2018.  
  2019. (function () {
  2020. 'use strict';
  2021. $.register({
  2022. rule: {
  2023. host: /^(www\.)?fundurl\.com$/,
  2024. query: /i=([^&]+)/,
  2025. },
  2026. start: function (m) {
  2027. $.openLink(m.query[1]);
  2028. },
  2029. });
  2030. $.register({
  2031. rule: {
  2032. host: /^(www\.)?fundurl\.com$/,
  2033. path: /^\/(go-\w+|load\.php)$/,
  2034. },
  2035. ready: function () {
  2036. var f = $('iframe[name=fpage3]');
  2037. $.openLink(f.src);
  2038. },
  2039. });
  2040. })();
  2041.  
  2042. (function () {
  2043. var hosts = /^gca\.sh|repla\.cr$/;
  2044. $.register({
  2045. rule: {
  2046. host: hosts,
  2047. path: /^\/adv\/\w+\/(.*)$/,
  2048. query: /^(.*)$/,
  2049. hash: /^(.*)$/,
  2050. },
  2051. start: function (m) {
  2052. 'use strict';
  2053. var l = m.path[1] + m.query[1] + m.hash[1];
  2054. $.openLink(l);
  2055. },
  2056. });
  2057. $.register({
  2058. rule: {
  2059. host: hosts,
  2060. },
  2061. ready: function () {
  2062. 'use strict';
  2063. $.removeNodes('iframe');
  2064. var jQuery = $.window.$;
  2065. setTimeout(function () {
  2066. jQuery("#captcha-dialog").dialog("open");
  2067. }, 1000);
  2068. },
  2069. });
  2070. })();
  2071.  
  2072. $.register({
  2073. rule: {
  2074. host: /^gkurl\.us$/,
  2075. },
  2076. ready: function () {
  2077. 'use strict';
  2078. var iframe = $('#gkurl-frame');
  2079. $.openLink(iframe.src);
  2080. },
  2081. });
  2082.  
  2083. $.register({
  2084. rule: {
  2085. host: /^u\.go2\.me$/,
  2086. },
  2087. ready: function () {
  2088. 'use strict';
  2089. var iframe = $('iframe');
  2090. $.openLink(iframe.src);
  2091. },
  2092. });
  2093.  
  2094. $.register({
  2095. rule: {
  2096. host: /^hotshorturl\.com$/,
  2097. },
  2098. ready: function () {
  2099. 'use strict';
  2100. var frame = $('frame[scrolling=yes]');
  2101. $.openLink(frame.src);
  2102. },
  2103. });
  2104.  
  2105. $.register({
  2106. rule: {
  2107. host: /^(www\.)?(ilix\.in|priva\.us)$/,
  2108. path: /\/(\w+)/,
  2109. },
  2110. ready: function (m) {
  2111. 'use strict';
  2112. var realHost = 'ilix.in';
  2113. if (m.host[2] !== realHost) {
  2114. var realURL = location.href.replace(m.host[2], realHost);
  2115. $.openLink(realURL);
  2116. return;
  2117. }
  2118. var f = $.$('iframe[name=ifram]');
  2119. if (f) {
  2120. $.openLink(f.src);
  2121. return;
  2122. }
  2123. if (!$.$('img#captcha')) {
  2124. $('form[name=frm]').submit();
  2125. }
  2126. },
  2127. });
  2128.  
  2129. $.register({
  2130. rule: {
  2131. host: /^ity\.im$/,
  2132. },
  2133. ready: function () {
  2134. 'use strict';
  2135. var f = $.$('#main');
  2136. if (f) {
  2137. $.openLink(f.src);
  2138. return;
  2139. }
  2140. f = $.$$('frame').find(function (frame) {
  2141. if (frame.src.indexOf('interheader.php') < 0) {
  2142. return _.none;
  2143. }
  2144. return frame.src;
  2145. });
  2146. if (f) {
  2147. $.openLink(f.payload);
  2148. return;
  2149. }
  2150. f = $.searchScripts(/krypted=([^&]+)/);
  2151. if (!f) {
  2152. throw new _.AdsBypasserError('site changed');
  2153. }
  2154. f = f[1];
  2155. var data = $.window.des('ksnslmtmk0v4Pdviusajqu', $.window.hexToString(f), 0, 0);
  2156. if (data) {
  2157. $.openLink('http://ity.im/1104_21_50846_' + data);
  2158. }
  2159. },
  2160. });
  2161.  
  2162. $.register({
  2163. rule: {
  2164. host: /^(www\.)?kingofshrink\.com$/,
  2165. },
  2166. ready: function () {
  2167. 'use strict';
  2168. var l = $('#textresult > a');
  2169. $.openLink(l.href);
  2170. },
  2171. });
  2172.  
  2173. $.register({
  2174. rule: {
  2175. host: /^(www\.)?leechbd\.tk$/,
  2176. path: /^\/Shortener\/(\w+)$/,
  2177. },
  2178. start: function (m) {
  2179. 'use strict';
  2180. $.get('/Shortener/API/read/get', {id: m.path[1], type: 'json'}).then(function (text) {
  2181. var r = _.parseJSON(text);
  2182. if (r.success == true && r.data.full) {
  2183. $.openLink(r.data.full);
  2184. } else {
  2185. _.warn('API Error ' + r.error.code + ' : ' + r.error.msg);
  2186. }
  2187. });
  2188. },
  2189. });
  2190.  
  2191. $.register({
  2192. rule: 'http://www.lienscash.com/l/*',
  2193. ready: function () {
  2194. 'use strict';
  2195. var a = $('#redir_btn');
  2196. $.openLink(a.href);
  2197. },
  2198. });
  2199.  
  2200. $.register({
  2201. rule: {
  2202. host: /^(www\.)?\w+\.link-protector\.com$/,
  2203. },
  2204. ready: function (m) {
  2205. 'use strict';
  2206. var f = $('form[style="font-weight:normal;font-size:12;font-family:Verdana;"]');
  2207. $.openLink(f.action);
  2208. },
  2209. });
  2210.  
  2211. $.register({
  2212. rule: {
  2213. host: /^(www\.)?link\.im$/,
  2214. path: /^\/\w+$/,
  2215. },
  2216. start: function () {
  2217. 'use strict';
  2218. $.post(document.location.href, {
  2219. image: 'Continue',
  2220. }).then(function (text) {
  2221. var m = text.match(/window\.location\.replace\('([^']+)'\)/);
  2222. $.openLink(m[1]);
  2223. });
  2224. },
  2225. });
  2226.  
  2227. $.register({
  2228. rule: {
  2229. host: /\.link2dollar\.com$/,
  2230. path: /^\/\d+$/,
  2231. },
  2232. ready: function () {
  2233. 'use strict';
  2234. var m = $.searchScripts(/var rlink = '([^']+)';/);
  2235. if (!m) {
  2236. throw new _.AdsBypasserError('site changed');
  2237. }
  2238. m = m[1];
  2239. $.openLink(m);
  2240. },
  2241. });
  2242.  
  2243. $.register({
  2244. rule: {
  2245. host: /^link2you\.ru$/,
  2246. path: /^\/\d+\/(.+)$/,
  2247. },
  2248. start: function (m) {
  2249. 'use strict';
  2250. var url = m.path[1];
  2251. if (!url.match(/^https?:\/\//)) {
  2252. url = '//' + url;
  2253. }
  2254. $.openLink(url);
  2255. },
  2256. });
  2257.  
  2258. (function() {
  2259. function ConvertFromHex (str) {
  2260. var result = [];
  2261. while (str.length >= 2) {
  2262. result.push(String.fromCharCode(parseInt(str.substring(0, 2), 16)));
  2263. str = str.substring(2, str.length);
  2264. }
  2265. return result.join("");
  2266. }
  2267. var Encode = function (str) {
  2268. var s = [], j = 0, x, res = '', k = arguments.callee.toString().replace(/\s+/g, "");
  2269. for (var i = 0; i < 256; i++) {
  2270. s[i] = i;
  2271. }
  2272. for (i = 0; i < 256; i++) {
  2273. j = (j + s[i] + k.charCodeAt(i % k.length)) % 256;
  2274. x = s[i];
  2275. s[i] = s[j];
  2276. s[j] = x;
  2277. }
  2278. i = 0;
  2279. j = 0;
  2280. for (var y = 0; y < str.length; y++) {
  2281. i = (i + 1) % 256;
  2282. j = (j + s[i]) % 256;
  2283. x = s[i];
  2284. s[i] = s[j];
  2285. s[j] = x;
  2286. res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]);
  2287. }
  2288. return res;
  2289. };
  2290. var hostRules = [
  2291. /^(([\w]{8}|www)\.)?(allanalpass|cash4files|drstickyfingers|fapoff|freegaysitepass|(gone|tube)viral|(pic|tna)bucks|whackyvidz)\.com$/,
  2292. /^(([\w]{8}|www)\.)?(a[mn]y|deb|dyo|sexpalace)\.gs$/,
  2293. /^(([\w]{8}|www)\.)?(filesonthe|poontown|seriousdeals|ultrafiles|urlbeat)\.net$/,
  2294. /^(([\w]{8}|www)\.)?freean\.us$/,
  2295. /^(([\w]{8}|www)\.)?galleries\.bz$/,
  2296. /^(([\w]{8}|www)\.)?hornywood\.tv$/,
  2297. /^(([\w]{8}|www)\.)?link(babes|bucks)\.com$/,
  2298. /^(([\w]{8}|www)\.)?(megaline|miniurls|qqc|rqq|tinylinks|yyv|zff)\.co$/,
  2299. /^(([\w]{8}|www)\.)?(these(blog|forum)s)\.com$/,
  2300. /^(([\w]{8}|www)\.)?youfap\.me$/,
  2301. /^warning-this-linkcode-will-cease-working-soon\.www\.linkbucksdns\.com$/,
  2302. ];
  2303. function generateRandomIP () {
  2304. 'use strict';
  2305. return [0,0,0,0].map(function () {
  2306. return Math.floor(Math.random() * 256);
  2307. }).join('.');
  2308. }
  2309. function findToken (context) {
  2310. 'use strict';
  2311. var script = $.searchScripts('window[\'init\' + \'Lb\' + \'js\' + \'\']', context);
  2312. if (!script) {
  2313. _.warn('pattern changed');
  2314. return null;
  2315. }
  2316. var m = script.match(/AdPopUrl\s*:\s*'.+\?ref\d*=([\w\d]+)'/);
  2317. var token = m[1];
  2318. m = script.match(/=\s*(\d+);/);
  2319. var ak = parseInt(m[1], 10);
  2320. var re = /\+\s*(\d+);/g;
  2321. var tmp = null;
  2322. while((m = re.exec(script)) !== null) {
  2323. tmp = m[1];
  2324. }
  2325. ak += parseInt(tmp, 10);
  2326. return {
  2327. t: token,
  2328. aK: ak,
  2329. };
  2330. }
  2331. function sendRequest (token) {
  2332. 'use strict';
  2333. _.info('sending token: %o', token);
  2334. var i = setInterval(function () {
  2335. $.get('/intermission/loadTargetUrl', token).then(function (text) {
  2336. var data = _.parseJSON(text);
  2337. _.info('response: %o', data);
  2338. if (!data.Success && data.Errors[0] === 'Invalid token') {
  2339. _.info('got invalid token');
  2340. clearInterval(i);
  2341. retry();
  2342. return;
  2343. }
  2344. if (data.Success && !data.AdBlockSpotted && data.Url) {
  2345. clearInterval(i);
  2346. $.openLink(data.Url);
  2347. return;
  2348. }
  2349. });
  2350. }, 1000);
  2351. }
  2352. function retry () {
  2353. 'use strict';
  2354. $.get(window.location.toString(), {}, {
  2355. 'X-Forwarded-For': generateRandomIP(),
  2356. }).then(function (text) {
  2357. var d = $.toDOM(text);
  2358. var t = findToken(d);
  2359. if (!t) {
  2360. var i = setTimeout(retry, 1000);
  2361. return;
  2362. }
  2363. sendRequest(t);
  2364. });
  2365. }
  2366. $.register({
  2367. rule: {
  2368. host: hostRules,
  2369. path: /^\/\w+\/url\/(.+)$/,
  2370. },
  2371. ready: function(m) {
  2372. 'use strict';
  2373. $.removeAllTimer();
  2374. $.resetCookies();
  2375. $.removeNodes('iframe');
  2376. var url = m.path[1] + window.location.search;
  2377. var match = $.searchScripts(/UrlEncoded: ([^,]+)/);
  2378. if (match && match[1] === 'true') {
  2379. url = Encode(ConvertFromHex(url));
  2380. }
  2381. $.openLink(url);
  2382. }
  2383. });
  2384. $.register({
  2385. rule: {
  2386. host: hostRules,
  2387. },
  2388. ready: function () {
  2389. 'use strict';
  2390. $.removeAllTimer();
  2391. $.resetCookies();
  2392. $.removeNodes('iframe');
  2393. if (window.location.pathname.indexOf('verify') >= 0) {
  2394. var path = window.location.pathname.replace('/verify', '');
  2395. $.openLink(path);
  2396. return;
  2397. }
  2398. var token = findToken(document);
  2399. sendRequest(token);
  2400. },
  2401. });
  2402. $.register({
  2403. rule: {
  2404. query: /^(.*)[?&]_lbGate=\d+$/,
  2405. },
  2406. start: function (m) {
  2407. 'use strict';
  2408. $.setCookie('_lbGatePassed', 'true');
  2409. $.openLink(window.location.pathname + m.query[1]);
  2410. },
  2411. });
  2412. })();
  2413.  
  2414. $.register({
  2415. rule: {
  2416. host: [
  2417. /^www\.linkdecode\.com$/,
  2418. /^www\.fastdecode\.com$/,
  2419. ],
  2420. path: /^\/$/,
  2421. query: /^\?(.+)$/,
  2422. },
  2423. ready: function (m) {
  2424. 'use strict';
  2425. $.removeNodes('iframe');
  2426. var lnk = m.query[1];
  2427. if (m.query[1].match(/^https?:\/\//)) {
  2428. $.openLink(lnk);
  2429. return;
  2430. }
  2431. var b = $('#m > .Visit_Link');
  2432. b = b.onclick.toString().match(/window\.open\(\'([^']+)\'/);
  2433. if (!b) {
  2434. throw new _.AdsBypasser('pattern changed');
  2435. }
  2436. lnk = b[1].match(/\?(https?:\/\/.*)$/);
  2437. if (lnk) {
  2438. $.openLink(lnk[1]);
  2439. return;
  2440. }
  2441. $.openLink(b[1]);
  2442. },
  2443. });
  2444.  
  2445. $.register({
  2446. rule: {
  2447. host: /^(www\.)?linkdrop\.net$/,
  2448. },
  2449. ready: function () {
  2450. 'use strict';
  2451. var matches = $.searchScripts(/\$\("a\.redirect"\)\.attr\("href","([^"]+)"\)\.text\("Continue"\);/);
  2452. if (!matches) {
  2453. return;
  2454. }
  2455. var l = matches[1];
  2456. $.openLink(l);
  2457. },
  2458. });
  2459.  
  2460. $.register({
  2461. rule: {
  2462. host: /^linkshrink\.net$/,
  2463. path: /^\/[a-zA-Z0-9]+$/,
  2464. },
  2465. ready: function () {
  2466. 'use strict';
  2467. var a = $.searchScripts(/class="bt" href="([^"]+)"/);
  2468. if (!a) {
  2469. _.warn('pattern changed');
  2470. return;
  2471. }
  2472. $.openLink(a[1]);
  2473. },
  2474. });
  2475.  
  2476. $.register({
  2477. rule: 'http://lix.in/-*',
  2478. ready: function () {
  2479. 'use strict';
  2480. var i = $.$('#ibdc');
  2481. if (i) {
  2482. return;
  2483. }
  2484. i = $.$('form');
  2485. if (i) {
  2486. i.submit();
  2487. return;
  2488. }
  2489. i = $('iframe');
  2490. $.openLink(i.src);
  2491. },
  2492. });
  2493.  
  2494. $.register({
  2495. rule: {
  2496. host: /^lnk\.in$/,
  2497. },
  2498. ready: function () {
  2499. 'use strict';
  2500. var a = $('#divRedirectText a');
  2501. $.openLink(a.innerHTML);
  2502. },
  2503. });
  2504.  
  2505. $.register({
  2506. rule: {
  2507. host: /^(rd?)lnk\.co|reducelnk\.com$/,
  2508. path: /^\/[^.]+$/,
  2509. },
  2510. ready: function () {
  2511. 'use strict';
  2512. var f = $.$('iframe#dest');
  2513. if (f) {
  2514. $.openLink(f.src);
  2515. return;
  2516. }
  2517. $.removeNodes('iframe');
  2518. var o = $.$('#urlholder');
  2519. if (o) {
  2520. $.openLink(o.value);
  2521. return;
  2522. }
  2523. o = $.$('#skipBtn');
  2524. if (o) {
  2525. o = o.querySelector('a');
  2526. $.openLink(o.href);
  2527. return;
  2528. }
  2529. o = document.title.replace(/(LNK.co|Linkbee)\s*:\s*/, '');
  2530. $.openLink(o);
  2531. },
  2532. });
  2533.  
  2534. $.register({
  2535. rule: {
  2536. host: /^lnx\.lu|url\.fm|z\.gs$/,
  2537. },
  2538. ready: function () {
  2539. 'use strict';
  2540. var a = $('#clickbtn a');
  2541. $.openLink(a.href);
  2542. },
  2543. });
  2544.  
  2545. $.register({
  2546. rule: {
  2547. host: /^(www\.)?loook\.ga$/,
  2548. path: /^\/\d+$/
  2549. },
  2550. ready: function (m) {
  2551. 'use strict';
  2552. var a = $('#download_link > a.btn');
  2553. $.openLink(a.href);
  2554. },
  2555. });
  2556.  
  2557. $.register({
  2558. rule: [
  2559. 'http://madlink.sk/',
  2560. 'http://madlink.sk/*.html',
  2561. ],
  2562. });
  2563. $.register({
  2564. rule: 'http://madlink.sk/*',
  2565. start: function (m) {
  2566. 'use strict';
  2567. $.removeNodes('iframe');
  2568. $.post('/ajax/check_redirect.php', {
  2569. link: m[1],
  2570. }).then(function (text) {
  2571. $.openLink(text);
  2572. });
  2573. },
  2574. });
  2575.  
  2576. $.register({
  2577. rule: {
  2578. host: [
  2579. /^mant[ae][pb]\.in$/,
  2580. /^st\.oploverz\.net$/,
  2581. ],
  2582. },
  2583. ready: function () {
  2584. 'use strict';
  2585. var a = $('a.redirect, a[target=_blank][rel=nofollow]');
  2586. $.openLink(a.href);
  2587. },
  2588. });
  2589.  
  2590. $.register({
  2591. rule: {
  2592. host: /^www\.mije\.net$/,
  2593. path: /^\/\w+\/(.+)$/,
  2594. },
  2595. start: function (m) {
  2596. 'use strict';
  2597. var url = atob(m.path[1]);
  2598. $.openLink(url);
  2599. },
  2600. });
  2601.  
  2602. $.register({
  2603. rule: {
  2604. host: [
  2605. /^moe\.god\.jp$/,
  2606. /^moesubs\.akurapopo\.pro$/,
  2607. /^dl\.nsfk\.in$/,
  2608. ]
  2609. },
  2610. ready: function () {
  2611. 'use strict';
  2612. var a = $('div div center a');
  2613. $.openLink(a.href);
  2614. },
  2615. });
  2616.  
  2617. $.register({
  2618. rule: {
  2619. host: /^mt0\.org$/,
  2620. path: /^\/[^\/]+\/$/,
  2621. },
  2622. ready: function () {
  2623. 'use strict';
  2624. $.removeNodes('frame[name=bottom]');
  2625. var f = $('frame[name=top]');
  2626. var i = setInterval(function () {
  2627. var a = $.$('div a', f.contentDocument);
  2628. if (!a) {
  2629. return;
  2630. }
  2631. clearInterval(i);
  2632. $.openLink(a.href)
  2633. }, 1000);
  2634. },
  2635. });
  2636.  
  2637. $.register({
  2638. rule: 'http://my-link.pro/*',
  2639. ready: function () {
  2640. 'use strict';
  2641. var i = $('iframe[scrolling=auto]');
  2642. if (i) {
  2643. $.openLink(i.src);
  2644. }
  2645. },
  2646. });
  2647.  
  2648. $.register({
  2649. rule: {
  2650. host: /^nsfw\.in$/,
  2651. },
  2652. ready: function () {
  2653. 'use strict';
  2654. var a = $('#long_url a');
  2655. $.openLink(a.href);
  2656. },
  2657. });
  2658.  
  2659. $.register({
  2660. rule: {
  2661. host: /^nutshellurl\.com$/,
  2662. },
  2663. ready: function () {
  2664. 'use strict';
  2665. var iframe = $('iframe');
  2666. $.openLink(iframe.src);
  2667. },
  2668. });
  2669.  
  2670. $.register({
  2671. rule: {
  2672. host: /^(www\.)?ohleech\.com$/,
  2673. path: /^\/dl\/$/,
  2674. },
  2675. ready: function () {
  2676. 'use strict';
  2677. $.window.startdl();
  2678. },
  2679. });
  2680.  
  2681. $.register({
  2682. rule: {
  2683. host: /^www\.oni\.vn$/,
  2684. },
  2685. ready: function () {
  2686. 'use strict';
  2687. $.removeNodes('iframe');
  2688. var data = $.searchScripts(/data:"([^"]+)"/);
  2689. if (!data) {
  2690. throw new _.AdsBypasserError('pattern changed');
  2691. }
  2692. data = data[1];
  2693. $.get('/click.html', data).then(function (url) {
  2694. $.openLink(url);
  2695. });
  2696. },
  2697. });
  2698.  
  2699. $.register({
  2700. rule: {
  2701. host: /^(www\.)?ouo\.io$/,
  2702. path: /^\/go\/\w+$/,
  2703. },
  2704. ready: function (m) {
  2705. 'use strict';
  2706. var a = $('#btn-main');
  2707. $.openLink(a.href);
  2708. },
  2709. });
  2710.  
  2711. $.register({
  2712. rule: {
  2713. host: /^oxyl\.me$/,
  2714. },
  2715. ready: function () {
  2716. 'use strict';
  2717. var l = $.$$('.links-container.result-form > a.result-a');
  2718. if (l.size() > 1) {
  2719. return;
  2720. }
  2721. $.openLink(l.at(0).href);
  2722. },
  2723. });
  2724.  
  2725. $.register({
  2726. rule: {
  2727. host: /^p\.pw$/,
  2728. },
  2729. ready: function () {
  2730. 'use strict';
  2731. $.removeNodes('iframe');
  2732. var m = $.searchScripts(/window\.location = "(.*)";/);
  2733. m = m[1];
  2734. $.openLink(m);
  2735. },
  2736. });
  2737.  
  2738. $.register({
  2739. rule: {
  2740. host: /^(www\.)?\w+\.rapeit\.net$/,
  2741. path: /^\/(go|prepair|request|collect|analyze)\/[a-f0-9]+$/,
  2742. },
  2743. ready: function (m) {
  2744. 'use strict';
  2745. var a = $('a#download_link');
  2746. $.openLink(a.href);
  2747. },
  2748. });
  2749.  
  2750. $.register({
  2751. rule: 'http://reffbux.com/refflinx/view/*',
  2752. ready: function () {
  2753. 'use strict';
  2754. $.removeNodes('iframe');
  2755. var m = $.searchScripts(/skip_this_ad_(\d+)_(\d+)/);
  2756. var id = m[1];
  2757. var share = m[2];
  2758. var location = window.location.toString();
  2759. $.post('http://reffbux.com/refflinx/register', {
  2760. id: id,
  2761. share: share,
  2762. fp: 0,
  2763. location: location,
  2764. referer: '',
  2765. }).then(function (text) {
  2766. var m = text.match(/'([^']+)'/);
  2767. if (!m) {
  2768. throw new _.AdsBypasserError('pattern changed');
  2769. }
  2770. $.openLink(m[1]);
  2771. });
  2772. },
  2773. });
  2774.  
  2775. $.register({
  2776. rule: 'http://richlink.com/app/webscr?cmd=_click&key=*',
  2777. ready: function () {
  2778. 'use strict';
  2779. var f = $('frameset');
  2780. f = f.onload.toString();
  2781. f = f.match(/url=([^&]+)/);
  2782. if (f) {
  2783. f = decodeURIComponent(f[1]);
  2784. } else {
  2785. f = $('frame[name=site]');
  2786. f = f.src;
  2787. }
  2788. $.openLink(f);
  2789. },
  2790. });
  2791.  
  2792. $.register({
  2793. rule: 'http://rijaliti.info/*.php',
  2794. ready: function () {
  2795. 'use strict';
  2796. var a = $('#main td[align="center"] a');
  2797. $.openLink(a.href);
  2798. },
  2799. });
  2800.  
  2801. $.register({
  2802. rule: {
  2803. host: /^riurl\.com$/,
  2804. path: /^\/.+/,
  2805. },
  2806. ready: function () {
  2807. 'use strict';
  2808. var s = $.$('body script');
  2809. if (s) {
  2810. s = s.innerHTML.indexOf('window.location.replace');
  2811. if (s >= 0) {
  2812. return;
  2813. }
  2814. }
  2815. $.openLink('', {
  2816. path: {
  2817. hidden: '1',
  2818. image: ' ',
  2819. },
  2820. });
  2821. },
  2822. });
  2823.  
  2824. $.register({
  2825. rule: {
  2826. host: /^preview\.rlu\.ru$/,
  2827. },
  2828. ready: function () {
  2829. 'use strict';
  2830. var a = $('#content > .long_url > a');
  2831. $.openLink(a.href);
  2832. },
  2833. });
  2834.  
  2835. $.register({
  2836. rule: {
  2837. host: /^robo\.us$/,
  2838. },
  2839. ready: function () {
  2840. 'use strict';
  2841. $.removeNodes('iframe');
  2842. var url = atob($.window.fl);
  2843. $.openLink(url);
  2844. },
  2845. });
  2846.  
  2847. $.register({
  2848. rule: {
  2849. host: /^(www\.)?sa\.ae$/,
  2850. path: /^\/\w+\/$/,
  2851. },
  2852. ready: function () {
  2853. 'use strict';
  2854. var m = $.searchScripts(/var real_link = '([^']+)';/);
  2855. $.openLink(m[1]);
  2856. },
  2857. });
  2858.  
  2859. $.register({
  2860. rule: [
  2861. {
  2862. host: /^(www\.)?safelinkconverter2\.com$/,
  2863. path: /^\/decrypt-\d\/$/,
  2864. query: /id=(\w+=+)/,
  2865. },
  2866. {
  2867. host: /^(www\.)?safelinkreview\.com$/,
  2868. query: /id=(\w+=+)/,
  2869. },
  2870. ],
  2871. start: function (m) {
  2872. 'use strict';
  2873. $.get('https://decrypt.safelinkconverter.com/index.php' + window.location.search).then(function (html) {
  2874. var m = html.match(/3;URL=([^"]+)/);
  2875. if (!m) {
  2876. _.warn('pattern changed');
  2877. return;
  2878. }
  2879. $.openLink(m[1]);
  2880. });
  2881. },
  2882. });
  2883.  
  2884. $.register({
  2885. rule: {
  2886. host: /^(www\.)?safeurl\.eu$/,
  2887. path: /\/\w+/,
  2888. },
  2889. ready: function () {
  2890. 'use strict';
  2891. var directUrl = $.searchScripts(/window\.open\("([^"]+)"\);/);
  2892. if (!directUrl) {
  2893. throw new _.AdsBypasserError('script content changed');
  2894. }
  2895. directUrl = directUrl[1];
  2896. $.openLink(directUrl);
  2897. },
  2898. });
  2899.  
  2900. $.register({
  2901. rule: {
  2902. host: [
  2903. /^segmentnext\.com$/,
  2904. /^(www\.)?videogamesblogger.com$/,
  2905. ],
  2906. path: /^\/interstitial\.html$/,
  2907. query: /return_url=([^&]+)/,
  2908. },
  2909. start: function (m) {
  2910. 'use strict';
  2911. $.openLink(decodeURIComponent(m.query[1]));
  2912. },
  2913. });
  2914.  
  2915. $.register({
  2916. rule: {
  2917. host: /^(www\.)?(apploadz\.ru|seomafia\.net)$/
  2918. },
  2919. ready: function () {
  2920. 'use strict';
  2921. $.removeNodes('iframe');
  2922. var a = $('table a');
  2923. $.openLink(a.href);
  2924. },
  2925. });
  2926.  
  2927. $.register({
  2928. rule: /http:\/\/setlinks\.us\/(p|t|d).*/,
  2929. ready: function () {
  2930. 'use strict';
  2931. var k = $.searchScripts(/window\.location='([^']+)'/);
  2932. if (k) {
  2933. $.openLink(k[1]);
  2934. return;
  2935. }
  2936. var aLinks = $.$$('div.links-container.result-form:not(.p-links-container) > span.dlinks > a');
  2937. if (aLinks.size() === 1) {
  2938. $.openLink(aLinks.at(0).href);
  2939. return;
  2940. }
  2941. k = $('img[alt=captcha]');
  2942. $.captcha(k.src, function (a) {
  2943. var b = $('#captcha');
  2944. var c = $('input[name=Submit]');
  2945. b.value = a;
  2946. c.click();
  2947. });
  2948. },
  2949. });
  2950.  
  2951. (function () {
  2952. 'use strict';
  2953. function afterGotSessionId (sessionId) {
  2954. var X_NewRelic_ID = $.searchScripts(/xpid:"([^"]+)"/);
  2955. var data = {
  2956. adSessionId: sessionId,
  2957. };
  2958. var header = {
  2959. Accept: 'application/json, text/javascript',
  2960. };
  2961. if (X_NewRelic_ID) {
  2962. header['X-NewRelic-ID'] = X_NewRelic_ID;
  2963. }
  2964. var i = setInterval(function () {
  2965. $.get('/shortest-url/end-adsession', data, header).then(function (text) {
  2966. var r = _.parseJSON(text);
  2967. if (r.status == "ok" && r.destinationUrl) {
  2968. clearInterval(i);
  2969. $.removeAllTimer();
  2970. $.openLink(r.destinationUrl);
  2971. }
  2972. });
  2973. }, 1000);
  2974. }
  2975. $.register({
  2976. rule: {
  2977. host: /^sh\.st|(dh10thbvu|u2ks|jnw0)\.com$/,
  2978. path: /^\/freeze\/.+/,
  2979. },
  2980. ready: function () {
  2981. var o = new MutationObserver(function (mutations) {
  2982. mutations.forEach(function (mutation) {
  2983. if (mutation.target.getAttribute('class').match(/active/)) {
  2984. o.disconnect();
  2985. $.openLink(mutation.target.href);
  2986. }
  2987. });
  2988. });
  2989. o.observe($('#skip_button'), {
  2990. attributes: true,
  2991. attributeFilter: ['class'],
  2992. });
  2993. },
  2994. });
  2995. $.register({
  2996. rule: {
  2997. host: /^sh\.st|(dh10thbvu|u2ks|jnw0)\.com$/,
  2998. path: /^\/[\d\w]+/,
  2999. },
  3000. ready: function () {
  3001. $.removeNodes('iframe');
  3002. var m = $.searchScripts(/sessionId: "([\d\w]+)",/);
  3003. if (m) {
  3004. afterGotSessionId(m[1]);
  3005. return;
  3006. }
  3007. var o = new MutationObserver(function (mutations) {
  3008. mutations.forEach(function (mutation) {
  3009. var m = $.searchScripts(/sessionId: "([\d\w]+)",/);
  3010. if (m) {
  3011. o.disconnect();
  3012. afterGotSessionId(m[1]);
  3013. }
  3014. });
  3015. });
  3016. o.observe(document.body, {
  3017. childList: true,
  3018. });
  3019. },
  3020. });
  3021. })();
  3022.  
  3023. $.register({
  3024. rule: {
  3025. host: /^(www\.)?shink\.in$/,
  3026. path: /^\/\w+$/,
  3027. },
  3028. ready: function () {
  3029. 'use strict';
  3030. var f = $('#skip');
  3031. if (!$.$('#captcha')) {
  3032. f.submit();
  3033. return;
  3034. }
  3035. var envio = $("#envio");
  3036. envio.disabled = false;
  3037. envio.style.visibility= "hidden";
  3038. envio.style.display='none';
  3039. var envio2 = $("#envio2");
  3040. envio2.style.visibility= "visible";
  3041. envio2.style.display='block';
  3042. $.window.$("#myModal").reveal();
  3043. },
  3044. });
  3045.  
  3046. $.register({
  3047. rule: {
  3048. host: [
  3049. /^(www\.)?shortenurl\.tk$/,
  3050. /^(www\.)?pengaman\.link$/,
  3051. ],
  3052. path: /^\/\w+$/,
  3053. },
  3054. ready: function (m) {
  3055. 'use strict';
  3056. var l = $('a.btn-block.redirect');
  3057. $.openLink(l.href);
  3058. },
  3059. });
  3060.  
  3061. $.register({
  3062. rule: {
  3063. host: /^(www\.)?shorti\.ga$/,
  3064. path: [
  3065. /^\/\w+$/,
  3066. /^\/url_redirector\.html$/,
  3067. ],
  3068. },
  3069. ready: function () {
  3070. 'use strict';
  3071. var f = $.$$('frame');
  3072. var fl = f.find(function(value, key, self) {
  3073. if (value.getAttribute('class')) {
  3074. return _.none;
  3075. }
  3076. return 'Target frame found';
  3077. });
  3078. $.openLink(fl.value.src);
  3079. },
  3080. });
  3081.  
  3082. $.register({
  3083. rule: {
  3084. host: /^(www\.)?similarsites\.com$/,
  3085. path: /^\/goto\/([^?]+)/
  3086. },
  3087. start: function (m) {
  3088. 'use strict';
  3089. var l = m.path[1];
  3090. if (!/^https?:\/\//.test(l)) {
  3091. l = 'http://' + l;
  3092. }
  3093. $.openLink(l);
  3094. },
  3095. });
  3096.  
  3097. $.register({
  3098. rule: {
  3099. host: /^(www\.)?safelinkair\.com$/,
  3100. path: /^\/code$/,
  3101. query: /(?:\?|&)link=([a-zA-Z0-9=]+)(?:$|&)/,
  3102. },
  3103. start: function (m) {
  3104. 'use strict';
  3105. var l = atob(m.query[1])
  3106. $.openLink(l);
  3107. },
  3108. });
  3109.  
  3110. $.register({
  3111. rule: {
  3112. host: /^stash-coins\.com$/,
  3113. },
  3114. start: function () {
  3115. 'use strict';
  3116. var url = window.location.toString();
  3117. var i = url.lastIndexOf('http');
  3118. url = url.substr(i);
  3119. $.openLink(url);
  3120. },
  3121. });
  3122.  
  3123. $.register({
  3124. rule: {
  3125. host: /^(www\.)?supercheats\.com$/,
  3126. path: /^\/interstitial\.html$/,
  3127. query: /(?:\?|&)oldurl=([^&]+)(?:$|&)/,
  3128. },
  3129. start: function (m) {
  3130. 'use strict';
  3131. $.openLink(m.query[1]);
  3132. },
  3133. });
  3134.  
  3135. $.register({
  3136. rule: [
  3137. {
  3138. host: /^(www\.)?sylnk\.net$/,
  3139. query: /link=([^&]+)/,
  3140. },
  3141. {
  3142. host: /^(www\.)?compul\.in$/,
  3143. path: /^\/n\.php$/,
  3144. query: /v=([^&]+)/,
  3145. },
  3146. ],
  3147. start: function (m) {
  3148. 'use strict';
  3149. var rawLink = atob(m.query[1]);
  3150. $.openLink(rawLink);
  3151. },
  3152. });
  3153.  
  3154. $.register({
  3155. rule: {
  3156. host: /^thinfi\.com$/,
  3157. },
  3158. ready: function () {
  3159. 'use strict';
  3160. var a = $('div p a');
  3161. $.openLink(a.href);
  3162. },
  3163. });
  3164.  
  3165. $.register({
  3166. rule: {
  3167. host: /^tinyarrows\.com$/,
  3168. path: /^\/preview\.php$/,
  3169. query: /^\?page=([^&]+)/,
  3170. },
  3171. start: function (m) {
  3172. 'use strict';
  3173. $.openLink(decodeURIComponent(m.query[1]));
  3174. },
  3175. });
  3176.  
  3177. $.register({
  3178. rule: {
  3179. host: /^(www\.)?totaldebrid\.org$/,
  3180. path:/\/l\/(l\.php)?$/,
  3181. query: /\?ads=([a-zA-Z0-9=]+)$/,
  3182. },
  3183. start: function (m) {
  3184. 'use strict';
  3185. var l = atob(m.query[1]);
  3186. $.openLink(l);
  3187. },
  3188. });
  3189.  
  3190. $.register({
  3191. rule: {
  3192. host: /^(www\.)?typ\.me$/,
  3193. },
  3194. ready: function (m) {
  3195. 'use strict';
  3196. var a = $('#skipAdBtn');
  3197. $.openLink(a.href);
  3198. },
  3199. });
  3200.  
  3201. $.register({
  3202. rule: {
  3203. host: /^(www\.)?ultshare\.com$/,
  3204. path: /^\/(?:(?:\d-)?(\d+)|index\.php)$/,
  3205. query: /^(?:\?a=\d&c=(\d+))?$/
  3206. },
  3207. start: function (m) {
  3208. 'use strict';
  3209. var linkId = m.path[1]?m.path[1]:m.query[1];
  3210. var directLink = '/3-' + linkId;
  3211. $.openLink(directLink);
  3212. },
  3213. });
  3214.  
  3215. $.register({
  3216. rule: {
  3217. host: /^unfake\.it$/,
  3218. },
  3219. ready: function () {
  3220. 'use strict';
  3221. var frame = $('frame');
  3222. var i = frame.src.lastIndexOf('http://');
  3223. $.openLink(frame.src.substr(i));
  3224. },
  3225. });
  3226.  
  3227. $.register({
  3228. rule: {
  3229. host: /^(www\.)?(upan|gxp)\.so$/,
  3230. path: /^\/\w+$/,
  3231. },
  3232. ready: function () {
  3233. 'use strict';
  3234. var a = $('table.td_line a[onclick="down_process_s();"]');
  3235. $.openLink(a.href);
  3236. },
  3237. });
  3238.  
  3239. $.register({
  3240. rule: {
  3241. host: /^url\.ie$/,
  3242. },
  3243. ready: function () {
  3244. 'use strict';
  3245. var a = $('a[title="Link to original URL"]');
  3246. $.openLink(a.href);
  3247. },
  3248. });
  3249.  
  3250. $.register({
  3251. rule: {
  3252. host: /urlcash\.(com|net|org)|(bat5|detonating|celebclk|eightteen|smilinglinks|peekatmygirlfriend|pornyhost|clb1|urlgalleries)\.com|looble\.net|xxxs\.org$/,
  3253. },
  3254. ready: function () {
  3255. 'use strict';
  3256. if ($.window && $.window.linkDestUrl) {
  3257. $.openLink($.window.linkDestUrl);
  3258. return;
  3259. }
  3260. var matches = document.body.innerHTML.match(/linkDestUrl = '(.+)'/);
  3261. if (matches) {
  3262. $.openLink(matches[1]);
  3263. return;
  3264. }
  3265. },
  3266. });
  3267.  
  3268. $.register({
  3269. rule: {
  3270. host: /^urlinn\.com$/,
  3271. },
  3272. ready: function () {
  3273. 'use strict';
  3274. var m = $('META[HTTP-EQUIV=refresh]').getAttribute('CONTENT').match(/url='([^']+)'/);
  3275. if (m) {
  3276. $.openLink(m[1]);
  3277. }
  3278. },
  3279. });
  3280.  
  3281. $.register({
  3282. rule: {
  3283. host: /^urlms\.com$/,
  3284. },
  3285. ready: function () {
  3286. 'use strict';
  3287. var iframe = $('#content');
  3288. $.openLink(iframe.src);
  3289. },
  3290. });
  3291.  
  3292. $.register({
  3293. rule: {
  3294. host: /^(www\.)?urlv2\.com$/,
  3295. },
  3296. ready: function (m) {
  3297. 'use strict';
  3298. if (window.location.pathname.indexOf('locked') >= 0) {
  3299. var path = window.location.pathname.replace('/locked', '');
  3300. $.openLink(path);
  3301. return;
  3302. }
  3303. var m = $.searchScripts(/jeton=([\w]+)/);
  3304. var l = 'http://urlv2.com/algo.php?action=passer&px=0&so=1&jeton=' + m[1];
  3305. window.setTimeout(function() {$.openLink(l)}, 5000);
  3306. },
  3307. });
  3308.  
  3309. $.register({
  3310. rule: {
  3311. host: /^(www\.)?victly\.com$/,
  3312. path: /^\/\w+$/,
  3313. },
  3314. start: function () {
  3315. 'use strict';
  3316. $.post(document.location.href, {
  3317. hidden: '',
  3318. image: 'Skip+Ads',
  3319. }).then(function (text) {
  3320. var m = text.match(/window\.location\.replace\('([^']+)'\)/);
  3321. $.openLink(m[1]);
  3322. });
  3323. },
  3324. });
  3325.  
  3326. $.register({
  3327. rule: {
  3328. host: /^www\.viidii\.info$/,
  3329. },
  3330. ready: function () {
  3331. 'use strict';
  3332. var o = $('#directlink');
  3333. $.openLink(o.href);
  3334. },
  3335. });
  3336.  
  3337. $.register({
  3338. rule: {
  3339. host: /^(www\.)?vir\.al$/,
  3340. },
  3341. ready: function () {
  3342. 'use strict';
  3343. var m = $.searchScripts(/var target_url = '([^']+)';/);
  3344. if (!m) {
  3345. throw new _.AdsBypasserError('site changed');
  3346. }
  3347. $.openLink(m[1]);
  3348. },
  3349. });
  3350.  
  3351. $.register({
  3352. rule: {
  3353. host: /^(www\.)?wzzq\.me$/,
  3354. },
  3355. ready: function () {
  3356. 'use strict';
  3357. try {
  3358. var l = $('#img_loading_table2 div.wz_img_hit a[target=_blank]').href;
  3359. $.openLink(l);
  3360. } catch (e) {
  3361. }
  3362. },
  3363. });
  3364.  
  3365. $.register({
  3366. rule: {
  3367. host: /^xlink.me$/
  3368. },
  3369. ready: function () {
  3370. 'use strict';
  3371. var a = $('#main_form > center > a');
  3372. if (!a) {return;}
  3373. $.openLink(a.href);
  3374. },
  3375. });
  3376.  
  3377. $.register({
  3378. rule: 'http://yep.it/preview.php?p=*',
  3379. ready: function () {
  3380. 'use strict';
  3381. var link = $('font[color="grey"]').innerHTML;
  3382. $.openLink(link);
  3383. },
  3384. });
  3385.  
  3386. $.register({
  3387. rule: 'http://www.yooclick.com/l/*',
  3388. ready: function () {
  3389. 'use strict';
  3390. $.removeNodes('iframe');
  3391. var uniq = $.window.uniq || $.window.uniqi;
  3392. if (!uniq) {return;}
  3393. var path = window.location.pathname;
  3394. var url = _.T('{0}?ajax=true&adblock=false&old=false&framed=false&uniq={1}')(path, uniq);
  3395. var getURL = function() {
  3396. $.get(url).then(function (text) {
  3397. var goodURL = /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(text);
  3398. if (goodURL) {
  3399. $.openLink(text);
  3400. } else {
  3401. setTimeout(getURL, 500);
  3402. }
  3403. });
  3404. }
  3405. getURL();
  3406. },
  3407. });
  3408.  
  3409. $.register({
  3410. rule: 'http://zo.mu/redirector/process?link=*',
  3411. ready: function () {
  3412. 'use strict';
  3413. $.removeNodes('iframe');
  3414. window.location.reload();
  3415. },
  3416. });
  3417.  
  3418. $.register({
  3419. rule: {
  3420. host: /^zzz\.gl$/,
  3421. },
  3422. ready: function () {
  3423. 'use strict';
  3424. var m = $.searchScripts(/var domainurl = '([^']+)';/);
  3425. if (!m) {
  3426. throw new _.AdsBypasserError('site changed');
  3427. }
  3428. $.openLink(m[1]);
  3429. },
  3430. });
  3431.  
  3432. $.register({
  3433. rule: {
  3434. host: /^www\.4shared\.com$/,
  3435. path: /^\/(mp3|get|rar|zip|file|android|software|program)\//,
  3436. },
  3437. ready: function () {
  3438. 'use strict';
  3439. $.get('http://www.4server.info/find.php', {
  3440. data: window.location.href,
  3441. }).then(function (data) {
  3442. var d = $.toDOM(data);
  3443. var c = $('meta[http-equiv=refresh]', d);
  3444. var b = c.content.match(/URL=(.+)$/);
  3445. var a = b[1];
  3446. $.openLink(a);
  3447. });
  3448. },
  3449. });
  3450.  
  3451. $.register({
  3452. rule: {
  3453. host: /^(www\.)?arab\.sh$/,
  3454. path: /^\/\w+$/,
  3455. },
  3456. ready: function () {
  3457. 'use strict';
  3458. var f = $('form[name=F1]');
  3459. setTimeout(function() {
  3460. f.submit();
  3461. }, 20000);
  3462. },
  3463. });
  3464.  
  3465. $.register({
  3466. rule: {
  3467. host: /^(www\.)?coolrom\.com$/,
  3468. path: /^\/dlpop\.php$/,
  3469. },
  3470. ready: function () {
  3471. 'use strict';
  3472. var matches = $.searchScripts(/<form method="POST" action="([^"]+)">/);
  3473. $.openLink(matches[1]);
  3474. },
  3475. });
  3476.  
  3477. (function() {
  3478. 'use strict';
  3479. $.register({
  3480. rule: {
  3481. host: /^(www\.)?dl-protect\.com$/,
  3482. path: /\/[A-Z0-9]+/,
  3483. },
  3484. ready: function () {
  3485. if ($.$('#captcha')) {
  3486. return;
  3487. }
  3488. var f = $.$('form[name=ccerure]');
  3489. if (f) {
  3490. var observer = new MutationObserver(function (mutations) {
  3491. var iIn = $('input[id=in]');
  3492. for (var i = 0; i < mutations.length; i++) {
  3493. if (mutations[i].target.value && mutations[i].attributeName === 'value') {
  3494. observer.disconnect();
  3495. iIn.value = "Tracking too much hurts users' privacy";
  3496. if (!canFastRedirect()) {
  3497. return;
  3498. }
  3499. setTimeout(function() {
  3500. f.submit();
  3501. }, 600);
  3502. break;
  3503. }
  3504. }
  3505. });
  3506. var iIn = $('input[id=in]');
  3507. if (iIn.value) {
  3508. setTimeout(function() {
  3509. f.submit();
  3510. }, 600);
  3511. } else {
  3512. observer.observe(iIn, {
  3513. attributes: true,
  3514. });
  3515. }
  3516. return;
  3517. }
  3518. var l = $.$$('#slinks > a');
  3519. if (l.size() === 1) {
  3520. $.openLink(l.at(0).href);
  3521. }
  3522. },
  3523. });
  3524. function canFastRedirect () {
  3525. return !$.$('form[name=ccerure]').onsubmit && !$.$('form[name=ccerure] input[name=pwd]');
  3526. }
  3527. })();
  3528.  
  3529. $.register({
  3530. rule: {
  3531. host: /^(www\.)?embedupload\.com$/,
  3532. path: /^\/$/,
  3533. query: /^\?\w{2}=\w+$/
  3534. },
  3535. ready: function () {
  3536. 'use strict';
  3537. var downloadPage = $('.categories a[target=_blank]');
  3538. $.openLink(downloadPage);
  3539. },
  3540. });
  3541.  
  3542. $.register({
  3543. rule: {
  3544. host: /^www\.fileproject\.com\.br$/,
  3545. path: /^\/files\/+/,
  3546. },
  3547. ready: function () {
  3548. 'use strict';
  3549. var m = $.searchScripts(/<a id="down" href="([^"]+)">/);
  3550. $.openLink(m[1]);
  3551. },
  3552. });
  3553.  
  3554. $.register({
  3555. rule: {
  3556. host: /^(www\.)?(firedrive|putlocker)\.com$/,
  3557. path: /^\/file\/[0-9A-F]+$/,
  3558. },
  3559. ready: function () {
  3560. 'use strict';
  3561. var c = $('#confirm_form');
  3562. c.submit();
  3563. },
  3564. });
  3565.  
  3566. $.register({
  3567. rule: {
  3568. host: /^(www\.)?jheberg\.net$/,
  3569. path: /^\/captcha\//,
  3570. },
  3571. ready: function () {
  3572. 'use strict';
  3573. $('.dl-button').click();
  3574. },
  3575. });
  3576. $.register({
  3577. rule: {
  3578. host: /^(www\.)?jheberg\.net$/,
  3579. path: /^\/redirect\//,
  3580. },
  3581. ready: function () {
  3582. 'use strict';
  3583. $.removeAllTimer();
  3584. var matches = $.searchScripts(/'slug':\s*'([^']+)',\s*'hoster':\s*'([^']+)'/);
  3585. var slug = matches[1];
  3586. var hoster = matches[2];
  3587. $.post('/get/link/', {
  3588. 'slug': slug,
  3589. 'hoster': hoster
  3590. }).then(function(response) {
  3591. var respJSON = _.parseJSON(response);
  3592. $.openLink(respJSON.url);
  3593. });
  3594. },
  3595. });
  3596.  
  3597. $.register({
  3598. rule: {
  3599. host: /^(www\.)?larashare\.com$/,
  3600. path: /^\/do\.php$/,
  3601. query: /id=\d+/,
  3602. },
  3603. start: function () {
  3604. 'use strict';
  3605. $.openLink(document.location.href.replace('id=','down='));
  3606. },
  3607. });
  3608.  
  3609. $.register({
  3610. rule: {
  3611. host: /^(www\.)?maxmirror\.com$/,
  3612. path: /^\/redirect\//,
  3613. },
  3614. ready: function () {
  3615. 'use strict';
  3616. var l = $('#download_url > a');
  3617. $.openLink(l.href);
  3618. },
  3619. });
  3620.  
  3621. $.register({
  3622. rule: {
  3623. host: /^(www\.)?mirrorcreator\.com$/,
  3624. path: /^\/showlink\.php$/,
  3625. },
  3626. ready: function () {
  3627. 'use strict';
  3628. var a = $.$('#redirectlink a');
  3629. if (a) {
  3630. $.openLink(a.href);
  3631. return;
  3632. }
  3633. a = $('#redirectlink > div.redirecturl');
  3634. a = a.innerHTML;
  3635. if (!a.match(/^http/)) {
  3636. throw new _.AdsBypasserError('not a valid URL');
  3637. }
  3638. $.openLink(a);
  3639. },
  3640. });
  3641.  
  3642. $.register({
  3643. rule: {
  3644. host: /^www.mirrorupload.net$/,
  3645. },
  3646. ready: function () {
  3647. 'use strict';
  3648. var accessForm = $('form[name=form_upload]');
  3649. var accessInput = document.createElement('input');
  3650. accessInput.type = 'hidden';
  3651. accessInput.name = 'access';
  3652. accessInput.value = Math.random();
  3653. accessForm.appendChild(accessInput);
  3654. accessForm.submit();
  3655. },
  3656. });
  3657.  
  3658. $.register({
  3659. rule: {
  3660. host: /^mylinkgen\.com$/,
  3661. path: /^\/p\/(.+)$/,
  3662. },
  3663. start: function (m) {
  3664. 'use strict';
  3665. $.openLink('/g/' + m.path[1]);
  3666. },
  3667. });
  3668. $.register({
  3669. rule: {
  3670. host: /^mylinkgen\.com$/,
  3671. path: /^\/g\//,
  3672. },
  3673. ready: function () {
  3674. 'use strict';
  3675. var a = $('#main-content a.btn.btn-default');
  3676. $.openLink(a.href);
  3677. },
  3678. });
  3679.  
  3680. $.register({
  3681. rule: {
  3682. host: /^(www\.)?upmirror\.info$/,
  3683. },
  3684. ready: function () {
  3685. 'use strict';
  3686. $.setCookie('user', 'ppp');
  3687. if ($.$('#countDownText')) {
  3688. $.openLink(document.location.toString());
  3689. }
  3690. },
  3691. });
  3692.  
  3693. $.register({
  3694. rule: {
  3695. host: /^(www\.)?vidto\.me$/,
  3696. },
  3697. ready: function () {
  3698. 'use strict';
  3699. var f = $('#btn_download').form;
  3700. setTimeout(function() {
  3701. f.submit();
  3702. }, 6000);
  3703. },
  3704. });
  3705.  
  3706. (function () {
  3707. 'use strict';
  3708. var sUrl = '(\\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])';
  3709. function isLink (text) {
  3710. var rUrl = new RegExp(_.T('^{0}$')(sUrl), 'i');
  3711. return rUrl.test(text);
  3712. }
  3713. function linkify (text) {
  3714. var rUrl = new RegExp(sUrl, 'ig');
  3715. return text.replace(rUrl, function(match) {
  3716. return _.T("<a href='{0}'>{0}</a>")(match);
  3717. });
  3718. }
  3719. $.register({
  3720. rule: {
  3721. host: /^(www\.)?([a-zA-Z0-9]+\.)?binbox\.io$/,
  3722. path: /\/([a-zA-Z0-9]+)/,
  3723. hash: /#([a-zA-Z0-9]+)/,
  3724. },
  3725. ready: function (m) {
  3726. var sjcl = $.window.sjcl;
  3727. var paste_id = m.path[1];
  3728. var paste_salt = m.hash[1];
  3729. var API_URL = _.T('https://binbox.io/{0}.json')(paste_id);
  3730. $.get(API_URL, false, {
  3731. Origin: _.none,
  3732. Referer: _.none,
  3733. Cookie: 'referrer=nope',
  3734. 'X-Requested-With': _.none,
  3735. }).then(function (pasteInfo) {
  3736. pasteInfo = _.parseJSON(pasteInfo);
  3737. if (!pasteInfo.ok) {
  3738. throw new _.AdsBypasserError("error when getting paste information");
  3739. }
  3740. var raw_paste = sjcl.decrypt(paste_salt, pasteInfo.paste.text);
  3741. if (isLink(raw_paste)) {
  3742. $.openLink(raw_paste);
  3743. return;
  3744. }
  3745. var elm = document.createElement('pre');
  3746. elm.id = 'paste-text';
  3747. elm.innerHTML = linkify(raw_paste);
  3748. var frame = $('#paste-frame, #captcha-page');
  3749. frame.parentNode.replaceChild(elm, frame);
  3750. });
  3751. },
  3752. });
  3753. })();
  3754.  
  3755. (function (context, factory) {
  3756. if (typeof module === 'object' && typeof module.exports === 'object') {
  3757. module.exports = function (context, GM) {
  3758. var _ = require('lodash');
  3759. var core = require('./core.js');
  3760. var misc = require('./misc.js');
  3761. var dispatcher = require('./dispatcher.js');
  3762. var modules = [misc, dispatcher].map(function (v) {
  3763. return v.call(null, context, GM);
  3764. });
  3765. var $ = _.assign.apply(_, modules);
  3766. return factory(context, GM, core, $);
  3767. };
  3768. } else {
  3769. factory(context, {
  3770. openInTab: GM_openInTab,
  3771. registerMenuCommand: GM_registerMenuCommand,
  3772. }, context._, context.$);
  3773. }
  3774. }(this, function (context, GM, _, $) {
  3775. 'use strict';
  3776. var window = context.window;
  3777. var document = window.document;
  3778. var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
  3779. function disableWindowOpen () {
  3780. $.window.open = _.nop;
  3781. }
  3782. function disableLeavePrompt (element) {
  3783. if (!element) {
  3784. return;
  3785. }
  3786. var seal = {
  3787. set: function () {
  3788. _.info('blocked onbeforeunload');
  3789. },
  3790. };
  3791. element.onbeforeunload = undefined;
  3792. if (isSafari) {
  3793. element.__defineSetter__('onbeforeunload', seal.set);
  3794. } else {
  3795. $.window.Object.defineProperty(element, 'onbeforeunload', {
  3796. configurable: false,
  3797. enumerable: false,
  3798. get: undefined,
  3799. set: seal.set,
  3800. });
  3801. }
  3802. var oael = element.addEventListener;
  3803. var nael = function (type) {
  3804. if (type === 'beforeunload') {
  3805. _.info('blocked addEventListener onbeforeunload');
  3806. return;
  3807. }
  3808. return oael.apply(this, arguments);
  3809. };
  3810. element.addEventListener = nael;
  3811. }
  3812. function changeTitle () {
  3813. document.title += ' - AdsBypasser';
  3814. }
  3815. function beforeDOMReady (handler) {
  3816. _.info('working on\n%s \nwith\n%o', window.location.toString(), $.config);
  3817. disableLeavePrompt($.window);
  3818. disableWindowOpen();
  3819. handler.start();
  3820. }
  3821. function afterDOMReady (handler) {
  3822. disableLeavePrompt($.window.document.body);
  3823. changeTitle();
  3824. handler.ready();
  3825. }
  3826. function waitDOM () {
  3827. return _.D(function (resolve, reject) {
  3828. if (document.readyState !== 'loading') {
  3829. resolve();
  3830. return;
  3831. }
  3832. document.addEventListener('DOMContentLoaded', function () {
  3833. resolve();
  3834. });
  3835. });
  3836. }
  3837. $._main = function () {
  3838. var findHandler = $._findHandler;
  3839. delete $._main;
  3840. delete $._findHandler;
  3841. if (window.top !== window.self) {
  3842. return;
  3843. }
  3844. GM.registerMenuCommand('AdsBypasser - Configure', function () {
  3845. GM.openInTab('https://adsbypasser.github.io/configure.html');
  3846. });
  3847. var handler = findHandler(true);
  3848. if (handler) {
  3849. if ($.config.logLevel <= 0) {
  3850. _._quiet = true;
  3851. }
  3852. beforeDOMReady(handler);
  3853. waitDOM().then(function () {
  3854. afterDOMReady(handler);
  3855. });
  3856. return;
  3857. }
  3858. if ($.config.logLevel < 2) {
  3859. _._quiet = true;
  3860. }
  3861. _.info('does not match location on `%s`, will try HTML content', window.location.toString());
  3862. waitDOM().then(function () {
  3863. handler = findHandler(false);
  3864. if (!handler) {
  3865. _.info('does not match HTML content on `%s`', window.location.toString());
  3866. return;
  3867. }
  3868. beforeDOMReady(handler);
  3869. afterDOMReady(handler);
  3870. });
  3871. };
  3872. return $;
  3873. }));
  3874. $._main();