Layout4.2.5


SUBMITTED BY: hyperloko21

DATE: Nov. 5, 2022, 1:18 a.m.

UPDATED: March 18, 2024, 7:48 p.m.

FORMAT: Text only

SIZE: 70.0 kB

HITS: 717

  1. <!DOCTYPE html>
  2. <html class="w-full h-full" lang="pt-BR">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>780890715 - @RagnarVps | @alexdsgmoura</title>
  7. <style>
  8. *,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.absolute{position:absolute}.relative{position:relative}.bottom-1{bottom:.25rem}.left-1\/2{left:50%}.right-1{right:.25rem}.top-1{top:.25rem}.top-1\/2{top:50%}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-auto{margin-left:auto}.mt-14{margin-top:3.5rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-5{margin-top:1.25rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-1\/5{height:20%}.h-10{height:2.5rem}.h-12{height:3rem}.h-2\/3{height:66.666667%}.h-2\/4{height:50%}.h-20{height:5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[100\%\]{height:100%}.h-\[40px\]{height:40px}.h-\[90\%\]{height:90%}.h-\[calc\(100\%-160px\)\]{height:calc(100% - 160px)}.h-auto{height:auto}.h-full{height:100%}.max-h-8{max-height:2rem}.max-h-\[10\%\]{max-height:10%}.max-h-\[66\.666667\%\]{max-height:66.666667%}.min-h-\[40px\]{min-height:40px}.w-10{width:2.5rem}.w-11\/12{width:91.666667%}.w-14{width:3.5rem}.w-2\/4{width:50%}.w-20{width:5rem}.w-4{width:1rem}.w-4\/5{width:80%}.w-5{width:1.25rem}.w-5\/6{width:83.333333%}.w-6{width:1.5rem}.w-8{width:2rem}.w-\[40px\]{width:40px}.w-\[calc\(100\%-30px\)\]{width:calc(100% - 30px)}.w-\[calc\(100\%-40px\)\]{width:calc(100% - 40px)}.w-auto{width:auto}.w-full{width:100%}.flex-1{flex:1 1 0%}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x:-100%}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.scale-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x:0;--tw-scale-y:0}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-none{cursor:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-5{gap:1.25rem}.overflow-auto{overflow:auto}.overflow-hidden,.truncate{overflow:hidden}.truncate{text-overflow:ellipsis;white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-\[\#01010342\]{border-color:#01010342}.border-\[\#767881\]{--tw-border-opacity:1;border-color:rgb(118 120 129/var(--tw-border-opacity))}.bg-\[\#070610\]{--tw-bg-opacity:1;background-color:rgb(7 6 16/var(--tw-bg-opacity))}.bg-\[\#0a0c17ab\]{background-color:#0a0c17ab}.bg-\[\#0c0d18e0\]{background-color:#0c0d18e0}.bg-\[\#121c28\]{--tw-bg-opacity:1;background-color:rgb(18 28 40/var(--tw-bg-opacity))}.bg-\[\#14141489\]{background-color:#14141489}.bg-\[\#414cb8\]{--tw-bg-opacity:1;background-color:rgb(65 76 184/var(--tw-bg-opacity))}.bg-\[\#575e81\]{--tw-bg-opacity:1;background-color:rgb(87 94 129/var(--tw-bg-opacity))}.bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.bg-transparent{background-color:initial}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-\[\#0a0c17ab\]{--tw-gradient-from:#0a0c17ab var(--tw-gradient-from-position);--tw-gradient-to:#0a0c1700 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.stroke-\[\#FFFFFF\],.stroke-white{stroke:#fff}.p-2{padding:.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-\[10\%\]{padding-left:10%;padding-right:10%}.px-\[10px\]{padding-left:10px;padding-right:10px}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.pb-\[30px\]{padding-bottom:30px}.pl-1{padding-left:.25rem}.pr-6{padding-right:1.5rem}.pt-\[10px\]{padding-top:10px}.text-center{text-align:center}.text-\[0\.5rem\]{font-size:.5rem}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.6rem\]{font-size:.6rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.leading-7{line-height:1.75rem}.text-\[\#11c9ff\]{--tw-text-opacity:1;color:rgb(17 201 255/var(--tw-text-opacity))}.text-\[\#767881\]{--tw-text-opacity:1;color:rgb(118 120 129/var(--tw-text-opacity))}.text-\[\#7d7f81\]{--tw-text-opacity:1;color:rgb(125 127 129/var(--tw-text-opacity))}.text-\[\#FF0000\]{--tw-text-opacity:1;color:rgb(255 0 0/var(--tw-text-opacity))}.text-\[\#FFFFFF\],.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.shadow-\[0px_0px_10px_0px_rgba\(18\2c 22\2c 34\2c 1\)\]{--tw-shadow:0px 0px 10px 0px #121622;--tw-shadow-colored:0px 0px 10px 0px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.transition-\[max-height\]{transition-property:max-height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-1000{transition-duration:1s}@media (max-width:300px){.max-\[300px\]\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width:280px){.min-\[280px\]\:text-sm{font-size:.875rem;line-height:1.25rem}.min-\[280px\]\:text-xs{font-size:.75rem;line-height:1rem}}
  9. </style>
  10. </head>
  11. <body class="w-full h-full">
  12. <main class="w-full h-full flex flex-col relative">
  13. <section class="w-full h-full flex flex-col px-[10px] pt-[10px] pb-[30px] overflow-hidden" id="container-home">
  14. <section class="flex justify-between items-center relative">
  15. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-8 h-8" id="open-menu" viewBox="0 0 16 16">
  16. <path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5" />
  17. </svg>
  18. <div class="absolute left-1/2 top-1/2 transform -translate-x-1/2 -translate-y-1/2">
  19. <span class="text-[#FFFFFF] min-[280px]:text-xs text-sm" id="carrier-details">AG SSH BRAZIL </span>
  20. </div>
  21. <div>
  22. <span class="text-[#FFFFFF] min-[280px]:text-xs text-sm" id="vpn-status">Inativo</span>
  23. </div>
  24. </section>
  25. <section class="w-full h-1/5 flex justify-center">
  26. <img class="w-4/5" id="app-logo" src="https://s13.gifyu.com/images/S05Y3.gif" alt="logo" />
  27. </section>
  28. <section class="w-full h-[40px] flex justify-between items-center gap-2 mt-2.5">
  29. <button class="w-[calc(100%-40px)] h-full flex items-center justify-between gap-1 px-1 rounded-md cursor-none outline-none bg-[#070610]" id="button-of-list-carrier" type="button" title="Selecionar Configuração">
  30. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="w-6 h-6 text-[#FFFFFF]" viewBox="0 0 16 16">
  31. <path d="M8 16s6-5.686 6-10A6 6 0 0 0 2 6c0 4.314 6 10 6 10m0-7a3 3 0 1 1 0-6 3 3 0 0 1 0 6" />
  32. </svg>
  33. <span class="w-full text-[#FFFFFF] text-xs truncate" id="value-of-carrier">ESCOLHA UMA CONFIGURAÇÃO</span>
  34. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  35. <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z" />
  36. </svg>
  37. </button>
  38. <button class="w-[40px] h-full flex items-center justify-center rounded-md cursor-none outline-none bg-[#070610]" id="button-open-checkuser" type="button" title="checkuser">
  39. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF]" viewBox="0 0 16 16">
  40. <path d="M4.684 11.523v-2.3h2.261v-.61H4.684V6.801h2.464v-.61H4v5.332zm3.296 0h.676V8.98c0-.554.227-1.007.953-1.007.125 0 .258.004.329.015v-.613a1.806 1.806 0 0 0-.254-.02c-.582 0-.891.32-1.012.567h-.02v-.504H7.98v4.105zm2.805-5.093c0 .238.192.425.43.425a.428.428 0 1 0 0-.855.426.426 0 0 0-.43.43m.094 5.093h.672V7.418h-.672z" />
  41. <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5M1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4z" />
  42. </svg>
  43. </button>
  44. </section>
  45. <section class="w-full h-auto flex flex-col items-center gap-3 mt-2.5 py-2.5 bg-[#14141489] rounded-md">
  46. <h1 class="text-[#7d7f81] text-lg font-medium">Dados de Acesso</h1>
  47. <div class="w-11/12 h-9 overflow-hidden border border-[#01010342] rounded-md bg-gradient-to-r from-[#0a0c17ab] to-transparent" id="container-input-username">
  48. <input class="w-full h-full pl-1 outline-none text-[#FFFFFF] bg-transparent" id="input-username" type="text" placeholder="Usuário" />
  49. </div>
  50. <div class="w-11/12 h-9 flex items-center relative overflow-hidden border border-[#01010342] rounded-md bg-gradient-to-r from-[#0a0c17ab] to-transparent" id="container-input-password">
  51. <input class="w-[calc(100%-30px)] h-full pl-1 outline-none text-[#FFFFFF] bg-transparent" id="input-password" type="password" placeholder="Senha" />
  52. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="w-5 h-5 absolute right-1 text-[#FFFFFF]" id="eye-view-password" viewBox="0 0 16 16">
  53. <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8M1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z" />
  54. <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5M4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0" />
  55. </svg>
  56. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="w-5 h-5 absolute right-1 text-[#FFFFFF] hidden" id="eye-not-view-password" viewBox="0 0 16 16">
  57. <path d="M13.359 11.238C15.06 9.72 16 8 16 8s-3-5.5-8-5.5a7.028 7.028 0 0 0-2.79.588l.77.771A5.944 5.944 0 0 1 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.134 13.134 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755-.165.165-.337.328-.517.486z" />
  58. <path d="M11.297 9.176a3.5 3.5 0 0 0-4.474-4.474l.823.823a2.5 2.5 0 0 1 2.829 2.829zm-2.943 1.299.822.822a3.5 3.5 0 0 1-4.474-4.474l.823.823a2.5 2.5 0 0 0 2.829 2.829" />
  59. <path d="M3.35 5.47c-.18.16-.353.322-.518.487A13.134 13.134 0 0 0 1.172 8l.195.288c.335.48.83 1.12 1.465 1.755C4.121 11.332 5.881 12.5 8 12.5c.716 0 1.39-.133 2.02-.36l.77.772A7.029 7.029 0 0 1 8 13.5C3 13.5 0 8 0 8s.939-1.721 2.641-3.238l.708.709zm10.296 8.884-12-12 .708-.708 12 12-.708.708" />
  60. </svg>
  61. </div>
  62. <div class="w-11/12 h-9 hidden items-center relative overflow-hidden border border-[#01010342] rounded-md bg-gradient-to-r from-[#0a0c17ab] to-transparent" id="container-input-uuid">
  63. <input class="w-[calc(100%-30px)] h-full pl-1 outline-none text-[#FFFFFF] bg-transparent" id="input-uuid" type="password" placeholder="UUID" />
  64. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="w-5 h-5 absolute right-1 text-[#FFFFFF]" id="eye-view-uuid" viewBox="0 0 16 16">
  65. <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8M1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z" />
  66. <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5M4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0" />
  67. </svg>
  68. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="w-5 h-5 absolute right-1 text-[#FFFFFF] hidden" id="eye-not-view-uuid" viewBox="0 0 16 16">
  69. <path d="M13.359 11.238C15.06 9.72 16 8 16 8s-3-5.5-8-5.5a7.028 7.028 0 0 0-2.79.588l.77.771A5.944 5.944 0 0 1 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.134 13.134 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755-.165.165-.337.328-.517.486z" />
  70. <path d="M11.297 9.176a3.5 3.5 0 0 0-4.474-4.474l.823.823a2.5 2.5 0 0 1 2.829 2.829zm-2.943 1.299.822.822a3.5 3.5 0 0 1-4.474-4.474l.823.823a2.5 2.5 0 0 0 2.829 2.829" />
  71. <path d="M3.35 5.47c-.18.16-.353.322-.518.487A13.134 13.134 0 0 0 1.172 8l.195.288c.335.48.83 1.12 1.465 1.755C4.121 11.332 5.881 12.5 8 12.5c.716 0 1.39-.133 2.02-.36l.77.772A7.029 7.029 0 0 1 8 13.5C3 13.5 0 8 0 8s.939-1.721 2.641-3.238l.708.709zm10.296 8.884-12-12 .708-.708 12 12-.708.708" />
  72. </svg>
  73. </div>
  74. <button class="w-11/12 h-9 rounded-md shadow-[0px_0px_10px_0px_rgba(18,22,34,1)] bg-[#0a0c17ab] cursor-none" id="button-vpn-start-stop" type="button" title="conectar ou desconectar vpn">
  75. <span class="text-sm font-medium text-[#FFFFFF]" id="status-button-vpn">Conectar</span>
  76. </button>
  77. </section>
  78. <section class="w-full h-auto grid grid-cols-2 justify-items-center mt-auto py-2.5">
  79. <span class="text-[#FFFFFF]">Download</span>
  80. <span class="text-[#FFFFFF]">Upload</span>
  81. <span class="text-[#FFFFFF]" id="download-value">0 B/s</span>
  82. <span class="text-[#FFFFFF]" id="upload-value">0 B/s</span>
  83. </section>
  84. <section class="w-full h-10 flex items-center justify-center gap-2 mt-auto rounded-md bg-[#070610]" id="button-logs">
  85. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-4 h-4" viewBox="0 0 16 16">
  86. <path d="M5.5 7a.5.5 0 0 0 0 1h5a.5.5 0 0 0 0-1zM5 9.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5m0 2a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5" />
  87. <path d="M9.5 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V4.5zm0 1v2A1.5 1.5 0 0 0 11 4.5h2V14a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1z" />
  88. </svg>
  89. <span class="text-[#FFFFFF] text-sm font-medium">V 1.2 REGISTRO </span>
  90. </section>
  91. </section>
  92. <section class="w-5/6 h-full flex flex-col items-center absolute transition-all bg-[#0c0d18e0] -translate-x-full" id="container-menu">
  93. <section class="w-full h-10 flex justify-between items-center px-1">
  94. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="ml-auto text-[#FFFFFF] w-8 h-8" id="hidden-menu" viewBox="0 0 16 16">
  95. <path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5" />
  96. </svg>
  97. </section>
  98. <section class="w-full h-20 flex justify-center items-center mt-5">
  99. <div class="w-20 h-20 flex justify-center items-center rounded-full bg-[#575e81]">
  100. <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="h-2/4 stroke-[#FFFFFF]">
  101. <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z" />
  102. </svg>
  103. </div>
  104. </section>
  105. <section class="w-full h-10 flex items-center justify-center">
  106. <span class="text-[#767881] text-sm font-medium px-[10%] border-b border-[#767881]" id="expires-date-user-in-menu">Expira em: 24/12/2023</span>
  107. </section>
  108. <section class="w-full h-[calc(100%-160px)] flex flex-col mt-5 px-2">
  109. <nav class="w-11/12 h-5 flex items-center gap-3" class="w-11/12 h-5 flex items-center gap-1" id="nav-checkuser">
  110. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  111. <path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6" />
  112. </svg>
  113. <span class="text-[#FFFFFF] font-medium">Informações do perfil</span>
  114. </nav>
  115. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-whatsapp">
  116. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF]" viewBox="0 0 16 16">
  117. <path d="M13.601 2.326A7.854 7.854 0 0 0 7.994 0C3.627 0 .068 3.558.064 7.926c0 1.399.366 2.76 1.057 3.965L0 16l4.204-1.102a7.933 7.933 0 0 0 3.79.965h.004c4.368 0 7.926-3.558 7.93-7.93A7.898 7.898 0 0 0 13.6 2.326zM7.994 14.521a6.573 6.573 0 0 1-3.356-.92l-.24-.144-2.494.654.666-2.433-.156-.251a6.56 6.56 0 0 1-1.007-3.505c0-3.626 2.957-6.584 6.591-6.584a6.56 6.56 0 0 1 4.66 1.931 6.557 6.557 0 0 1 1.928 4.66c-.004 3.639-2.961 6.592-6.592 6.592zm3.615-4.934c-.197-.099-1.17-.578-1.353-.646-.182-.065-.315-.099-.445.099-.133.197-.513.646-.627.775-.114.133-.232.148-.43.05-.197-.1-.836-.308-1.592-.985-.59-.525-.985-1.175-1.103-1.372-.114-.198-.011-.304.088-.403.087-.088.197-.232.296-.346.1-.114.133-.198.198-.33.065-.134.034-.248-.015-.347-.05-.099-.445-1.076-.612-1.47-.16-.389-.323-.335-.445-.34-.114-.007-.247-.007-.38-.007a.729.729 0 0 0-.529.247c-.182.198-.691.677-.691 1.654 0 .977.71 1.916.81 2.049.098.133 1.394 2.132 3.383 2.992.47.205.84.326 1.129.418.475.152.904.129 1.246.08.38-.058 1.171-.48 1.338-.943.164-.464.164-.86.114-.943-.049-.084-.182-.133-.38-.232z" />
  118. </svg>
  119. <span class="text-[#FFFFFF] font-medium">Whatsapp</span>
  120. </nav>
  121. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-telegram">
  122. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF]" viewBox="0 0 16 16">
  123. <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M8.287 5.906q-1.168.486-4.666 2.01-.567.225-.595.442c-.03.243.275.339.69.47l.175.055c.408.133.958.288 1.243.294q.39.01.868-.32 3.269-2.206 3.374-2.23c.05-.012.12-.026.166.016s.042.12.037.141c-.03.129-1.227 1.241-1.846 1.817-.193.18-.33.307-.358.336a8 8 0 0 1-.188.186c-.38.366-.664.64.015 1.088.327.216.589.393.85.571.284.194.568.387.936.629q.14.092.27.187c.331.236.63.448.997.414.214-.02.435-.22.547-.82.265-1.417.786-4.486.906-5.751a1.4 1.4 0 0 0-.013-.315.34.34 0 0 0-.114-.217.53.53 0 0 0-.31-.093c-.3.005-.763.166-2.984 1.09" />
  124. </svg>
  125. <span class="text-[#FFFFFF] font-medium">Suporte</span>
  126. </nav>
  127. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-renew">
  128. <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="stroke-[#FFFFFF] w-5 h-5">
  129. <path stroke-linecap="round" stroke-linejoin="round" d="M2.25 18.75a60.07 60.07 0 0115.797 2.101c.727.198 1.453-.342 1.453-1.096V18.75M3.75 4.5v.75A.75.75 0 013 6h-.75m0 0v-.375c0-.621.504-1.125 1.125-1.125H20.25M2.25 6v9m18-10.5v.75c0 .414.336.75.75.75h.75m-1.5-1.5h.375c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-.375m1.5-1.5H21a.75.75 0 00-.75.75v.75m0 0H3.75m0 0h-.375a1.125 1.125 0 01-1.125-1.125V15m1.5 1.5v-.75A.75.75 0 003 15h-.75M15 10.5a3 3 0 11-6 0 3 3 0 016 0zm3 0h.008v.008H18V10.5zm-12 0h.008v.008H6V10.5z" />
  130. </svg>
  131. <span class="text-[#FFFFFF] font-medium">Renovar</span>
  132. </nav>
  133. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-test">
  134. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  135. <path d="M6.5 0a.5.5 0 0 0 0 1H7v1.07A7.001 7.001 0 0 0 8 16a7 7 0 0 0 5.29-11.584.531.531 0 0 0 .013-.012l.354-.354.353.354a.5.5 0 1 0 .707-.707l-1.414-1.415a.5.5 0 1 0-.707.707l.354.354-.354.354a.717.717 0 0 0-.012.012A6.973 6.973 0 0 0 9 2.071V1h.5a.5.5 0 0 0 0-1zm2 5.6V9a.5.5 0 0 1-.5.5H4.5a.5.5 0 0 1 0-1h3V5.6a.5.5 0 1 1 1 0" />
  136. </svg>
  137. <span class="text-[#FFFFFF] font-medium">Gerar teste</span>
  138. </nav>
  139. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-update">
  140. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  141. <path d="M11.473 9a4.5 4.5 0 0 0-8.72-.99A3 3 0 0 0 3 14h8.5a2.5 2.5 0 1 0-.027-5" />
  142. <path d="M14.544 9.772a3.506 3.506 0 0 0-2.225-1.676 5.502 5.502 0 0 0-6.337-4.002 4.002 4.002 0 0 1 7.392.91 2.5 2.5 0 0 1 1.17 4.769z" />
  143. </svg>
  144. <span class="text-[#FFFFFF] font-medium">Verificar atualizações</span>
  145. </nav>
  146. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-terms">
  147. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  148. <path d="M8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783" />
  149. </svg>
  150. <span class="text-[#FFFFFF] font-medium">Termos de uso</span>
  151. </nav>
  152. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-hotspot">
  153. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  154. <path d="M5.525 3.025a3.5 3.5 0 0 1 4.95 0 .5.5 0 1 0 .707-.707 4.5 4.5 0 0 0-6.364 0 .5.5 0 0 0 .707.707Z" />
  155. <path d="M6.94 4.44a1.5 1.5 0 0 1 2.12 0 .5.5 0 0 0 .708-.708 2.5 2.5 0 0 0-3.536 0 .5.5 0 0 0 .707.707Z" />
  156. <path d="M2.974 2.342a.5.5 0 1 0-.948.316L3.806 8H1.5A1.5 1.5 0 0 0 0 9.5v2A1.5 1.5 0 0 0 1.5 13H2a.5.5 0 0 0 .5.5h2A.5.5 0 0 0 5 13h6a.5.5 0 0 0 .5.5h2a.5.5 0 0 0 .5-.5h.5a1.5 1.5 0 0 0 1.5-1.5v-2A1.5 1.5 0 0 0 14.5 8h-2.306l1.78-5.342a.5.5 0 1 0-.948-.316L11.14 8H4.86L2.974 2.342ZM2.5 11a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1m4.5-.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0m2.5.5a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1m1.5-.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0m2 0a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0" />
  157. <path d="M8.5 5.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0" />
  158. </svg>
  159. <span class="text-[#FFFFFF] font-medium">ROTEAR VPN </span>
  160. </nav>
  161. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-access-point">
  162. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  163. <path d="M16 4.5a4.492 4.492 0 0 1-1.703 3.526L13 5l2.959-1.11c.027.2.041.403.041.61" />
  164. <path d="M11.5 9c.653 0 1.273-.139 1.833-.39L12 5.5 11 3l3.826-1.53A4.5 4.5 0 0 0 7.29 6.092l-6.116 5.096a2.583 2.583 0 1 0 3.638 3.638L9.908 8.71A4.49 4.49 0 0 0 11.5 9m-1.292-4.361-.596.893.809-.27a.25.25 0 0 1 .287.377l-.596.893.809-.27.158.475-1.5.5a.25.25 0 0 1-.287-.376l.596-.893-.809.27a.25.25 0 0 1-.287-.377l.596-.893-.809.27-.158-.475 1.5-.5a.25.25 0 0 1 .287.376M3 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2" />
  165. </svg>
  166. <span class="text-[#FFFFFF] font-medium">Ajustes de APN</span>
  167. </nav>
  168. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-app-clean-data">
  169. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  170. <path d="M11 1.5v1h3.5a.5.5 0 0 1 0 1h-.538l-.853 10.66A2 2 0 0 1 11.115 16h-6.23a2 2 0 0 1-1.994-1.84L2.038 3.5H1.5a.5.5 0 0 1 0-1H5v-1A1.5 1.5 0 0 1 6.5 0h3A1.5 1.5 0 0 1 11 1.5m-5 0v1h4v-1a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 0-.5.5M4.5 5.029l.5 8.5a.5.5 0 1 0 .998-.06l-.5-8.5a.5.5 0 1 0-.998.06Zm6.53-.528a.5.5 0 0 0-.528.47l-.5 8.5a.5.5 0 0 0 .998.058l.5-8.5a.5.5 0 0 0-.47-.528ZM8 4.5a.5.5 0 0 0-.5.5v8.5a.5.5 0 0 0 1 0V5a.5.5 0 0 0-.5-.5" />
  171. </svg>
  172. <span class="text-[#FFFFFF] font-medium">Limpar dados</span>
  173. </nav>
  174. </section>
  175. </section>
  176. <section class="w-full h-full flex flex-col items-center justify-center absolute transition-all scale-0 bg-[#0c0d18e0]" id="container-terms">
  177. <section class="w-11/12 h-2/3 flex flex-col relative rounded-md bg-[#121c28]">
  178. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="absolute top-1 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-[#FF0000] w-20 h-20" viewBox="0 0 16 16">
  179. <path d="M11.46.146A.5.5 0 0 0 11.107 0H4.893a.5.5 0 0 0-.353.146L.146 4.54A.5.5 0 0 0 0 4.893v6.214a.5.5 0 0 0 .146.353l4.394 4.394a.5.5 0 0 0 .353.146h6.214a.5.5 0 0 0 .353-.146l4.394-4.394a.5.5 0 0 0 .146-.353V4.893a.5.5 0 0 0-.146-.353L11.46.146zM8 4c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 4.995A.905.905 0 0 1 8 4m.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2" />
  180. </svg>
  181. <h1 class="w-full mt-14 text-[#FF0000] text-center text-lg font-medium">TERMOS DE USO</h1>
  182. <section class="w-full h-full mt-3 mb-3 px-3 overflow-auto text-center">
  183. <p class="text-[#FFFFFF]">A AGSSHBR envidará esforços razoáveis para garantir a disponibilidade contínua de nossos serviços de VPN. No entanto, o Cliente reconhece que, devido à natureza da Internet e de outros fatores que estão além do nosso controle, não podemos garantir que os serviços de VPN estarão livres de interrupções ou quedas de conexão. O Cliente entende e concorda que quedas de conexão ou interrupções podem ocorrer devido a circunstâncias imprevistas, manutenção de rotina, atualizações de software, eventos de força maior ou outras situações semelhantes. A AGSSHBR não assume qualquer responsabilidade por perdas, danos ou inconveniências que o Cliente possa sofrer como resultado de quedas de conexão ou interrupções nos serviços de VPN. O Cliente concorda em isentar a AGSSHBR de qualquer responsabilidade relacionada a tais eventos.</p>
  184. </section>
  185. <section class="w-full h-auto flex items-center justify-center my-3">
  186. <button class="w-2/4 h-9 rounded-md cursor-none bg-[#414cb8]" id="close-terms-container" type="button">
  187. <span class="text-[#FFFFFF]">CONCORDO</span>
  188. </button>
  189. </section>
  190. </section>
  191. </section>
  192. <section class="w-full h-full flex flex-col items-center justify-center absolute transition-all scale-0 bg-[#0c0d18e0]" id="container-hotspot">
  193. <section class="w-11/12 h-auto flex flex-col relative rounded-md bg-[#121c28]">
  194. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="absolute top-1 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-[#11c9ff] w-20 h-20" viewBox="0 0 16 16">
  195. <path d="M5.525 3.025a3.5 3.5 0 0 1 4.95 0 .5.5 0 1 0 .707-.707 4.5 4.5 0 0 0-6.364 0 .5.5 0 0 0 .707.707Z" />
  196. <path d="M6.94 4.44a1.5 1.5 0 0 1 2.12 0 .5.5 0 0 0 .708-.708 2.5 2.5 0 0 0-3.536 0 .5.5 0 0 0 .707.707Z" />
  197. <path d="M2.974 2.342a.5.5 0 1 0-.948.316L3.806 8H1.5A1.5 1.5 0 0 0 0 9.5v2A1.5 1.5 0 0 0 1.5 13H2a.5.5 0 0 0 .5.5h2A.5.5 0 0 0 5 13h6a.5.5 0 0 0 .5.5h2a.5.5 0 0 0 .5-.5h.5a1.5 1.5 0 0 0 1.5-1.5v-2A1.5 1.5 0 0 0 14.5 8h-2.306l1.78-5.342a.5.5 0 1 0-.948-.316L11.14 8H4.86L2.974 2.342ZM2.5 11a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1m4.5-.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0m2.5.5a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1m1.5-.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0m2 0a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0" />
  198. <path d="M8.5 5.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0" />
  199. </svg>
  200. <h1 class="w-full mt-14 text-[#11c9ff] text-center text-lg font-medium">ROTEAMENTO POR PROXY</h1>
  201. <section class="w-full h-full mt-3 mb-3 px-3 overflow-auto text-center">
  202. <p class="text-[#FFFFFF]">Essa função serve para rotear para outros dispositivos o hotspot, caso queira ativar ou precise desativar é só apertar no botão a baixo.</p>
  203. </section>
  204. <section class="w-full h-auto flex items-center justify-center gap-5 my-3">
  205. <button class="w-auto h-9 px-2 rounded-md cursor-none bg-[#414cb8]" id="button-hotspot" type="button">
  206. <span class="text-[#FFFFFF]" id="value-of-button-hotspot">ATIVAR HOTSPOT</span>
  207. </button>
  208. <button class="w-auto h-9 px-2 rounded-md cursor-none bg-red-900" id="close-hotspot-container" type="button">
  209. <span class="text-[#FFFFFF]">FECHAR</span>
  210. </button>
  211. </section>
  212. </section>
  213. </section>
  214. <section class="w-full h-full flex flex-col items-center justify-center absolute transition-all scale-0 bg-[#0c0d18e0]" id="container-configs">
  215. <section class="w-11/12 max-h-[66.666667%] flex flex-col relative rounded-md bg-[#121c28]">
  216. <header class="w-full min-h-[40px] max-h-[10%] flex items-center mb-2 border-b border-[#01010342] rounded-t-md">
  217. <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6 stroke-white" id="hidden-container-configs">
  218. <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5L8.25 12l7.5-7.5" />
  219. </svg>
  220. <h1 class="flex-1 pr-6 text-white text-center text-sm font-medium">CONFIGURAÇÕES</h1>
  221. </header>
  222. <section class="w-full h-[90%] overflow-auto px-1 mb-1 rounded-md">
  223. <section class="w-full h-auto flex flex-col gap-2" id="area-carrier-list">
  224. <div class="flex items-center">
  225. <input class="peer hidden" type="radio" name="config" id="tim-premium-cf" />
  226. <label class="w-full max-h-8 p-2 border border-[#01010342] rounded-md transition-[max-height] duration-1000 overflow-hidden" for="tim-premium-cf">
  227. <header class="w-full h-3 flex items-center justify-center p-2">
  228. <h1 class="text-xs font-medium text-white truncate">VIVO PREMIUM ACF</h1>
  229. </header>
  230. <ul class="w-full h-auto flex flex-col gap-2 mt-3 overflow-hidden">
  231. <li class="w-full h-12 flex items-center gap-2 px-1 rounded-md overflow-hidden bg-[#0c0d18e0]">
  232. <div class="w-10 h-[100%] flex items-center">
  233. <img src="https://i.ibb.co/TkC0rCH/DT7ixvcjh0.png" alt="icon" />
  234. </div>
  235. <div class="flex-1 flex flex-col gap-1 truncate">
  236. <h1 class="text-white text-xs truncate">TIM 1 ➜ CONFIG 1 ➜ SV01.OCI (COPY)</h1>
  237. <span class="text-white text-[0.65rem] truncate">SERVIDOR: 🇧🇷 ➜ LATÊNCIA BAIXA </span>
  238. </div>
  239. <div class="w-14 h-[100%] flex gap-1 items-end truncate">
  240. <span class="text-white text-[0.5rem] leading-7 truncate">OVPN_SSL_PROXY</span>
  241. </div>
  242. </li>
  243. <li class="w-full h-12 flex items-center gap-2 px-1 rounded-md overflow-hidden bg-[#0c0d18e0]">
  244. <div class="w-10 h-[100%] flex items-center">
  245. <img src="https://i.ibb.co/TkC0rCH/DT7ixvcjh0.png" alt="icon" />
  246. </div>
  247. <div class="flex-1 flex flex-col gap-1 truncate">
  248. <h1 class="text-white text-xs truncate">TIM 1 ➜ CONFIG 1 ➜ SV01.OCI (COPY)</h1>
  249. <span class="text-white text-[0.65rem] truncate">SERVIDOR: 🇧🇷 ➜ LATÊNCIA BAIXA </span>
  250. </div>
  251. <div class="w-14 h-[100%] relative truncate">
  252. <span class="text-white text-[0.6rem] truncate absolute bottom-1 right-1">SSH_PROXY</span>
  253. </div>
  254. </li>
  255. </ul>
  256. </label>
  257. </div>
  258. <div class="flex items-center">
  259. <input class="peer hidden" type="radio" name="config" id="vivo-premium-cf" />
  260. <label class="w-full max-h-8 p-2 border border-[#01010342] rounded-md transition-[max-height] duration-1000 overflow-hidden" for="vivo-premium-cf">
  261. <header class="w-full h-3 flex items-center justify-center p-2">
  262. <h1 class="text-sm text-white truncate">TIM PREMIUM ACF</h1>
  263. </header>
  264. <section class="w-full h-auto"></section>
  265. </label>
  266. </div>
  267. </section>
  268. </section>
  269. </section>
  270. </section>
  271. </main>
  272. <!-- FUNÇÕES DO APP -->
  273. <script>
  274. function appGetStatusbarHeightSize() {
  275. if (window?.DtGetStatusBarHeight?.execute && typeof window?.DtGetStatusBarHeight.execute === "function") {
  276. return DtGetStatusBarHeight.execute();
  277. }
  278. return 0;
  279. }
  280. function appGetNavbarHeightSize() {
  281. if (window?.DtGetNavigationBarHeight?.execute && typeof window?.DtGetNavigationBarHeight?.execute === "function") {
  282. return DtGetNavigationBarHeight.execute();
  283. }
  284. return 0;
  285. }
  286. function appTranslateText(label) {
  287. if (window?.DtTranslateText?.execute && typeof window?.DtTranslateText?.execute === "function") {
  288. return DtTranslateText.execute(label);
  289. }
  290. return null;
  291. }
  292. function appGetConfigLabel(label) {
  293. if (window?.DtGetAppConfig?.execute && typeof window?.DtGetAppConfig?.execute === "function") {
  294. return DtGetAppConfig.execute(label);
  295. }
  296. return null;
  297. }
  298. function appGetCarrierName() {
  299. if (window?.Android?.getNetworkName && typeof window?.Android?.getNetworkName === "function") {
  300. return Android.getNetworkName();
  301. }
  302. return null;
  303. }
  304. function appGetLocalIp() {
  305. if (window?.Android?.getLocalIP && typeof window?.Android.getLocalIP === "function") {
  306. return Android.getLocalIP();
  307. }
  308. return null;
  309. }
  310. function appGetConfigVersion() {
  311. if (window?.DtGetLocalConfigVersion?.execute && typeof window?.DtGetLocalConfigVersion?.execute === "function") {
  312. return DtGetLocalConfigVersion.execute();
  313. }
  314. return null;
  315. }
  316. function appOpenDialogConfig() {
  317. if (window?.DtExecuteDialogConfig?.execute && typeof window?.DtExecuteDialogConfig?.execute === "function") {
  318. return DtExecuteDialogConfig.execute();
  319. }
  320. return null;
  321. }
  322. function appGetDefaultConfig() {
  323. if (window?.DtGetDefaultConfig?.execute && typeof window?.DtGetDefaultConfig?.execute) {
  324. return DtGetDefaultConfig.execute();
  325. }
  326. return null;
  327. }
  328. function appGetAllConfigs() {
  329. if (window?.DtGetConfigs?.execute && typeof window?.DtGetConfigs?.execute === "function") {
  330. return JSON.parse(DtGetConfigs.execute());
  331. }
  332. return null;
  333. }
  334. function appSetConfig(id) {
  335. if (window?.DtSetConfig?.execute && typeof window?.DtSetConfig?.execute === "function") {
  336. window?.DtSetConfig?.execute(id);
  337. }
  338. return null;
  339. }
  340. function appOpenDialogDialogs() {
  341. if (window?.DtShowLoggerDialog?.execute && typeof window?.DtShowLoggerDialog?.execute === "function") {
  342. return window?.DtShowLoggerDialog.execute();
  343. }
  344. return null;
  345. }
  346. function appGetUsername() {
  347. if (window?.DtUsername && typeof window?.DtUsername.get === "function") {
  348. return DtUsername.get();
  349. }
  350. return "";
  351. }
  352. function appGetPassword() {
  353. if (window?.DtPassword && typeof window?.DtPassword?.get === "function") {
  354. return DtPassword.get();
  355. }
  356. return "";
  357. }
  358. function appGetUUID() {
  359. if (window?.DtUuid?.get && typeof window?.DtUuid.get === "function") {
  360. return DtUuid.get();
  361. }
  362. return "";
  363. }
  364. function appSetUsername(username) {
  365. if (window?.DtUsername?.set && typeof window?.DtUsername?.set === "function") {
  366. return window.DtUsername.set(username);
  367. }
  368. return null;
  369. }
  370. function appSetPassword(password) {
  371. if (window?.DtPassword?.set && typeof window?.DtPassword?.set === "function") {
  372. return window.DtPassword.set(password);
  373. }
  374. return null;
  375. }
  376. function appSetUUID(UUID) {
  377. if (window?.DtUuid.set && typeof window?.DtUuid?.set === "function") {
  378. return window.DtUuid.set(UUID);
  379. }
  380. return null;
  381. }
  382. function appGetConnectionState() {
  383. if (window?.DtGetVpnState?.execute && typeof window?.DtGetVpnState?.execute === "function") {
  384. return DtGetVpnState.execute();
  385. }
  386. return null;
  387. }
  388. function appStartConnection() {
  389. if (window?.DtExecuteVpnStart?.execute && typeof window?.DtExecuteVpnStart?.execute === "function") {
  390. return DtExecuteVpnStart.execute();
  391. }
  392. return null;
  393. }
  394. function appStopConnection() {
  395. if (window?.DtExecuteVpnStop?.execute && typeof window?.DtExecuteVpnStop?.execute === "function") {
  396. return DtExecuteVpnStop.execute();
  397. }
  398. return null;
  399. }
  400. function appGetDownloadBytes() {
  401. if (window?.DtGetNetworkDownloadBytes?.execute && typeof window?.DtGetNetworkDownloadBytes?.execute === "function") {
  402. return window?.DtGetNetworkDownloadBytes?.execute();
  403. }
  404. return "0 B/s";
  405. }
  406. function appGetUploadBytes() {
  407. if (window?.DtGetNetworkUploadBytes?.execute && typeof window?.DtGetNetworkUploadBytes?.execute === "function") {
  408. return Number(window?.DtGetNetworkUploadBytes?.execute());
  409. }
  410. return "0 B/s";
  411. }
  412. function appGetStatusHotspot() {
  413. if (window?.DtGetStatusHotSpotService?.execute && typeof window?.DtGetStatusHotSpotService?.execute === "function") {
  414. return window?.DtGetStatusHotSpotService.execute();
  415. }
  416. return null;
  417. }
  418. function appStartHotspot() {
  419. if (window?.DtStartHotSpotService?.execute && typeof window?.DtStartHotSpotService?.execute === "function") {
  420. return window.DtStartHotSpotService.execute();
  421. }
  422. return null;
  423. }
  424. function appStopHotspot() {
  425. if (window?.DtStopHotSpotService?.execute && typeof window?.DtStopHotSpotService?.execute === "function") {
  426. return window?.DtStopHotSpotService.execute();
  427. }
  428. return null;
  429. }
  430. function AppUpdate() {
  431. if (window?.DtStartAppUpdate?.execute && typeof window?.DtStartAppUpdate?.execute === "function") {
  432. return window.DtStartAppUpdate.execute();
  433. }
  434. return null;
  435. }
  436. function appIntoBrowser(url) {
  437. if (window?.DtStartWebViewActivity?.execute && typeof window?.DtStartWebViewActivity?.execute === "function") {
  438. return DtStartWebViewActivity.execute(url);
  439. }
  440. window.open(url, "_blank");
  441. }
  442. function appCheckuser() {
  443. if (window?.DtStartCheckUser?.execute && typeof window?.DtStartCheckUser?.execute === "function") {
  444. return window.DtStartCheckUser.execute();
  445. }
  446. return null;
  447. }
  448. function appApnConfiguration() {
  449. if (window?.DtStartApnActivity?.execute && typeof window?.DtStartApnActivity?.execute == "function") {
  450. return window?.DtStartApnActivity.execute();
  451. }
  452. return null;
  453. }
  454. function appBatteryOptimize() {
  455. if (window?.DtIgnoreBatteryOptimizations?.execute && typeof window?.DtIgnoreBatteryOptimizations?.execute === "function") {
  456. return DtIgnoreBatteryOptimizations.execute();
  457. }
  458. return null;
  459. }
  460. function appClearData() {
  461. if (window?.DtCleanApp?.execute && typeof window?.DtCleanApp?.execute === "function") {
  462. return DtCleanApp.execute();
  463. }
  464. return null;
  465. }
  466. function networkName() {
  467. if (window?.Android?.getNetworkName && typeof window?.Android?.getNetworkName === "function") {
  468. return Android.getNetworkName();
  469. }
  470. return null;
  471. }
  472. function internetProtocol() {
  473. if (window?.Android?.getLocalIP && typeof window?.Android?.getLocalIP === "function") {
  474. return Android.getLocalIP();
  475. }
  476. return null;
  477. }
  478. </script>
  479. <!-- DOM WRAPPER -->
  480. <script>
  481. const Dom = (selector) => {
  482. const _elements = document.querySelectorAll(selector);
  483. const wrapper = {
  484. on(listeners) {
  485. for (const [event, listener] of Object.entries(listeners)) {
  486. _elements.forEach((element) => {
  487. element.addEventListener(event, listener);
  488. });
  489. }
  490. return wrapper;
  491. },
  492. addClass: (...tokens) => {
  493. _elements.forEach((element) => {
  494. element.classList.add(...tokens);
  495. });
  496. return wrapper;
  497. },
  498. removeClass: (...tokens) => {
  499. _elements.forEach((element) => {
  500. element.classList.remove(...tokens);
  501. });
  502. return wrapper;
  503. },
  504. toggleClass: (token, force) => {
  505. _elements.forEach((element) => {
  506. element.classList.toggle(token, force);
  507. });
  508. return wrapper;
  509. },
  510. style(styles) {
  511. for (const [property, value] of Object.entries(styles)) {
  512. _elements.forEach((element) => {
  513. element.style[property] = value;
  514. });
  515. }
  516. return wrapper;
  517. },
  518. attr(attrs) {
  519. for (const [name, value] of Object.entries(attrs)) {
  520. _elements.forEach((element) => element.setAttribute(name, value));
  521. }
  522. return wrapper;
  523. },
  524. html(value) {
  525. _elements.forEach((element) => (element.innerHTML = value));
  526. return wrapper;
  527. },
  528. /**
  529. * @return {Element|null}
  530. */
  531. element() {
  532. return _elements.length > 0 ? _elements[0] : null;
  533. },
  534. allElements: _elements,
  535. };
  536. return wrapper;
  537. };
  538. </script>
  539. <!-- VÁRIAVIES -->
  540. <script>
  541. const body = Dom("body");
  542. const containerHome = Dom("#container-home");
  543. const openMenuButton = Dom("#open-menu");
  544. const carrierDetails = Dom("#carrier-details");
  545. const vpnStatusValue = Dom("#vpn-status");
  546. const appLogo = Dom("#app-logo");
  547. const buttonOfListCarrier = Dom("#button-of-list-carrier");
  548. const valueOnButtonOfCarrierList = Dom("#value-of-carrier");
  549. const buttonOfCheckUser = Dom("#button-open-checkuser");
  550. const containerInputUsername = Dom("#container-input-username");
  551. const containerInputPassword = Dom("#container-input-password");
  552. const containerInputUUID = Dom("#container-input-uuid");
  553. const inputUsername = Dom("#input-username");
  554. const inputPassword = Dom("#input-password");
  555. const inputUUID = Dom("#input-uuid");
  556. const eyeViewPasswordInput = Dom("#eye-view-password");
  557. const eyeNotViewPasswordInput = Dom("#eye-not-view-password");
  558. const eyeViewUUID = Dom("#eye-view-uuid");
  559. const eyeNotViewUUID = Dom("#eye-not-view-uuid");
  560. const buttonStartStopVpn = Dom("#button-vpn-start-stop");
  561. const buttonStartStopValue = Dom("#status-button-vpn");
  562. const downloadValue = Dom("#download-value");
  563. const uploadValue = Dom("#upload-value");
  564. const buttonLogs = Dom("#button-logs");
  565. const containerMenu = Dom("#container-menu");
  566. const hiddenContainerMenuButton = Dom("#hidden-menu");
  567. const expiresDateUserInMenu = Dom("#expires-date-user-in-menu");
  568. const navCheckuser = Dom("#nav-checkuser");
  569. const navWhatsapp = Dom("#nav-whatsapp");
  570. const navTelegram = Dom("#nav-telegram");
  571. const navRenew = Dom("#nav-renew");
  572. const navTest = Dom("#nav-test");
  573. const navUpdate = Dom("#nav-update");
  574. const navTerms = Dom("#nav-terms");
  575. const navHotspot = Dom("#nav-hotspot");
  576. const navAccessPoint = Dom("#nav-access-point");
  577. const navAppCleanData = Dom("#nav-app-clean-data");
  578. const containerTerms = Dom("#container-terms");
  579. const closeContainerTerms = Dom("#close-terms-container");
  580. const containerHotspot = Dom("#container-hotspot");
  581. const closeContainerHotspotButton = Dom("#close-hotspot-container");
  582. const buttonStartOrStopHotspot = Dom("#button-hotspot");
  583. const valueOfButtonHotspot = Dom("#value-of-button-hotspot");
  584. const containerConfigs = Dom("#container-configs");
  585. const closeContainerConfigs = Dom("#hidden-container-configs");
  586. const containerAreaCarrierList = Dom("#area-carrier-list");
  587. const inputsPeer = Dom("input.peer");
  588. const labelsFor = Dom("label[for]");
  589. </script>
  590. <!-- VÁRIAVEIS DO SISTEMA -->
  591. <script>
  592. const currentNetworkDownload = parseFloat(localStorage.getItem("networkDownload") ?? appGetDownloadBytes());
  593. const currentNetworkUpload = parseFloat(localStorage.getItem("networkUpload") ?? appGetUploadBytes());
  594. </script>
  595. <!-- FUNÇÕES -->
  596. <script>
  597. function getAppBackground() {
  598. const background_type = appGetConfigLabel("APP_BACKGROUND_TYPE");
  599. const background_color = appGetConfigLabel("APP_BACKGROUND_COLOR");
  600. const background_image = appGetConfigLabel("APP_BACKGROUND_IMAGE");
  601. if (!background_type) {
  602. return "url('../dist/bg.jpeg')";
  603. }
  604. if (JSON.parse(background_type)?.value === "COLOR") {
  605. return JSON.parse(background_color).value;
  606. }
  607. return `url(${JSON.parse(background_image).value})`;
  608. }
  609. function getAppLogo() {
  610. const logo = appGetConfigLabel("APP_LOGO");
  611. if (!logo) {
  612. return "../dist/logo.png";
  613. }
  614. return JSON.parse(logo)?.value;
  615. }
  616. function getConfigName() {
  617. const config = appGetDefaultConfig();
  618. if (!config) {
  619. return {
  620. name: appTranslateText("LBL_CHOOSE_CONFIG"),
  621. mode: "",
  622. };
  623. }
  624. if (JSON.parse(config)?.name && JSON.parse(config)?.mode) {
  625. return {
  626. name: JSON.parse(config)?.name,
  627. mode: JSON.parse(config)?.mode,
  628. };
  629. }
  630. return {
  631. name: appTranslateText("LBL_CHOOSE_CONFIG"),
  632. mode: "",
  633. };
  634. }
  635. function writeConfigValueOnButton() {
  636. valueOnButtonOfCarrierList.html(getConfigName()?.name);
  637. }
  638. function writeCarrierStatus() {
  639. setInterval(() => {
  640. carrierDetails.html(`${appGetCarrierName()}: ${internetProtocol()}`);
  641. });
  642. }
  643. function connectionState(state) {
  644. const connectionValue = `${state || appGetConnectionState()}`;
  645. switch (connectionValue) {
  646. case "DISCONNECTED":
  647. buttonStartStopValue.html(appTranslateText("LBL_BTN_START"));
  648. vpnStatusValue.html(appTranslateText("LBL_STATE_DISCONNECTED"));
  649. break;
  650. case "CONNECTING":
  651. buttonStartStopValue.html(appTranslateText("LBL_BTN_STOP"));
  652. vpnStatusValue.html(appTranslateText("LBL_STATE_CONNECTING"));
  653. break;
  654. case "CONNECTED":
  655. buttonStartStopValue.html(appTranslateText("LBL_BTN_STOP"));
  656. vpnStatusValue.html(appTranslateText("LBL_STATE_CONNECTED"));
  657. break;
  658. case "STOPPING":
  659. buttonStartStopValue.html(appTranslateText("LBL_BTN_STOPPING"));
  660. vpnStatusValue.html(appTranslateText("LBL_STATE_STOPPING"));
  661. break;
  662. case "NO_NETWORK":
  663. buttonStartStopValue.html(appTranslateText("LBL_BTN_STOP"));
  664. vpnStatusValue.html(appTranslateText("LBL_STATE_NO_NETWORK"));
  665. break;
  666. case "AUTH":
  667. buttonStartStopValue.html(appTranslateText("LBL_BTN_STOP"));
  668. vpnStatusValue.html(appTranslateText("LBL_STATE_AUTH"));
  669. break;
  670. case "AUTH_FAILED":
  671. buttonStartStopValue.html(appTranslateText("LBL_BTN_START"));
  672. vpnStatusValue.html(appTranslateText("LBL_STATE_AUTH_FAILED"));
  673. break;
  674. }
  675. }
  676. function startStopConnection() {
  677. const state = appGetConnectionState();
  678. state !== "CONNECTED" ? appStartConnection() : appStopConnection();
  679. }
  680. function startHotspot() {
  681. appStartHotspot();
  682. valueOfButtonHotspot.html("DESATIVAR HOTSPOT");
  683. return;
  684. }
  685. function stopHotspot() {
  686. appStopHotspot();
  687. valueOfButtonHotspot.html("ATIVAR HOTSPOT");
  688. return;
  689. }
  690. function toggleHotspot() {
  691. appGetStatusHotspot() === "STOPPED" ? startHotspot() : stopHotspot();
  692. return;
  693. }
  694. function setStatusHotspot() {
  695. if (appGetStatusHotspot() === "STOPPED") {
  696. valueOfButtonHotspot.html("ATIVAR HOTSPOT");
  697. return;
  698. } else {
  699. valueOfButtonHotspot.html("DESATIVAR HOTSPOT");
  700. return;
  701. }
  702. return;
  703. }
  704. function showInputPasswordValue() {
  705. eyeViewPasswordInput.addClass("hidden");
  706. eyeNotViewPasswordInput.removeClass("hidden");
  707. inputPassword.attr({ type: "text" });
  708. }
  709. function hiddenInputPasswordValue() {
  710. eyeViewPasswordInput.removeClass("hidden");
  711. eyeNotViewPasswordInput.addClass("hidden");
  712. inputPassword.attr({ type: "password" });
  713. }
  714. function showInputUUIDValue() {
  715. eyeViewUUID.addClass("hidden");
  716. eyeNotViewUUID.removeClass("hidden");
  717. inputUUID.attr({ type: "text" });
  718. }
  719. function hiddenInputUUIDValue() {
  720. eyeViewUUID.removeClass("hidden");
  721. eyeNotViewUUID.addClass("hidden");
  722. inputUUID.attr({ type: "password" });
  723. }
  724. function showContainerMenu() {
  725. containerMenu.removeClass("-translate-x-full");
  726. return;
  727. }
  728. function hiddenContainerMenu() {
  729. containerMenu.addClass("-translate-x-full");
  730. return;
  731. }
  732. function showContainerTerms() {
  733. containerTerms.removeClass("scale-0");
  734. return;
  735. }
  736. function hiddenContainerTerms() {
  737. containerTerms.addClass("scale-0");
  738. return;
  739. }
  740. function showContainerHotspot() {
  741. containerHotspot.removeClass("scale-0");
  742. return;
  743. }
  744. function hiddenContainerHotspot() {
  745. containerHotspot.addClass("scale-0");
  746. return;
  747. }
  748. function writeCarrierList() {
  749. const data = appGetAllConfigs();
  750. if (data) {
  751. containerAreaCarrierList.html("");
  752. data.sort((a, b) => a.sorter - b.sorter);
  753. data.forEach((item, index) => item.items.sort((a, b) => a.sorter - b.sorter));
  754. const labels = [];
  755. let selectedLabel = null;
  756. data.forEach((category) => {
  757. const div = document.createElement("div");
  758. const input = document.createElement("input");
  759. const label = document.createElement("label");
  760. const header = document.createElement("header");
  761. const h1 = document.createElement("h1");
  762. const ul = document.createElement("ul");
  763. div.classList.add("flex", "items-center");
  764. input.classList.add("hidden");
  765. label.classList.add("w-full", "max-h-8", "p-2", "border", "border-[#01010342]", "rounded-md", "transition-[max-height]", "duration-1000", "overflow-hidden");
  766. header.classList.add("w-full", "h-3", "flex", "items-center", "justify-center", "p-2");
  767. h1.classList.add("text-xs", "font-medium", "text-white", "truncate");
  768. ul.classList.add("w-full", "h-auto", "flex", "flex-col", "gap-2", "mt-3", "overflow-hidden");
  769. input.type = "radio";
  770. input.name = "config";
  771. input.id = category.name.trim();
  772. label.htmlFor = category.name.trim();
  773. h1.textContent = category.name;
  774. category.items.forEach((item) => {
  775. const li = document.createElement("li");
  776. const liDivLeft = document.createElement("div");
  777. const carrierIcon = document.createElement("img");
  778. const liDivCenter = document.createElement("div");
  779. const configTitle = document.createElement("h1");
  780. const configDescription = document.createElement("span");
  781. const liDivRight = document.createElement("div");
  782. const configType = document.createElement("span");
  783. li.classList.add("w-full", "h-12", "flex", "items-center", "gap-2", "px-1", "rounded-md", "overflow-hidden", "bg-[#0c0d18e0]");
  784. liDivLeft.classList.add("w-10", "h-[100%]", "flex", "items-center");
  785. liDivCenter.classList.add("flex-1", "flex", "flex-col", "gap-1", "truncate");
  786. configTitle.classList.add("text-white", "text-xs", "truncate");
  787. configDescription.classList.add("text-white", "text-[0.65rem]", "truncate");
  788. liDivRight.classList.add("w-14", "h-[100%]", "flex", "items-end", "truncate");
  789. configType.classList.add("text-white", "text-[0.5rem]", "leading-7", "truncate");
  790. carrierIcon.src = item.icon;
  791. carrierIcon.alt = item.name;
  792. configTitle.textContent = item.name;
  793. configDescription.textContent = item.description;
  794. configType.textContent = item.mode;
  795. liDivLeft.appendChild(carrierIcon);
  796. liDivCenter.appendChild(configTitle);
  797. liDivCenter.appendChild(configDescription);
  798. liDivRight.appendChild(configType);
  799. li.appendChild(liDivLeft);
  800. li.appendChild(liDivCenter);
  801. li.appendChild(liDivRight);
  802. li.addEventListener("click", () => {
  803. appSetConfig(item.id);
  804. hiddenContainerConfigs();
  805. });
  806. ul.appendChild(li);
  807. });
  808. header.appendChild(h1);
  809. label.appendChild(header);
  810. label.appendChild(ul);
  811. input.addEventListener("change", () => {
  812. if (input.checked) {
  813. labels.forEach((otherLabel) => {
  814. if (otherLabel !== label) {
  815. otherLabel.style.maxHeight = "32px";
  816. }
  817. });
  818. label.style.maxHeight = label.scrollHeight + "px";
  819. selectedLabel = label;
  820. }
  821. });
  822. labels.push(label);
  823. div.appendChild(input);
  824. div.appendChild(label);
  825. containerAreaCarrierList.element().appendChild(div);
  826. });
  827. }
  828. }
  829. function showContainerConfigs() {
  830. writeCarrierList();
  831. containerConfigs.removeClass("scale-0");
  832. return;
  833. }
  834. function hiddenContainerConfigs() {
  835. containerConfigs.addClass("scale-0");
  836. return;
  837. }
  838. function checkV2ray() {
  839. const data = JSON.parse(appGetDefaultConfig());
  840. if (!data) {
  841. return false;
  842. }
  843. if (data.mode?.toLowerCase().startsWith("v2ray")) {
  844. if (data.auth?.v2ray_uuid) {
  845. return "exists v2ray config";
  846. }
  847. return true;
  848. }
  849. return false;
  850. }
  851. function toggleInput() {
  852. const v2rayUUID = checkV2ray();
  853. if (v2rayUUID === "exists v2ray config") {
  854. containerInputUsername.addClass("hidden");
  855. containerInputPassword.addClass("hidden");
  856. containerInputUUID.addClass("hidden");
  857. } else if (v2rayUUID) {
  858. containerInputUsername.addClass("hidden");
  859. containerInputPassword.addClass("hidden");
  860. containerInputUUID.removeClass("hidden");
  861. containerInputUUID.addClass("flex");
  862. } else {
  863. containerInputUsername.removeClass("hidden");
  864. containerInputPassword.removeClass("hidden");
  865. containerInputUUID.addClass("flex");
  866. containerInputUUID.addClass("hidden");
  867. }
  868. }
  869. function formatBytes(bytes) {
  870. const sizes = ["B/s", "KB/s", "MB/s", "GB/s", "TB/s"];
  871. if (bytes === 0) return "0 B/s";
  872. const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
  873. return (bytes / Math.pow(1024, i)).toPrecision(3) + " " + sizes[i];
  874. }
  875. function updateNetworkStats() {
  876. setInterval(() => {
  877. const newNetworkDownload = appGetDownloadBytes();
  878. const newNetworkUpload = appGetUploadBytes();
  879. downloadValue.html(formatBytes(newNetworkDownload - currentNetworkDownload));
  880. uploadValue.html(formatBytes(newNetworkUpload - currentNetworkUpload));
  881. localStorage.setItem("networkDownload", formatBytes(newNetworkDownload - currentNetworkDownload));
  882. localStorage.setItem("networkUpload", formatBytes(newNetworkUpload - currentNetworkUpload));
  883. }, 500);
  884. }
  885. function getExpirationDateOfUser() {
  886. const expirationDate = localStorage.getItem("expirationDate");
  887. if (expirationDate) {
  888. expiresDateUserInMenu.style({ display: "block" });
  889. return `Expira em: ${expirationDate}`;
  890. }
  891. expiresDateUserInMenu.style({ display: "none" });
  892. return "";
  893. }
  894. function toggleLabelHeight(inputId) {
  895. const input = document.getElementById(inputId);
  896. const label = document.querySelector(`label[for="${inputId}"]`);
  897. if (input.checked) {
  898. // Se o input estiver selecionado, ajuste a altura máxima do label
  899. label.style.maxHeight = label.scrollHeight + "px";
  900. } else {
  901. // Se o input não estiver selecionado, redefina a altura máxima
  902. label.style.maxHeight = "32px";
  903. }
  904. }
  905. function toggleMoreInputs() {
  906. const data = JSON.parse(appGetDefaultConfig());
  907. if (!data) return null;
  908. containerInputUsername.removeClass("hidden");
  909. containerInputPassword.removeClass("hidden");
  910. containerInputUUID.addClass("hidden");
  911. if (data?.auth?.username) {
  912. containerInputUsername.addClass("hidden");
  913. }
  914. if (data?.auth?.password) {
  915. containerInputPassword.addClass("hidden");
  916. }
  917. if (!data?.auth?.username) {
  918. containerInputUsername.removeClass("hidden");
  919. }
  920. if (!data?.auth?.password) {
  921. containerInputPassword.removeClass("hidden");
  922. }
  923. if (data.mode?.toLowerCase().startsWith("v2ray")) {
  924. if (data?.auth?.v2ray_uuid) {
  925. containerInputUUID.addClass("hidden");
  926. containerInputUsername.addClass("hidden");
  927. containerInputPassword.addClass("hidden");
  928. }
  929. if (!data?.auth?.v2ray_uuid) {
  930. containerInputUUID.removeClass("hidden");
  931. containerInputUsername.addClass("hidden");
  932. containerInputPassword.addClass("hidden");
  933. }
  934. }
  935. }
  936. </script>
  937. <!-- AÇÕES -->
  938. <script>
  939. body.style({
  940. background: getAppBackground(),
  941. backgroundSize: "cover",
  942. backgroundPosition: "center",
  943. backgroundRepeat: "no-repeat",
  944. });
  945. containerHome.style({
  946. padding: `${appGetStatusbarHeightSize() + 10}px 10px ${appGetNavbarHeightSize() + 10}px 10px`,
  947. });
  948. appLogo.attr({ src: getAppLogo() });
  949. appLogo.on({ click: () => AppUpdate() });
  950. buttonOfListCarrier.on({ click: () => showContainerConfigs() });
  951. valueOnButtonOfCarrierList.html(getConfigName()?.name);
  952. closeContainerConfigs.on({ click: () => hiddenContainerConfigs() });
  953. buttonOfCheckUser.on({ click: () => appCheckuser() });
  954. inputUsername.attr({ placeholder: appTranslateText("LBL_USERNAME") });
  955. inputPassword.attr({ placeholder: appTranslateText("LBL_PASSWORD") });
  956. inputUUID.attr({ placeholder: appTranslateText("LBL_UUID") });
  957. inputUsername.attr({ value: appGetUsername() });
  958. inputPassword.attr({ value: appGetPassword() });
  959. inputUUID.attr({ value: appGetUUID() });
  960. inputUsername.on({ input: (e) => appSetUsername(e.target.value) });
  961. inputPassword.on({ input: (e) => appSetPassword(e.target.value) });
  962. inputUUID.on({ input: (e) => appSetUUID(e.target.value) });
  963. eyeViewPasswordInput.on({ click: () => showInputPasswordValue() });
  964. eyeNotViewPasswordInput.on({ click: () => hiddenInputPasswordValue() });
  965. eyeViewUUID.on({ click: () => showInputUUIDValue() });
  966. eyeNotViewUUID.on({ click: () => hiddenInputUUIDValue() });
  967. buttonStartStopVpn.on({ click: () => startStopConnection() });
  968. buttonLogs.on({ click: () => appOpenDialogDialogs() });
  969. containerMenu.style({
  970. padding: `${appGetStatusbarHeightSize() + 10}px 10px ${appGetNavbarHeightSize() + 10}px 10px`,
  971. });
  972. openMenuButton.on({ click: () => showContainerMenu() });
  973. hiddenContainerMenuButton.on({ click: () => hiddenContainerMenu() });
  974. expiresDateUserInMenu.html(getExpirationDateOfUser());
  975. navCheckuser.on({ click: () => appCheckuser() });
  976. navWhatsapp.on({ click: () => appIntoBrowser("https://wa.me/15996311570") });
  977. navTelegram.on({ click: () => appIntoBrowser("https://t.me/wesley898") });
  978. navRenew.on({ click: () => appIntoBrowser("https://t.me/agvendasbr_bot") });
  979. navTest.on({ click: () => appIntoBrowser("https://t.me/agvendasbr_bot") });
  980. navUpdate.on({ click: () => AppUpdate() });
  981. navTerms.on({ click: () => showContainerTerms() });
  982. closeContainerTerms.on({ click: () => hiddenContainerTerms() });
  983. navHotspot.on({ click: () => showContainerHotspot() });
  984. buttonStartOrStopHotspot.on({ click: () => toggleHotspot() });
  985. closeContainerHotspotButton.on({ click: () => hiddenContainerHotspot() });
  986. navAccessPoint.on({ click: () => appApnConfiguration() });
  987. navAppCleanData.on({ click: () => appClearData() });
  988. connectionState();
  989. setStatusHotspot();
  990. updateNetworkStats();
  991. toggleMoreInputs();
  992. writeCarrierStatus();
  993. </script>
  994. <!-- FUNÇÕES PARA O APP -->
  995. <script>
  996. function dtConfigClickListener() {
  997. writeConfigValueOnButton();
  998. toggleMoreInputs();
  999. inputUsername.attr({ value: appGetUsername() });
  1000. inputPassword.attr({ value: appGetPassword() });
  1001. inputUUID.attr({ value: appGetUUID() });
  1002. }
  1003. function dtVpnStateListener(state) {
  1004. connectionState(state);
  1005. }
  1006. const dtCheckUserModelListener = (model) => {
  1007. const data = JSON.parse(model);
  1008. expiresDateUserInMenu.html(`Expira em: ${data.expiration_date}`);
  1009. expiresDateUserInMenu.style({ display: "block" });
  1010. localStorage.setItem("expirationDate", data.expiration_date);
  1011. };
  1012. </script>
  1013. </body>
  1014. </html>

comments powered by Disqus