Fluffy_Stick_JV

Utiliser les stickers intégrés JVC rapidement.

当前为 2025-03-09 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Fluffy_Stick_JV
  3. // @author ImThatGuy, Atlantis
  4. // @description Utiliser les stickers intégrés JVC rapidement.
  5. // @namespace Fluffy_Stick_JV
  6. // @match *://www.jeuxvideo.com/messages-prives/nouveau.php*
  7. // @match *://www.jeuxvideo.com/messages-prives/message.php*
  8. // @match *://www.jeuxvideo.com/forums/42-*
  9. // @match *://www.jeuxvideo.com/forums/1-*
  10. // @match *://www.jeuxvideo.com/forums/0-*
  11. // @match *://www.jeuxvideo.com/recherche/forums/0-*
  12. // @require https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js
  13. // @require https://cdnjs.cloudflare.com/ajax/libs/tipso/1.0.8/tipso.min.js
  14. // @grant GM_addStyle
  15. // @version 0.4.3.v385
  16. // @icon https://image.jeuxvideo.com/stickers/p/1jnh
  17. // @license MIT
  18. // ==/UserScript==
  19.  
  20. /* icon https://image.noelshack.com/fichiers-xs/2023/12/6/1679774117-1jnh.png */
  21.  
  22. /*
  23. StickersJVC.
  24. Code de base par ImThatGuy (2018-2020)
  25.  
  26. */
  27.  
  28.  
  29. /*jshint multistr: true */
  30. (function() {
  31. 'use strict';
  32.  
  33. // IMPORT CSS
  34. $('head').append('<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/tipso/1.0.8/tipso.min.css"/>');
  35.  
  36. // Current div
  37. var currentDiv = localStorage.getItem('stickersjvc-div');
  38. //valeur_a_check
  39. const valeursachecker = ['hap', 'noel', 'autres', 'brid', 'rex', 'fluffy', 'grukk','lamma', 'bud', 'euro', 'larspon'];
  40. currentDiv = valeursachecker.includes(currentDiv) ? currentDiv : 'brid';
  41. // LISTS
  42. var _stickers_hap = [
  43. "https://image.jeuxvideo.com/stickers/p/1kki",
  44. "https://image.jeuxvideo.com/stickers/p/1kkn",
  45. "https://image.jeuxvideo.com/stickers/p/1lmk",
  46. "https://image.jeuxvideo.com/stickers/p/1kkl",
  47. "https://image.jeuxvideo.com/stickers/p/1lmh",
  48. "https://image.jeuxvideo.com/stickers/p/1ljr",
  49. "https://image.jeuxvideo.com/stickers/p/1kkh",
  50. "https://image.jeuxvideo.com/stickers/p/1kkk",
  51. "https://image.jeuxvideo.com/stickers/p/1lmn",
  52. "https://image.jeuxvideo.com/stickers/p/1ljm",
  53. "https://image.jeuxvideo.com/stickers/p/1ljl",
  54. "https://image.jeuxvideo.com/stickers/p/1kkm",
  55. "https://image.jeuxvideo.com/stickers/p/1rzw",
  56. "https://image.jeuxvideo.com/stickers/p/1kkj",
  57. "https://image.jeuxvideo.com/stickers/p/1kkg",
  58. "https://image.jeuxvideo.com/stickers/p/1ljq"
  59. ];
  60. var _stickers_noel = [
  61. "https://image.jeuxvideo.com/stickers/p/1kkr",
  62. "https://image.jeuxvideo.com/stickers/p/1kko",
  63. "https://image.jeuxvideo.com/stickers/p/1kkp",
  64. "https://image.jeuxvideo.com/stickers/p/1ljj",
  65. "https://image.jeuxvideo.com/stickers/p/1ljn",
  66. "https://image.jeuxvideo.com/stickers/p/1kkq",
  67. "https://image.jeuxvideo.com/stickers/p/1kks",
  68. "https://image.jeuxvideo.com/stickers/p/1ljo",
  69. "https://image.jeuxvideo.com/stickers/p/1ljp",
  70. "https://image.jeuxvideo.com/stickers/p/1kkt",
  71. "https://image.jeuxvideo.com/stickers/p/1lmm",
  72. "https://image.jeuxvideo.com/stickers/p/1kku",
  73. "https://image.jeuxvideo.com/stickers/p/1kkv",
  74. "https://image.jeuxvideo.com/stickers/p/1mqw",
  75. "https://image.jeuxvideo.com/stickers/p/1rzs",
  76. "https://image.jeuxvideo.com/stickers/p/1mqz",
  77. "https://image.jeuxvideo.com/stickers/p/1nu9",
  78. "https://image.jeuxvideo.com/stickers/p/1kkg"
  79. ];
  80. var _stickers_autres = [
  81. "https://image.jeuxvideo.com/stickers/p/1lmj",
  82. "https://image.jeuxvideo.com/stickers/p/1nua",
  83. "https://image.jeuxvideo.com/stickers/p/1nub",
  84. "https://image.jeuxvideo.com/stickers/p/1mqv",
  85. "https://image.jeuxvideo.com/stickers/p/1nu7",
  86. "https://image.jeuxvideo.com/stickers/p/1lmi",
  87. "https://image.jeuxvideo.com/stickers/p/1lml",
  88. "https://image.jeuxvideo.com/stickers/p/1lmo",
  89. "https://image.jeuxvideo.com/stickers/p/1lmp",
  90. "https://image.jeuxvideo.com/stickers/p/1mqx",
  91. "https://image.jeuxvideo.com/stickers/p/1mqy",
  92. "https://image.jeuxvideo.com/stickers/p/1mr0",
  93. "https://image.jeuxvideo.com/stickers/p/1mr1",
  94. "https://image.jeuxvideo.com/stickers/p/1nu6",
  95. "https://image.jeuxvideo.com/stickers/p/1nu8"
  96. ];
  97. var _stickers_brid = [
  98. "https://image.jeuxvideo.com/stickers/p/1jnd",
  99. "https://image.jeuxvideo.com/stickers/p/1jnc",
  100. "https://image.jeuxvideo.com/stickers/p/1jne",
  101. "https://image.jeuxvideo.com/stickers/p/1jnf",
  102. "https://image.jeuxvideo.com/stickers/p/1jng",
  103. "https://image.jeuxvideo.com/stickers/p/1jnh",
  104. "https://image.jeuxvideo.com/stickers/p/1jni",
  105. "https://image.jeuxvideo.com/stickers/p/1jnj"
  106. ];
  107. var _stickers_rex = [
  108. "https://image.jeuxvideo.com/stickers/p/1lm9",
  109. "https://image.jeuxvideo.com/stickers/p/1lma",
  110. "https://image.jeuxvideo.com/stickers/p/1lmb",
  111. "https://image.jeuxvideo.com/stickers/p/1lmc",
  112. "https://image.jeuxvideo.com/stickers/p/1lmd",
  113. "https://image.jeuxvideo.com/stickers/p/1lme",
  114. "https://image.jeuxvideo.com/stickers/p/1lmf",
  115. "https://image.jeuxvideo.com/stickers/p/1lmg"
  116. ];
  117. var _stickers_fluffy = [
  118. "https://image.jeuxvideo.com/stickers/p/1kl8",
  119. "https://image.jeuxvideo.com/stickers/p/1klb",
  120. "https://image.jeuxvideo.com/stickers/p/1kl9",
  121. "https://image.jeuxvideo.com/stickers/p/1kl7",
  122. "https://image.jeuxvideo.com/stickers/p/1kl5",
  123. "https://image.jeuxvideo.com/stickers/p/1kl6",
  124. "https://image.jeuxvideo.com/stickers/p/1kl2",
  125. "https://image.jeuxvideo.com/stickers/p/1kl1",
  126. "https://image.jeuxvideo.com/stickers/p/1kl3",
  127. "https://image.jeuxvideo.com/stickers/p/1kky",
  128. "https://image.jeuxvideo.com/stickers/p/1kkz",
  129. "https://image.jeuxvideo.com/stickers/p/1kla",
  130. "https://image.jeuxvideo.com/stickers/p/1kl4",
  131. "https://image.jeuxvideo.com/stickers/p/1kl0"
  132. ];
  133. var _stickers_grukk = [
  134. "https://image.jeuxvideo.com/stickers/p/1lgg",
  135. "https://image.jeuxvideo.com/stickers/p/1lgb",
  136. "https://image.jeuxvideo.com/stickers/p/1lga",
  137. "https://image.jeuxvideo.com/stickers/p/1lgc",
  138. "https://image.jeuxvideo.com/stickers/p/1lgd",
  139. "https://image.jeuxvideo.com/stickers/p/1lge",
  140. "https://image.jeuxvideo.com/stickers/p/1lgf",
  141. "https://image.jeuxvideo.com/stickers/p/1lgh"
  142. ];
  143. var _stickers_lamma = [
  144. "https://image.jeuxvideo.com/stickers/p/1kgx",
  145. "https://image.jeuxvideo.com/stickers/p/1kgv",
  146. "https://image.jeuxvideo.com/stickers/p/1kgw",
  147. "https://image.jeuxvideo.com/stickers/p/1kgy",
  148. "https://image.jeuxvideo.com/stickers/p/1kgu",
  149. "https://image.jeuxvideo.com/stickers/p/1kh0",
  150. "https://image.jeuxvideo.com/stickers/p/1kh1",
  151. "https://image.jeuxvideo.com/stickers/p/1kgz"
  152. ];
  153. var _stickers_bud = [
  154. "https://image.jeuxvideo.com/stickers/p/zuc",
  155. "https://image.jeuxvideo.com/stickers/p/zu2",
  156. "https://image.jeuxvideo.com/stickers/p/zu6",
  157. "https://image.jeuxvideo.com/stickers/p/zu7",
  158. "https://image.jeuxvideo.com/stickers/p/zu8",
  159. "https://image.jeuxvideo.com/stickers/p/zu9",
  160. "https://image.jeuxvideo.com/stickers/p/zua",
  161. "https://image.jeuxvideo.com/stickers/p/zub",
  162. "https://image.jeuxvideo.com/stickers/p/1f88",
  163. "https://image.jeuxvideo.com/stickers/p/1f89",
  164. "https://image.jeuxvideo.com/stickers/p/1f8a",
  165. "https://image.jeuxvideo.com/stickers/p/1f8b",
  166. "https://image.jeuxvideo.com/stickers/p/1f8d",
  167. "https://image.jeuxvideo.com/stickers/p/1f8e",
  168. "https://image.jeuxvideo.com/stickers/p/1f8f"
  169. ];
  170. var _stickers_euro = [
  171. "https://image.jeuxvideo.com/stickers/p/1n1m",
  172. "https://image.jeuxvideo.com/stickers/p/1n1n",
  173. "https://image.jeuxvideo.com/stickers/p/1n1t",
  174. "https://image.jeuxvideo.com/stickers/p/1n1q",
  175. "https://image.jeuxvideo.com/stickers/p/1n1s",
  176. "https://image.jeuxvideo.com/stickers/p/1n1o"
  177. ];
  178. var _stickers_larspon = [
  179. "https://image.jeuxvideo.com/stickers/p/1lt9",
  180. "https://image.jeuxvideo.com/stickers/p/1lte",
  181. "https://image.jeuxvideo.com/stickers/p/1ltd",
  182. "https://image.jeuxvideo.com/stickers/p/1li4",
  183. "https://image.jeuxvideo.com/stickers/p/1jc3-fr",
  184. "https://image.jeuxvideo.com/stickers/p/1li5",
  185. "https://image.jeuxvideo.com/stickers/p/1n2d",
  186. "https://image.jeuxvideo.com/stickers/p/1n2i",
  187. "https://image.jeuxvideo.com/stickers/p/1n2j",
  188. "https://image.jeuxvideo.com/stickers/p/1n2m"
  189. ];
  190.  
  191.  
  192.  
  193.  
  194. // FUNCTIONS
  195. function getCode(element) {
  196. return element.attr("src").split('/')[5];
  197. }
  198.  
  199.  
  200. function idTextarea() {
  201. if (window.location.href.indexOf("jeuxvideo.com/messages-prives/") > -1) {
  202. return "#message";
  203. } else {
  204. return "#message_topic";
  205. }
  206. }
  207.  
  208. // MAIN APPEND
  209. var newStickers = '<div id="intstickersbloc" style="position: relative">\
  210. <div id="hap" class="new-stickers"></div>\
  211. <div id="noel" class="new-stickers"></div>\
  212. <div id="autres" class="new-stickers"></div>\
  213. <div id="brid" class="new-stickers"></div>\
  214. <div id="rex" class="new-stickers"></div>\
  215. <div id="fluffy" class="new-stickers"></div>\
  216. <div id="grukk" class="new-stickers"></div>\
  217. <div id="lamma" class="new-stickers"></div>\
  218. <div id="bud" class="new-stickers"></div>\
  219. <div id="euro" class="new-stickers"></div>\
  220. <div id="larspon" class="new-stickers"></div>\
  221. </div>';
  222. $(newStickers).insertAfter('.jv-editor-toolbar');
  223.  
  224.  
  225.  
  226. // HIDES
  227. $(".new-stickers").each(function() {
  228. if ( $(this).attr("id") != currentDiv ) {
  229. $(this).hide();
  230. }
  231. });
  232.  
  233. // APPENDS
  234. let toolbar = document.querySelector(".jv-editor-toolbar")
  235. let imgBtnGroup = toolbar.querySelectorAll(".btn-group")[2]
  236. //btns = imgBtnGroup.querySelectorAll("button")
  237. let stickersBtn = document.createElement("button")
  238. stickersBtn.classList.add("btn")
  239. stickersBtn.classList.add("btn-jv-editor-toolbar")
  240. stickersBtn.setAttribute("id", "old-stickjvc")
  241. if (window.location.href.indexOf("jeuxvideo.com/messages-prives/") > -1) {
  242. //MP
  243. } else {
  244. stickersBtn.setAttribute("title", "Stickers intégrés")
  245. }
  246. stickersBtn.setAttribute("type", "button")
  247. stickersBtn.innerHTML = "s"
  248. stickersBtn.addEventListener('click', function handleClick() {
  249. loadstickersfull(); //chargement du script premier click
  250. }, { once: true });
  251. if (window.location.href.indexOf("jeuxvideo.com/messages-prives/") > -1) {
  252. stickersBtn.style.textDecoration = "line-through";
  253. stickersBtn.style.textDecorationThickness = "2px";
  254. } else {
  255. //Forum
  256. }
  257. stickersBtn.style.lineHeight = "0"
  258. imgBtnGroup.appendChild(stickersBtn)
  259.  
  260.  
  261. //_Hide_Show__
  262. $(".new-stickers#"+currentDiv).hide(0);
  263. $("#old-stickjvc").click(function() {
  264. if ( $(".new-stickers").is(":visible") ) {
  265. $(this).removeClass("active");
  266. $(".new-stickers#"+currentDiv).hide(80);
  267. } else {
  268. setTimeout(function() {
  269. $(this).addClass("active");
  270. $(".new-stickers#"+currentDiv).show(80);
  271. $(".new-stickers").css("overflow", "auto");
  272. }, 50);
  273. }
  274. });
  275.  
  276. function loadstickersfull() {
  277. $(".new-stickers").append('<div code="hap" id="hap-css" title="Hap" class="cat-stickers"></div>\
  278. <div code="noel" id="noel-css" title="Noel" class="cat-stickers"></div>\
  279. <div code="autres" id="autres-css" title="Autres" class="cat-stickers"></div>\
  280. <div code="brid" id="brid-css" title="Bridgely" class="cat-stickers"></div>\
  281. <div code="rex" id="rex-css" title="Rex ryder" class="cat-stickers"></div>\
  282. <div code="fluffy" id="fluffy-css" title="Fluffy" class="cat-stickers"></div>\
  283. <div code="grukk" id="grukk-css" title="Grukk" class="cat-stickers"></div>\
  284. <div code="lamma" id="lamma-css" title="Lama" class="cat-stickers"></div>\
  285. <div code="bud" id="bud-css" title="Bud" class="cat-stickers"></div>\
  286. <div code="euro" id="euro-css" title="Euro" class="cat-stickers"></div>\
  287. <div code="larspon" id="larspon-css" title="Larry & Sponsos" class="cat-stickers"></div>');
  288.  
  289. // AJOUT STICKERS
  290. for (var i = 0; i < _stickers_hap.length; i++) {
  291. $(".new-stickers#hap").append( '<img src="'+_stickers_hap[i]+'" class="stickers-script">' );
  292. }
  293. for (var k = 0; k < _stickers_noel.length; k++) {
  294. $(".new-stickers#noel").append( '<img src="'+_stickers_noel[k]+'" class="stickers-script">' );
  295. }
  296. for (var lz = 0; lz < _stickers_autres.length; lz++) {
  297. $(".new-stickers#autres").append( '<img src="'+_stickers_autres[lz]+'" class="stickers-script">' );
  298. }
  299. for (var n = 0; n < _stickers_brid.length; n++) {
  300. $(".new-stickers#brid").append( '<img src="'+_stickers_brid[n]+'" class="stickers-script">' );
  301. }
  302. for (var j = 0; j < _stickers_rex.length; j++) {
  303. $(".new-stickers#rex").append( '<img src="'+_stickers_rex[j]+'" class="stickers-script">' );
  304. }
  305. for (var fff = 0; fff < _stickers_fluffy.length; fff++) {
  306. $(".new-stickers#fluffy").append( '<img src="'+_stickers_fluffy[fff]+'" class="stickers-script">' );
  307. }
  308. for (var gr = 0; gr < _stickers_grukk.length; gr++) {
  309. $(".new-stickers#grukk").append( '<img src="'+_stickers_grukk[gr]+'" class="stickers-script">' );
  310. }
  311. for (var la = 0; la < _stickers_lamma.length; la++) {
  312. $(".new-stickers#lamma").append( '<img src="'+_stickers_lamma[la]+'" class="stickers-script">' );
  313. }
  314. for (var bd = 0; bd < _stickers_bud.length; bd++) {
  315. $(".new-stickers#bud").append( '<img src="'+_stickers_bud[bd]+'" class="stickers-script">' );
  316. }
  317. for (var euo = 0; euo < _stickers_euro.length; euo++) {
  318. $(".new-stickers#euro").append( '<img src="'+_stickers_euro[euo]+'" class="stickers-script">' );
  319. }
  320. for (var lx = 0; lx < _stickers_larspon.length; lx++) {
  321. $(".new-stickers#larspon").append( '<img src="'+_stickers_larspon[lx]+'" class="stickers-script">' );
  322. }
  323.  
  324. $('.stickers-script').on('contextmenu', function(event) {
  325. event.preventDefault(); // Bloque le menu clic droit
  326. });
  327.  
  328. // LISTENERS
  329. function stickersEvent() {
  330. $(".stickers-script").click(function() {
  331. // Get sticker code
  332. var code = getCode( $(this) );
  333. //$("#message_topic").val($("#message_topic").val() + " [[sticker:p/"+code+"]]");
  334. var $textarea = jQuery(idTextarea());
  335. var caretPos = $textarea[0].selectionStart;
  336. var textAreaTxt = $textarea.val();
  337.  
  338. var sticker = "[[sticker:p/"+code+"]]";
  339. sticker = (caretPos > 0 && textAreaTxt[caretPos - 1] !== ' ' ? " " : "") + sticker + " ";
  340.  
  341. $textarea.val(textAreaTxt.substring(0, caretPos) + sticker + textAreaTxt.substring(caretPos) );
  342. const changeEvent = new Event('change');
  343. $textarea[0].dispatchEvent(changeEvent);
  344. $textarea.focus();
  345. });
  346. }
  347. stickersEvent();
  348.  
  349. $(".cat-stickers").click(function() {
  350. var id = $(this).attr("code");
  351. // Sauvegarde du choix dans le localStorage
  352. localStorage.setItem('stickersjvc-div', id);
  353. $(".new-stickers").each(function() {
  354. if ( $(this).attr("id") == id ) {
  355. $(this).show();
  356. if (currentDiv != id) {
  357. $("#"+currentDiv).hide();
  358. currentDiv = id;
  359. }
  360. }
  361. });
  362. });
  363.  
  364. // NICE SCROLL
  365. var lastScrollTop = 0;
  366. $(".new-stickers").scroll(function() {
  367. var st = $(this).scrollTop();
  368. // Masquer dès qu'on commence à descendre
  369. if (st > lastScrollTop) {
  370. $(".cat-stickers").hide();
  371. }
  372. // Afficher seulement si on est revenu tout en haut
  373. else if (st === 0) {
  374. $(".cat-stickers").show();
  375. }
  376. // Mise à jour du dernier scroll pour détecter la direction
  377. lastScrollTop = st;
  378. });
  379.  
  380. // TOOLTIPS
  381. $(document).ready(function() {
  382. $(".cat-stickers").each(function() {
  383. $(this).tipso({
  384. delay: 0,
  385. speed: 120,
  386. background: "rgba(0, 0, 0, 0.7)",
  387. size: 'tiny',
  388. content: '<b>'+$(this).attr("title")+'</b>',
  389. width: null,
  390. maxWidth: "150px"
  391. });
  392. });
  393. });
  394. }
  395.  
  396. // CSS
  397. // Scrollbar_personalise(chromium)
  398. if (!navigator.userAgent.includes("Firefox")) {
  399. GM_addStyle(`.new-stickers::-webkit-scrollbar-track { -webkit-box-shadow: inset 0 0 3px rgba(0,0,0,0.2); background-color: #f7f7f7; }
  400. .new-stickers::-webkit-scrollbar { width: 9px; background-color: #F5F5F5; }
  401. .new-stickers::-webkit-scrollbar-thumb { background-color: #ccc; }`);
  402. }
  403.  
  404. GM_addStyle(`.stickers-script { height: 50px; width: 50px; cursor: pointer; padding: 2px; }
  405.  
  406. .cat-stickers:hover { border: none; }
  407.  
  408. .cat-stickers#hap-css { left: 5px; background-image: url('https://image.jeuxvideo.com/stickers/p/1kki'); }
  409. .cat-stickers#noel-css { left: 30px; background-image: url('https://image.jeuxvideo.com/stickers/p/1kkr'); }
  410. .cat-stickers#autres-css { left: 55px; background-image: url('https://image.jeuxvideo.com/stickers/p/1mqv'); }
  411. .cat-stickers#brid-css { left: 80px; background-image: url('https://image.jeuxvideo.com/stickers/p/1jnh'); }
  412. .cat-stickers#rex-css { left: 105px; background-image: url('https://image.jeuxvideo.com/stickers/p/1lme'); }
  413. .cat-stickers#fluffy-css { left: 130px; background-image: url('https://image.jeuxvideo.com/stickers/p/1kl8'); }
  414. .cat-stickers#grukk-css { left: 155px; background-image: url('https://image.jeuxvideo.com/stickers/p/1lgg'); }
  415. .cat-stickers#lamma-css { left: 180px; background-image: url('https://image.jeuxvideo.com/stickers/p/1kgx'); }
  416. .cat-stickers#bud-css { left: 205px; background-image: url('https://image.jeuxvideo.com/stickers/p/1f8a'); }
  417. .cat-stickers#euro-css { left: 230px; background-image: url('https://image.jeuxvideo.com/stickers/p/1n1m'); }
  418. .cat-stickers#larspon-css { left: 255px; background-image: url('https://image.jeuxvideo.com/stickers/p/1lte'); }
  419.  
  420. /* Script title */
  421. .script-title { font-family: 'robotoboldcondensed', Arial, Helvetica, sans-serif; text-transform: uppercase; font-size: 0.75rem; color: #656574; }
  422.  
  423. /* Stickers panel */
  424. .new-stickers { border-top: 1px solid #ccc; padding: 2px; margin-top: 8px; height: 75px; transition: background-color 0.1s; overflow: auto; text-align: center; padding-top: 10px; scroll-behavior: smooth; }
  425.  
  426. /* Catégories */
  427. .cat-stickers { position: absolute; top: -8px; background-color: #E6E6E6; box-shadow: 0px 2px 2px #e0e0e0; border: 1px solid #ccc; border-radius: 50px; height: 16px; width: 16px; cursor: pointer; background-size: cover; background-repeat: no-repeat; background-position: center center; }
  428.  
  429. /* Hover stickers */
  430. .stickers-script:hover { background-color: rgba(185, 185, 185, 0.5); border-radius: 3px; }
  431.  
  432. /* Hover cat */
  433. .cat-stickers:hover { box-shadow: 0px 2px 8px #b5b5b5; }`);
  434.  
  435. if (document.URL.includes("jeuxvideo.com/messages-prives")){
  436. GM_addStyle(`.stickers-script:hover { filter: grayscale(100%); }`);
  437. }
  438.  
  439.  
  440.  
  441. })();