Tema dt mod


SUBMITTED BY: Buganet

DATE: Aug. 1, 2022, 9:15 p.m.

UPDATED: May 27, 2024, 11:20 a.m.

FORMAT: Text only

SIZE: 81.8 kB

HITS: 2405

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <title>Document</title>
  5. <meta charset="UTF-8" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
  7. <style>
  8. :root {
  9. --background-color-main: #171717;
  10. --background-image-main: url('');
  11. --header-container-color: linear-gradient(to right, #f2295b, #712de0);
  12. --background-container-color: #171717;
  13. --border-color: linear-gradient(to right, #f2295b, #712de0);
  14. --border-loading-color: #ffffff;
  15. --text-color: #ffffff;
  16. --text-alert-color: #ff0000;
  17. --icons-color: #ffffff;
  18. --background-buttons-color: linear-gradient(to right, #712de0, #f2295b);
  19. --margem-do-topo-do-modal: 10px;
  20. --margem-do-bottom-do-modal: 10px;
  21. }
  22. * {
  23. margin: 0;
  24. padding: 0;
  25. box-sizing: border-box;
  26. }
  27. html,
  28. body,
  29. main {
  30. width: 100%;
  31. height: 100%;
  32. }
  33. body {
  34. background-color: var(--background-color-main);
  35. background-image: var(--background-image-main);
  36. background-position: center;
  37. background-repeat: no-repeat;
  38. background-size: cover;
  39. }
  40. main {
  41. display: flex;
  42. flex-direction: column;
  43. align-items: center;
  44. gap: 20px;
  45. position: relative;
  46. transition: padding-bottom 0.3s ease 0.2s;
  47. overflow: hidden;
  48. }
  49. .container-logo {
  50. width: 95%;
  51. height: auto;
  52. display: flex;
  53. justify-content: center;
  54. align-items: center;
  55. margin-top: 40px;
  56. padding: 5px 3px;
  57. }
  58. .container-logo img {
  59. width: 50%;
  60. max-width: 300px;
  61. }
  62. .container {
  63. width: 95%;
  64. max-width: 450px;
  65. height: auto;
  66. position: relative;
  67. border-radius: 5px;
  68. background: transparent;
  69. }
  70. .container header {
  71. width: 95%;
  72. height: 45px;
  73. display: flex;
  74. align-items: center;
  75. gap: 10px;
  76. border-top-left-radius: 5px;
  77. border-top-right-radius: 5px;
  78. margin: auto;
  79. padding: 5px 10px;
  80. background: #171717;
  81. }
  82. .container header button:first-child {
  83. visibility: hidden;
  84. }
  85. .container header button {
  86. flex: 1;
  87. height: 100%;
  88. border: 0;
  89. border-radius: 20px;
  90. color: var(--text-color);
  91. font-family: 'Roboto', sans-serif;
  92. background: var(--background-buttons-color);
  93. }
  94. .container form {
  95. width: 100%;
  96. height: calc(100% - 45px);
  97. display: flex;
  98. flex-direction: column;
  99. align-items: center;
  100. gap: 10px;
  101. margin: 10px 0px;
  102. padding: 0px 3px;
  103. }
  104. .container form div {
  105. width: 95%;
  106. height: 45px;
  107. display: flex;
  108. align-items: center;
  109. border-radius: 50px;
  110. padding: 0px 10px;
  111. background: #000;
  112. }
  113. .container form div#uuid-container {
  114. display: none;
  115. }
  116. .container form div svg {
  117. width: 38px;
  118. height: 100%;
  119. display: flex;
  120. justify-content: center;
  121. align-items: center;
  122. align-content: center;
  123. padding: 0px 10px;
  124. border-right: 1px solid var(--border-color);
  125. color: var(--icons-color);
  126. }
  127. .container form div svg path {
  128. transform: scale(1);
  129. }
  130. .container form div input {
  131. width: 100%;
  132. height: 100%;
  133. border: 0;
  134. outline: none;
  135. padding-left: 5px;
  136. color: var(--text-color);
  137. font-family: 'Roboto', sans-serif;
  138. font-size: 1rem;
  139. background: transparent;
  140. }
  141. .container form div input::placeholder {
  142. color: #dddddd;
  143. }
  144. .form-buttons {
  145. width: 100%;
  146. display: flex;
  147. flex-wrap: wrap;
  148. gap: 10px;
  149. margin-top: 10px;
  150. padding: 0px 5px;
  151. }
  152. .form-buttons button {
  153. flex: 1;
  154. height: 45px;
  155. display: flex;
  156. align-items: center;
  157. justify-content: center;
  158. gap: 5px;
  159. border: 0;
  160. border-radius: 20px;
  161. color: var(--text-color);
  162. font-family: 'Roboto', sans-serif;
  163. background: #000;
  164. }
  165. .form-buttons button:last-child {
  166. width: 50%;
  167. flex-basis: 100%;
  168. margin-top: 10px;
  169. }
  170. .menu {
  171. width: 100%;
  172. height: calc(100% - 45px);
  173. position: absolute;
  174. top: 45px;
  175. left: 0;
  176. right: 0;
  177. bottom: 0;
  178. display: flex;
  179. flex-direction: column;
  180. align-items: center;
  181. justify-content: center;
  182. gap: 13px;
  183. padding: 10px 5px;
  184. border-bottom-left-radius: 5px;
  185. border-bottom-right-radius: 5px;
  186. opacity: 0;
  187. transform: perspective(800px) rotateX(90deg) rotateY(0deg);
  188. transform-origin: 100% 100%;
  189. background: #171717;
  190. }
  191. .menu button {
  192. width: 95%;
  193. height: 45px;
  194. display: flex;
  195. align-items: center;
  196. justify-content: center;
  197. border: 0;
  198. border-radius: 17.5px;
  199. background: var(--background-buttons-color);
  200. }
  201. .menu button svg {
  202. color: var(--icons-color);
  203. margin-right: 5px;
  204. }
  205. .menu button span {
  206. color: var(--text-color);
  207. font-family: 'Roboto', sans-serif;
  208. }
  209. .status-vpn {
  210. width: 100%;
  211. height: auto;
  212. padding: 0px 10px;
  213. }
  214. .status-vpn section {
  215. width: 95%;
  216. height: 40px;
  217. display: flex;
  218. align-items: center;
  219. justify-content: center;
  220. gap: 10px;
  221. margin: 0 auto;
  222. padding: 0px 10px;
  223. border-radius: 20px;
  224. background: #000;
  225. }
  226. .status-vpn section svg {
  227. color: #ffffff;
  228. }
  229. .status-vpn section h1 {
  230. color: #ffffff;
  231. font-family: 'Roboto', sans-serif;
  232. font-weight: 400;
  233. font-size: 1rem;
  234. }
  235. .home-menu {
  236. width: 95%;
  237. max-width: 450px;
  238. height: auto;
  239. display: flex;
  240. flex-direction: column;
  241. justify-content: center;
  242. gap: 10px;
  243. position: absolute;
  244. bottom: 20px;
  245. padding: 0px 10px;
  246. }
  247. .home-menu button {
  248. width: auto;
  249. height: 45px;
  250. display: flex;
  251. justify-content: center;
  252. align-items: center;
  253. gap: 5px;
  254. padding: 0px 10px;
  255. border: 0px;
  256. border-radius: 20px;
  257. background: var(--background-buttons-color);
  258. }
  259. .home-menu button svg {
  260. height: 100%;
  261. color: var(--icons-color);
  262. }
  263. .home-menu button span {
  264. color: var(--text-color);
  265. }
  266. .modal-speedtest,
  267. .modal-configs,
  268. .modal-logs,
  269. .modal-alert-clear-data,
  270. .modal-error-alert,
  271. .modal-status-vpn,
  272. .modal-checkuser,
  273. .modal-loading,
  274. .modal-gen-test,
  275. .modal-buy-access,
  276. .modal-call-support {
  277. width: 98%;
  278. max-width: 450px;
  279. height: calc(100% - var(--margem-do-bottom-do-modal) - var(--margem-do-topo-do-modal));
  280. position: absolute;
  281. top: var(--margem-do-topo-do-modal);
  282. left: auto;
  283. right: auto;
  284. bottom: var(--margem-do-bottom-do-modal);
  285. z-index: 2;
  286. display: flex;
  287. flex-direction: column;
  288. border-radius: 5px;
  289. overflow: hidden;
  290. opacity: 0;
  291. transform: scale(0);
  292. transform-origin: center;
  293. transition: all 0.3s ease 0.1s;
  294. }
  295. .show {
  296. opacity: 1;
  297. transform: scale(1);
  298. }
  299. .modal-speedtest header,
  300. .modal-configs header,
  301. .modal-logs header,
  302. .modal-alert-clear-data header,
  303. .modal-error-alert header,
  304. .modal-status-vpn header,
  305. .modal-checkuser header,
  306. .modal-loading header,
  307. .modal-gen-test header,
  308. .modal-buy-access header,
  309. .modal-call-support header {
  310. width: 100%;
  311. height: 40px;
  312. display: flex;
  313. align-items: center;
  314. padding: 0px 10px;
  315. background: var(--header-container-color);
  316. }
  317. .modal-speedtest header svg,
  318. .modal-configs header svg,
  319. .modal-logs header svg,
  320. .modal-alert-clear-data header svg,
  321. .modal-error-alert header svg,
  322. .modal-status-vpn header svg,
  323. .modal-checkuser header svg,
  324. .modal-loading header svg,
  325. .modal-gen-test header svg,
  326. .modal-buy-access header svg,
  327. .modal-call-support header svg {
  328. margin-left: auto;
  329. color: var(--icons-color);
  330. }
  331. .modal-speedtest section,
  332. .modal-configs section,
  333. .modal-logs section,
  334. .modal-alert-clear-data section,
  335. .modal-error-alert section,
  336. .modal-status-vpn section,
  337. .modal-checkuser section,
  338. .modal-loading section,
  339. .modal-gen-test section,
  340. .modal-buy-access section,
  341. .modal-call-support section {
  342. background: var(--background-container-color);
  343. }
  344. .modal-speedtest section,
  345. .modal-gen-test section,
  346. .modal-buy-access section,
  347. .modal-call-support section {
  348. width: 100%;
  349. height: calc(100% - 40px);
  350. position: relative;
  351. display: flex;
  352. justify-content: center;
  353. align-items: center;
  354. }
  355. .modal-logs section,
  356. .modal-checkuser section {
  357. width: 100%;
  358. height: calc(100% - 40px);
  359. position: relative;
  360. display: flex;
  361. flex-direction: column;
  362. align-items: center;
  363. }
  364. .modal-logs section p {
  365. width: 100%;
  366. height: auto;
  367. max-height: calc(100% - 65px);
  368. margin: 10px 0px;
  369. padding: 0px 10px;
  370. overflow-y: auto;
  371. color: var(--text-color);
  372. font-family: 'Roboto', sans-serif;
  373. font-size: 0.7rem;
  374. }
  375. .modal-logs section button {
  376. width: 80%;
  377. height: 45px;
  378. margin-top: auto;
  379. margin-bottom: 5px;
  380. display: flex;
  381. align-items: center;
  382. justify-content: center;
  383. border: 0;
  384. border-radius: 17.5px;
  385. background: var(--background-buttons-color);
  386. }
  387. .modal-logs section button svg {
  388. color: var(--icons-color);
  389. margin-right: 5px;
  390. }
  391. .modal-logs section button span {
  392. color: var(--text-color);
  393. font-family: 'Roboto', sans-serif;
  394. }
  395. .modal-speedtest section iframe,
  396. .modal-gen-test section iframe,
  397. .modal-buy-access section iframe,
  398. .modal-call-support section iframe {
  399. width: 100%;
  400. height: 100%;
  401. border: 0;
  402. overflow: hidden;
  403. }
  404. .modal-checkuser section {
  405. padding: 10px;
  406. justify-content: center;
  407. }
  408. .modal-checkuser section h1 {
  409. width: 100%;
  410. height: 40px;
  411. display: flex;
  412. align-items: center;
  413. justify-content: center;
  414. margin: 20px;
  415. border-bottom: 2px solid var(--background-buttons-color);
  416. color: var(--text-color);
  417. font-family: 'Roboto', sans-serif;
  418. font-weight: 400;
  419. }
  420. .modal-checkuser section div {
  421. width: 100%;
  422. height: 40px;
  423. display: flex;
  424. align-items: center;
  425. margin: 10px 0px;
  426. border-radius: 20px;
  427. background: var(--background-buttons-color);
  428. overflow: hidden;
  429. }
  430. .modal-checkuser section div i {
  431. width: 40px;
  432. height: 40px;
  433. display: flex;
  434. justify-content: center;
  435. align-items: center;
  436. color: var(--icons-color);
  437. }
  438. .modal-checkuser section div span {
  439. width: calc(100% - 40px);
  440. height: 100%;
  441. display: flex;
  442. align-items: center;
  443. color: var(--text-color);
  444. font-family: 'Roboto', sans-serif;
  445. }
  446. .modal-configs section {
  447. width: 100%;
  448. height: calc(100% - 40px);
  449. overflow-y: auto;
  450. }
  451. .modal-configs section div {
  452. width: 100%;
  453. height: auto;
  454. margin-top: 10px;
  455. display: flex;
  456. flex-direction: column;
  457. align-items: center;
  458. }
  459. .modal-configs section div h1.title {
  460. width: 90%;
  461. min-height: 30px;
  462. display: flex;
  463. justify-content: center;
  464. align-items: center;
  465. margin: 10px 0px;
  466. margin-top: 10px;
  467. border-radius: 15px;
  468. color: var(--text-color);
  469. font-family: 'Roboto', sans-serif;
  470. font-size: 0.9rem;
  471. background: var(--background-buttons-color);
  472. }
  473. .modal-configs section div ul {
  474. width: 100%;
  475. height: auto;
  476. margin-top: 5px;
  477. padding: 0px 10px;
  478. border-radius: 15px;
  479. }
  480. .modal-configs section div ul li {
  481. width: 100%;
  482. height: 60px;
  483. min-height: 60px;
  484. display: flex;
  485. align-items: center;
  486. margin: 0px 0px 10px 0px;
  487. padding: 5px;
  488. padding-left: 15px;
  489. border-radius: 30px;
  490. overflow: hidden;
  491. background: #000;
  492. }
  493. .modal-configs section ul li img {
  494. width: 30px;
  495. height: 30px;
  496. }
  497. .modal-configs section ul li div {
  498. width: calc(100% - 40px);
  499. height: 40px;
  500. margin-left: 5px;
  501. display: flex;
  502. flex-direction: column;
  503. align-items: flex-start;
  504. overflow: hidden;
  505. }
  506. .modal-configs section ul li div h1 {
  507. color: var(--text-color);
  508. font-size: 0.7rem;
  509. font-weight: 600;
  510. font-family: 'Roboto', sans-serif;
  511. }
  512. .modal-configs section ul li div p {
  513. color: var(--text-color);
  514. font-family: 'Roboto', sans-serif;
  515. font-size: 0.6rem;
  516. font-weight: 400;
  517. }
  518. .modal-alert-clear-data section,
  519. .modal-error-alert section,
  520. .modal-status-vpn section,
  521. .modal-loading section {
  522. width: 100%;
  523. height: calc(100% - 40px);
  524. display: flex;
  525. flex-direction: column;
  526. align-items: center;
  527. justify-content: center;
  528. }
  529. .modal-alert-clear-data section svg,
  530. .modal-error-alert section svg {
  531. width: 128px;
  532. height: auto;
  533. color: var(--text-alert-color);
  534. }
  535. .modal-alert-clear-data section h1,
  536. .modal-error-alert section h1 {
  537. margin: 10px 0px;
  538. color: var(--text-alert-color);
  539. font-family: 'Roboto', sans-serif;
  540. }
  541. .modal-alert-clear-data section p,
  542. .modal-error-alert section p {
  543. height: 145px;
  544. max-height: 145px;
  545. overflow-y: auto;
  546. margin-bottom: 10px;
  547. padding: 10px;
  548. color: var(--text-color);
  549. font-family: 'Roboto', sans-serif;
  550. font-weight: 300;
  551. }
  552. .modal-error-alert section p {
  553. text-align: center;
  554. }
  555. .modal-alert-clear-data section div {
  556. width: 95%;
  557. height: auto;
  558. margin-top: 10px;
  559. display: flex;
  560. align-items: center;
  561. justify-content: center;
  562. gap: 10px;
  563. }
  564. .modal-alert-clear-data section div button {
  565. width: 150px;
  566. height: 45px;
  567. display: flex;
  568. align-items: center;
  569. justify-content: center;
  570. padding: 0px 5px;
  571. border: 0;
  572. border-radius: 20px;
  573. background: var(--background-buttons-color);
  574. }
  575. .modal-alert-clear-data section div button svg {
  576. width: 16px;
  577. height: auto;
  578. margin-left: 6px;
  579. color: var(--icons-color);
  580. }
  581. .modal-alert-clear-data section div button span {
  582. margin-left: 5px;
  583. color: var(--text-color);
  584. font-family: 'Roboto', sans-serif;
  585. font-size: 0.7rem;
  586. }
  587. .modal-status-vpn section {
  588. position: relative;
  589. }
  590. .modal-status-vpn section div.loading-status,
  591. .modal-loading section div {
  592. width: 70px;
  593. height: 70px;
  594. position: relative;
  595. border: 4px solid var(--border-loading-color);
  596. border-radius: 50%;
  597. border-top: 4px solid transparent;
  598. animation: spin 1s infinite linear;
  599. }
  600. .modal-status-vpn section div.loading-status svg,
  601. .modal-loading section svg {
  602. width: 100%;
  603. height: 100%;
  604. display: flex;
  605. justify-content: center;
  606. align-items: center;
  607. color: var(--icons-color);
  608. padding: 15px;
  609. position: absolute;
  610. top: auto;
  611. left: auto;
  612. right: auto;
  613. bottom: auto;
  614. animation: spin 1s infinite linear reverse;
  615. }
  616. .modal-status-vpn section h1 {
  617. margin-top: 15%;
  618. color: var(--text-color);
  619. font-family: 'Roboto', sans-serif;
  620. }
  621. @keyframes spin {
  622. 0% {
  623. transform: rotate(0deg);
  624. }
  625. 100% {
  626. transform: rotate(360deg);
  627. }
  628. }
  629. .boingInUp {
  630. -webkit-animation-name: boingInUp;
  631. animation-name: boingInUp;
  632. }
  633. @-webkit-keyframes boingInUp {
  634. 0% {
  635. opacity: 0;
  636. transform: perspective(800px) rotateX(-90deg);
  637. transform-origin: 50% 0;
  638. }
  639. 50% {
  640. opacity: 1;
  641. transform: perspective(800px) rotateX(50deg);
  642. transform-origin: 50% 0;
  643. }
  644. to {
  645. opacity: 1;
  646. transform: perspective(800px) rotateX(0deg);
  647. transform-origin: 50% 0;
  648. }
  649. }
  650. @keyframes boingInUp {
  651. 0% {
  652. opacity: 0;
  653. transform: perspective(800px) rotateX(-90deg);
  654. transform-origin: 50% 0;
  655. }
  656. 50% {
  657. opacity: 1;
  658. transform: perspective(800px) rotateX(50deg);
  659. transform-origin: 50% 0;
  660. }
  661. to {
  662. opacity: 1;
  663. transform: perspective(800px) rotateX(0deg);
  664. transform-origin: 50% 0;
  665. }
  666. }
  667. .boingOutDown {
  668. -webkit-animation-name: boingOutDown;
  669. animation-name: boingOutDown;
  670. }
  671. @-webkit-keyframes boingOutDown {
  672. 0% {
  673. opacity: 1;
  674. transform: perspective(800px) rotateX(0deg) rotateY(0deg);
  675. transform-origin: 100% 100%;
  676. }
  677. 20% {
  678. opacity: 1;
  679. transform: perspective(800px) rotateX(0deg) rotateY(10deg);
  680. transform-origin: 100% 100%;
  681. }
  682. 30% {
  683. opacity: 1;
  684. transform: perspective(800px) rotateX(0deg) rotateY(0deg);
  685. transform-origin: 0 100%;
  686. }
  687. 40% {
  688. opacity: 1;
  689. transform: perspective(800px) rotateX(10deg) rotateY(10deg);
  690. transform-origin: 0 100%;
  691. }
  692. to {
  693. opacity: 0;
  694. transform: perspective(800px) rotateX(90deg) rotateY(0deg);
  695. transform-origin: 100% 100%;
  696. }
  697. }
  698. @keyframes boingOutDown {
  699. 0% {
  700. opacity: 1;
  701. transform: perspective(800px) rotateX(0deg) rotateY(0deg);
  702. transform-origin: 100% 100%;
  703. }
  704. 20% {
  705. opacity: 1;
  706. transform: perspective(800px) rotateX(0deg) rotateY(10deg);
  707. transform-origin: 100% 100%;
  708. }
  709. 30% {
  710. opacity: 1;
  711. transform: perspective(800px) rotateX(0deg) rotateY(0deg);
  712. transform-origin: 0 100%;
  713. }
  714. 40% {
  715. opacity: 1;
  716. transform: perspective(800px) rotateX(10deg) rotateY(10deg);
  717. transform-origin: 0 100%;
  718. }
  719. to {
  720. opacity: 0;
  721. transform: perspective(800px) rotateX(90deg) rotateY(0deg);
  722. transform-origin: 100% 100%;
  723. }
  724. }
  725. .magictime {
  726. -webkit-animation-duration: 1s;
  727. animation-duration: 1s;
  728. -webkit-animation-fill-mode: both;
  729. animation-fill-mode: both;
  730. }
  731. @media (prefers-reduced-motion), (print) {
  732. .magictime {
  733. -webkit-animation: unset !important;
  734. animation: unset !important;
  735. transition: none !important;
  736. }
  737. }
  738. @media (max-width: 375px) {
  739. .container form div {
  740. height: 35px;
  741. }
  742. .form-buttons button {
  743. height: 35px;
  744. }
  745. .home-menu button {
  746. height: 35px;
  747. }
  748. }
  749. </style>
  750. </head>
  751. <body>
  752. <main>
  753. <section class="container-logo">
  754. <!-- PARA TROCAR A LOGO É SÓ COLOCAR UM LINK COM A IMAGEM DIRETO NO SRC -->
  755. <img id="app-logo" src="" alt="Logo do app" />
  756. </section>
  757. <section class="container">
  758. <header>
  759. <button>Log-in</button>
  760. <button id="configuracao">Configurações</button>
  761. </header>
  762. <form>
  763. <div id="operadora">
  764. <svg
  765. xmlns="http://www.w3.org/2000/svg"
  766. fill="currentColor"
  767. class="bi bi-ethernet"
  768. viewBox="0 0 16 16"
  769. >
  770. <path
  771. d="M14 13.5v-7a.5.5 0 0 0-.5-.5H12V4.5a.5.5 0 0 0-.5-.5h-1v-.5A.5.5 0 0 0 10 3H6a.5.5 0 0 0-.5.5V4h-1a.5.5 0 0 0-.5.5V6H2.5a.5.5 0 0 0-.5.5v7a.5.5 0 0 0 .5.5h11a.5.5 0 0 0 .5-.5ZM3.75 11h.5a.25.25 0 0 1 .25.25v1.5a.25.25 0 0 1-.25.25h-.5a.25.25 0 0 1-.25-.25v-1.5a.25.25 0 0 1 .25-.25Zm2 0h.5a.25.25 0 0 1 .25.25v1.5a.25.25 0 0 1-.25.25h-.5a.25.25 0 0 1-.25-.25v-1.5a.25.25 0 0 1 .25-.25Zm1.75.25a.25.25 0 0 1 .25-.25h.5a.25.25 0 0 1 .25.25v1.5a.25.25 0 0 1-.25.25h-.5a.25.25 0 0 1-.25-.25v-1.5ZM9.75 11h.5a.25.25 0 0 1 .25.25v1.5a.25.25 0 0 1-.25.25h-.5a.25.25 0 0 1-.25-.25v-1.5a.25.25 0 0 1 .25-.25Zm1.75.25a.25.25 0 0 1 .25-.25h.5a.25.25 0 0 1 .25.25v1.5a.25.25 0 0 1-.25.25h-.5a.25.25 0 0 1-.25-.25v-1.5Z"
  772. />
  773. <path
  774. d="M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2ZM1 2a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2Z"
  775. />
  776. </svg>
  777. <input
  778. id="operator-selected"
  779. type="text"
  780. placeholder="Escolha sua operadora"
  781. readonly
  782. />
  783. </div>
  784. <div id="user-container">
  785. <svg
  786. xmlns="http://www.w3.org/2000/svg"
  787. width="16"
  788. height="16"
  789. fill="currentColor"
  790. class="bi bi-person"
  791. viewBox="0 0 16 16"
  792. >
  793. <path
  794. d="M8 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6Zm2-3a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm4 8c0 1-1 1-1 1H3s-1 0-1-1 1-4 6-4 6 3 6 4Zm-1-.004c-.001-.246-.154-.986-.832-1.664C11.516 10.68 10.289 10 8 10c-2.29 0-3.516.68-4.168 1.332-.678.678-.83 1.418-.832 1.664h10Z"
  795. />
  796. </svg>
  797. <input id="user" type="text" placeholder="Usuário" />
  798. </div>
  799. <div id="password-container">
  800. <svg
  801. xmlns="http://www.w3.org/2000/svg"
  802. width="16"
  803. height="16"
  804. fill="currentColor"
  805. class="bi bi-key"
  806. viewBox="0 0 16 16"
  807. >
  808. <path
  809. d="M0 8a4 4 0 0 1 7.465-2H14a.5.5 0 0 1 .354.146l1.5 1.5a.5.5 0 0 1 0 .708l-1.5 1.5a.5.5 0 0 1-.708 0L13 9.207l-.646.647a.5.5 0 0 1-.708 0L11 9.207l-.646.647a.5.5 0 0 1-.708 0L9 9.207l-.646.647A.5.5 0 0 1 8 10h-.535A4 4 0 0 1 0 8zm4-3a3 3 0 1 0 2.712 4.285A.5.5 0 0 1 7.163 9h.63l.853-.854a.5.5 0 0 1 .708 0l.646.647.646-.647a.5.5 0 0 1 .708 0l.646.647.646-.647a.5.5 0 0 1 .708 0l.646.647.793-.793-1-1h-6.63a.5.5 0 0 1-.451-.285A3 3 0 0 0 4 5z"
  810. />
  811. <path d="M4 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0z" />
  812. </svg>
  813. <input id="password" type="password" placeholder="Senha" />
  814. </div>
  815. <div id="uuid-container">
  816. <svg
  817. xmlns="http://www.w3.org/2000/svg"
  818. width="16"
  819. height="16"
  820. fill="currentColor"
  821. class="bi bi-fingerprint"
  822. viewBox="0 0 16 16"
  823. >
  824. <path
  825. d="M8.06 6.5a.5.5 0 0 1 .5.5v.776a11.5 11.5 0 0 1-.552 3.519l-1.331 4.14a.5.5 0 0 1-.952-.305l1.33-4.141a10.5 10.5 0 0 0 .504-3.213V7a.5.5 0 0 1 .5-.5Z"
  826. />
  827. <path
  828. d="M6.06 7a2 2 0 1 1 4 0 .5.5 0 1 1-1 0 1 1 0 1 0-2 0v.332c0 .409-.022.816-.066 1.221A.5.5 0 0 1 6 8.447c.04-.37.06-.742.06-1.115V7Zm3.509 1a.5.5 0 0 1 .487.513 11.5 11.5 0 0 1-.587 3.339l-1.266 3.8a.5.5 0 0 1-.949-.317l1.267-3.8a10.5 10.5 0 0 0 .535-3.048A.5.5 0 0 1 9.569 8Zm-3.356 2.115a.5.5 0 0 1 .33.626L5.24 14.939a.5.5 0 1 1-.955-.296l1.303-4.199a.5.5 0 0 1 .625-.329Z"
  829. />
  830. <path
  831. d="M4.759 5.833A3.501 3.501 0 0 1 11.559 7a.5.5 0 0 1-1 0 2.5 2.5 0 0 0-4.857-.833.5.5 0 1 1-.943-.334Zm.3 1.67a.5.5 0 0 1 .449.546 10.72 10.72 0 0 1-.4 2.031l-1.222 4.072a.5.5 0 1 1-.958-.287L4.15 9.793a9.72 9.72 0 0 0 .363-1.842.5.5 0 0 1 .546-.449Zm6 .647a.5.5 0 0 1 .5.5c0 1.28-.213 2.552-.632 3.762l-1.09 3.145a.5.5 0 0 1-.944-.327l1.089-3.145c.382-1.105.578-2.266.578-3.435a.5.5 0 0 1 .5-.5Z"
  832. />
  833. <path
  834. d="M3.902 4.222a4.996 4.996 0 0 1 5.202-2.113.5.5 0 0 1-.208.979 3.996 3.996 0 0 0-4.163 1.69.5.5 0 0 1-.831-.556Zm6.72-.955a.5.5 0 0 1 .705-.052A4.99 4.99 0 0 1 13.059 7v1.5a.5.5 0 1 1-1 0V7a3.99 3.99 0 0 0-1.386-3.028.5.5 0 0 1-.051-.705ZM3.68 5.842a.5.5 0 0 1 .422.568c-.029.192-.044.39-.044.59 0 .71-.1 1.417-.298 2.1l-1.14 3.923a.5.5 0 1 1-.96-.279L2.8 8.821A6.531 6.531 0 0 0 3.058 7c0-.25.019-.496.054-.736a.5.5 0 0 1 .568-.422Zm8.882 3.66a.5.5 0 0 1 .456.54c-.084 1-.298 1.986-.64 2.934l-.744 2.068a.5.5 0 0 1-.941-.338l.745-2.07a10.51 10.51 0 0 0 .584-2.678.5.5 0 0 1 .54-.456Z"
  835. />
  836. <path
  837. d="M4.81 1.37A6.5 6.5 0 0 1 14.56 7a.5.5 0 1 1-1 0 5.5 5.5 0 0 0-8.25-4.765.5.5 0 0 1-.5-.865Zm-.89 1.257a.5.5 0 0 1 .04.706A5.478 5.478 0 0 0 2.56 7a.5.5 0 0 1-1 0c0-1.664.626-3.184 1.655-4.333a.5.5 0 0 1 .706-.04ZM1.915 8.02a.5.5 0 0 1 .346.616l-.779 2.767a.5.5 0 1 1-.962-.27l.778-2.767a.5.5 0 0 1 .617-.346Zm12.15.481a.5.5 0 0 1 .49.51c-.03 1.499-.161 3.025-.727 4.533l-.07.187a.5.5 0 0 1-.936-.351l.07-.187c.506-1.35.634-2.74.663-4.202a.5.5 0 0 1 .51-.49Z"
  838. />
  839. </svg>
  840. <input id="uuid" type="password" placeholder="UUID" />
  841. </div>
  842. <section class="form-buttons">
  843. <button id="update-config" type="button" title="Atualizar">
  844. <svg
  845. xmlns="http://www.w3.org/2000/svg"
  846. width="16"
  847. height="16"
  848. fill="currentColor"
  849. class="bi bi-arrow-clockwise"
  850. viewBox="0 0 16 16"
  851. >
  852. <path
  853. fill-rule="evenodd"
  854. d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z"
  855. />
  856. <path
  857. d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z"
  858. />
  859. </svg>
  860. <span>ATUALIZAR</span>
  861. </button>
  862. <button id="logs-button" type="button" title="Registro">
  863. <svg
  864. xmlns="http://www.w3.org/2000/svg"
  865. width="16"
  866. height="16"
  867. fill="currentColor"
  868. class="bi bi-journal"
  869. viewBox="0 0 16 16"
  870. >
  871. <path
  872. d="M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z"
  873. />
  874. <path
  875. d="M1 5v-.5a.5.5 0 0 1 1 0V5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0V8h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0v.5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1z"
  876. />
  877. </svg>
  878. <span>REGISTRO</span>
  879. </button>
  880. <button id="vpn-start" type="button" title="Conectar">
  881. <svg
  882. xmlns="http://www.w3.org/2000/svg"
  883. width="16"
  884. height="16"
  885. fill="currentColor"
  886. class="bi bi-plug"
  887. viewBox="0 0 16 16"
  888. >
  889. <path
  890. d="M6 0a.5.5 0 0 1 .5.5V3h3V.5a.5.5 0 0 1 1 0V3h1a.5.5 0 0 1 .5.5v3A3.5 3.5 0 0 1 8.5 10c-.002.434-.01.845-.04 1.22-.041.514-.126 1.003-.317 1.424a2.083 2.083 0 0 1-.97 1.028C6.725 13.9 6.169 14 5.5 14c-.998 0-1.61.33-1.974.718A1.922 1.922 0 0 0 3 16H2c0-.616.232-1.367.797-1.968C3.374 13.42 4.261 13 5.5 13c.581 0 .962-.088 1.218-.219.241-.123.4-.3.514-.55.121-.266.193-.621.23-1.09.027-.34.035-.718.037-1.141A3.5 3.5 0 0 1 4 6.5v-3a.5.5 0 0 1 .5-.5h1V.5A.5.5 0 0 1 6 0zM5 4v2.5A2.5 2.5 0 0 0 7.5 9h1A2.5 2.5 0 0 0 11 6.5V4H5z"
  891. />
  892. </svg>
  893. <span>CONECTAR</span>
  894. </button>
  895. </section>
  896. </form>
  897. <section class="menu">
  898. <button id="battery-optimization">
  899. <svg
  900. xmlns="http://www.w3.org/2000/svg"
  901. width="16"
  902. height="16"
  903. fill="currentColor"
  904. class="bi bi-battery-half"
  905. viewBox="0 0 16 16"
  906. >
  907. <path d="M2 6h5v4H2V6z" />
  908. <path
  909. d="M2 4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H2zm10 1a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h10zm4 3a1.5 1.5 0 0 1-1.5 1.5v-3A1.5 1.5 0 0 1 16 8z"
  910. />
  911. </svg>
  912. <span>OTIMIZAÇÃO DE BATERIA</span>
  913. </button>
  914. <button id="apn-configuration">
  915. <svg
  916. xmlns="http://www.w3.org/2000/svg"
  917. width="16"
  918. height="16"
  919. fill="currentColor"
  920. class="bi bi-wrench-adjustable"
  921. viewBox="0 0 16 16"
  922. >
  923. <path
  924. d="M16 4.5a4.492 4.492 0 0 1-1.703 3.526L13 5l2.959-1.11c.027.2.041.403.041.61Z"
  925. />
  926. <path
  927. 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 9Zm-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.376ZM3 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"
  928. />
  929. </svg>
  930. <span>CONFIGURAR APN</span>
  931. </button>
  932. <button id="checkuser">
  933. <svg
  934. xmlns="http://www.w3.org/2000/svg"
  935. width="16"
  936. height="16"
  937. fill="currentColor"
  938. class="bi bi-person-lines-fill"
  939. viewBox="0 0 16 16"
  940. >
  941. <path
  942. d="M6 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-5 6s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H1zM11 3.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 0 1h-4a.5.5 0 0 1-.5-.5zm.5 2.5a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1h-4zm2 3a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-2zm0 3a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-2z"
  943. />
  944. </svg>
  945. <span>DETALHES DO USUÁRIO</span>
  946. </button>
  947. <button id="speedtest-button">
  948. <svg
  949. xmlns="http://www.w3.org/2000/svg"
  950. width="16"
  951. height="16"
  952. fill="currentColor"
  953. class="bi bi-router"
  954. viewBox="0 0 16 16"
  955. >
  956. <path
  957. 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"
  958. />
  959. <path
  960. 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.707ZM2.5 11a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm4.5-.5a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0Zm2.5.5a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm1.5-.5a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0Zm2 0a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0Z"
  961. />
  962. <path
  963. 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.342ZM14.5 9a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.5.5h-13a.5.5 0 0 1-.5-.5v-2a.5.5 0 0 1 .5-.5h13Z"
  964. />
  965. <path d="M8.5 5.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z" />
  966. </svg>
  967. <span>TESTAR REDE</span>
  968. </button>
  969. <button id="clean-data-app">
  970. <svg
  971. xmlns="http://www.w3.org/2000/svg"
  972. width="16"
  973. height="16"
  974. fill="currentColor"
  975. class="bi bi-trash"
  976. viewBox="0 0 16 16"
  977. >
  978. <path
  979. d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5Zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5Zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6Z"
  980. />
  981. <path
  982. d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1ZM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118ZM2.5 3h11V2h-11v1Z"
  983. />
  984. </svg>
  985. <span>LIMPAR DADOS</span>
  986. </button>
  987. </section>
  988. </section>
  989. <section class="status-vpn">
  990. <section>
  991. <svg
  992. xmlns="http://www.w3.org/2000/svg"
  993. width="16"
  994. height="16"
  995. fill="currentColor"
  996. class="bi bi-outlet"
  997. viewBox="0 0 16 16"
  998. >
  999. <path
  1000. d="M3.34 2.994c.275-.338.68-.494 1.074-.494h7.172c.393 0 .798.156 1.074.494.578.708 1.84 2.534 1.84 5.006 0 2.472-1.262 4.297-1.84 5.006-.276.338-.68.494-1.074.494H4.414c-.394 0-.799-.156-1.074-.494C2.762 12.297 1.5 10.472 1.5 8c0-2.472 1.262-4.297 1.84-5.006zm1.074.506a.376.376 0 0 0-.299.126C3.599 4.259 2.5 5.863 2.5 8c0 2.137 1.099 3.74 1.615 4.374.06.073.163.126.3.126h7.17c.137 0 .24-.053.3-.126.516-.633 1.615-2.237 1.615-4.374 0-2.137-1.099-3.74-1.615-4.374a.376.376 0 0 0-.3-.126h-7.17z"
  1001. />
  1002. <path
  1003. d="M6 5.5a.5.5 0 0 1 .5.5v1.5a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm4 0a.5.5 0 0 1 .5.5v1.5a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zM7 10v1h2v-1a1 1 0 0 0-2 0z"
  1004. />
  1005. </svg>
  1006. <h1>DESCONECTADO</h1>
  1007. </section>
  1008. </section>
  1009. <section class="home-menu">
  1010. <button id="gen-test">
  1011. <svg
  1012. xmlns="http://www.w3.org/2000/svg"
  1013. width="16"
  1014. height="16"
  1015. fill="currentColor"
  1016. class="bi bi-cloud"
  1017. viewBox="0 0 16 16"
  1018. >
  1019. <path
  1020. d="M4.406 3.342A5.53 5.53 0 0 1 8 2c2.69 0 4.923 2 5.166 4.579C14.758 6.804 16 8.137 16 9.773 16 11.569 14.502 13 12.687 13H3.781C1.708 13 0 11.366 0 9.318c0-1.763 1.266-3.223 2.942-3.593.143-.863.698-1.723 1.464-2.383zm.653.757c-.757.653-1.153 1.44-1.153 2.056v.448l-.445.049C2.064 6.805 1 7.952 1 9.318 1 10.785 2.23 12 3.781 12h8.906C13.98 12 15 10.988 15 9.773c0-1.216-1.02-2.228-2.313-2.228h-.5v-.5C12.188 4.825 10.328 3 8 3a4.53 4.53 0 0 0-2.941 1.1z"
  1021. />
  1022. </svg>
  1023. <span>Gerar Teste Grátis</span>
  1024. </button>
  1025. <button id="buy-access">
  1026. <svg
  1027. xmlns="http://www.w3.org/2000/svg"
  1028. width="16"
  1029. height="16"
  1030. fill="currentColor"
  1031. class="bi bi-wallet2"
  1032. viewBox="0 0 16 16"
  1033. >
  1034. <path
  1035. d="M12.136.326A1.5 1.5 0 0 1 14 1.78V3h.5A1.5 1.5 0 0 1 16 4.5v9a1.5 1.5 0 0 1-1.5 1.5h-13A1.5 1.5 0 0 1 0 13.5v-9a1.5 1.5 0 0 1 1.432-1.499L12.136.326zM5.562 3H13V1.78a.5.5 0 0 0-.621-.484L5.562 3zM1.5 4a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 .5.5h13a.5.5 0 0 0 .5-.5v-9a.5.5 0 0 0-.5-.5h-13z"
  1036. />
  1037. </svg>
  1038. <span>Comprar Acesso</span>
  1039. </button>
  1040. <button id="contact-support">
  1041. <svg
  1042. xmlns="http://www.w3.org/2000/svg"
  1043. width="16"
  1044. height="16"
  1045. fill="currentColor"
  1046. class="bi bi-whatsapp"
  1047. viewBox="0 0 16 16"
  1048. >
  1049. <path
  1050. 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"
  1051. />
  1052. </svg>
  1053. <span>Pedir Suporte</span>
  1054. </button>
  1055. </section>
  1056. <section class="modal-speedtest">
  1057. <header>
  1058. <svg
  1059. xmlns="http://www.w3.org/2000/svg"
  1060. width="16"
  1061. height="16"
  1062. fill="currentColor"
  1063. class="bi bi-x-lg"
  1064. id="close"
  1065. viewBox="0 0 16 16"
  1066. >
  1067. <path
  1068. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1069. />
  1070. </svg>
  1071. </header>
  1072. <section>
  1073. <div class="loading"></div>
  1074. <iframe title="fast" id="iframe-speedtest"></iframe>
  1075. </section>
  1076. </section>
  1077. <section class="modal-configs">
  1078. <header>
  1079. <svg
  1080. xmlns="http://www.w3.org/2000/svg"
  1081. width="16"
  1082. height="16"
  1083. fill="currentColor"
  1084. class="bi bi-x-lg"
  1085. viewBox="0 0 16 16"
  1086. >
  1087. <path
  1088. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1089. />
  1090. </svg>
  1091. </header>
  1092. <section>
  1093. <div>
  1094. <h1 class="title">VIVO</h1>
  1095. <ul>
  1096. <li>
  1097. <img src="https://basteon.me/assets/images/app/operadoras/VIVO.png" alt="icon" />
  1098. <div>
  1099. <h1>VIVO 1 ➜ CONFIG 1 ➜ SV01.QFN</h1>
  1100. <p>SERVIDOR: ?? ➜ LATÊNCIA BAIXA</p>
  1101. </div>
  1102. </li>
  1103. <li>
  1104. <img src="https://basteon.me/assets/images/app/operadoras/VIVO.png" alt="icon" />
  1105. <div>
  1106. <h1>VIVO 1 ➜ CONFIG 1 ➜ SV01.QFN</h1>
  1107. <p>SERVIDOR: ?? ➜ LATÊNCIA BAIXA</p>
  1108. </div>
  1109. </li>
  1110. <li>
  1111. <img src="https://basteon.me/assets/images/app/operadoras/VIVO.png" alt="icon" />
  1112. <div>
  1113. <h1>VIVO 1 ➜ CONFIG 1 ➜ SV01.QFN</h1>
  1114. <p>SERVIDOR: ?? ➜ LATÊNCIA BAIXA</p>
  1115. </div>
  1116. </li>
  1117. </ul>
  1118. </div>
  1119. <div>
  1120. <h1 class="title">TIM</h1>
  1121. <ul>
  1122. <li>
  1123. <img src="https://basteon.me/assets/images/app/operadoras/VIVO.png" alt="icon" />
  1124. <div>
  1125. <h1>TIM 1 ➜ CONFIG 1 ➜ SV01.QFN</h1>
  1126. <p>SERVIDOR: ?? ➜ LATÊNCIA BAIXA</p>
  1127. </div>
  1128. </li>
  1129. <li>
  1130. <img src="https://basteon.me/assets/images/app/operadoras/VIVO.png" alt="icon" />
  1131. <div>
  1132. <h1>TIM 1 ➜ CONFIG 1 ➜ SV01.QFN</h1>
  1133. <p>SERVIDOR: ?? ➜ LATÊNCIA BAIXA</p>
  1134. </div>
  1135. </li>
  1136. <li>
  1137. <img src="https://basteon.me/assets/images/app/operadoras/VIVO.png" alt="icon" />
  1138. <div>
  1139. <h1>TIM 1 ➜ CONFIG 1 ➜ SV01.QFN</h1>
  1140. <p>SERVIDOR: ?? ➜ LATÊNCIA BAIXA</p>
  1141. </div>
  1142. </li>
  1143. </ul>
  1144. </div>
  1145. <div>
  1146. <h1 class="title">CLARO</h1>
  1147. <ul>
  1148. <li>
  1149. <img src="https://basteon.me/assets/images/app/operadoras/VIVO.png" alt="icon" />
  1150. <div>
  1151. <h1>CLARO 1 ➜ CONFIG 1 ➜ SV01.QFN</h1>
  1152. <p>SERVIDOR: ?? ➜ LATÊNCIA BAIXA</p>
  1153. </div>
  1154. </li>
  1155. <li>
  1156. <img src="https://basteon.me/assets/images/app/operadoras/VIVO.png" alt="icon" />
  1157. <div>
  1158. <h1>CLARO 1 ➜ CONFIG 1 ➜ SV01.QFN</h1>
  1159. <p>SERVIDOR: ?? ➜ LATÊNCIA BAIXA</p>
  1160. </div>
  1161. </li>
  1162. <li>
  1163. <img src="https://basteon.me/assets/images/app/operadoras/VIVO.png" alt="icon" />
  1164. <div>
  1165. <h1>CLARO 1 ➜ CONFIG 1 ➜ SV01.QFN</h1>
  1166. <p>SERVIDOR: ?? ➜ LATÊNCIA BAIXA</p>
  1167. </div>
  1168. </li>
  1169. </ul>
  1170. </div>
  1171. </section>
  1172. </section>
  1173. <section class="modal-logs">
  1174. <header>
  1175. <svg
  1176. xmlns="http://www.w3.org/2000/svg"
  1177. width="16"
  1178. height="16"
  1179. fill="currentColor"
  1180. class="bi bi-x-lg"
  1181. viewBox="0 0 16 16"
  1182. >
  1183. <path
  1184. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1185. />
  1186. </svg>
  1187. </header>
  1188. <section>
  1189. <p></p>
  1190. <button class="clear-logs" type="button">
  1191. <svg
  1192. xmlns="http://www.w3.org/2000/svg"
  1193. width="16"
  1194. height="16"
  1195. fill="currentColor"
  1196. class="bi bi-stars"
  1197. viewBox="0 0 16 16"
  1198. >
  1199. <path
  1200. d="M7.657 6.247c.11-.33.576-.33.686 0l.645 1.937a2.89 2.89 0 0 0 1.829 1.828l1.936.645c.33.11.33.576 0 .686l-1.937.645a2.89 2.89 0 0 0-1.828 1.829l-.645 1.936a.361.361 0 0 1-.686 0l-.645-1.937a2.89 2.89 0 0 0-1.828-1.828l-1.937-.645a.361.361 0 0 1 0-.686l1.937-.645a2.89 2.89 0 0 0 1.828-1.828l.645-1.937zM3.794 1.148a.217.217 0 0 1 .412 0l.387 1.162c.173.518.579.924 1.097 1.097l1.162.387a.217.217 0 0 1 0 .412l-1.162.387A1.734 1.734 0 0 0 4.593 5.69l-.387 1.162a.217.217 0 0 1-.412 0L3.407 5.69A1.734 1.734 0 0 0 2.31 4.593l-1.162-.387a.217.217 0 0 1 0-.412l1.162-.387A1.734 1.734 0 0 0 3.407 2.31l.387-1.162zM10.863.099a.145.145 0 0 1 .274 0l.258.774c.115.346.386.617.732.732l.774.258a.145.145 0 0 1 0 .274l-.774.258a1.156 1.156 0 0 0-.732.732l-.258.774a.145.145 0 0 1-.274 0l-.258-.774a1.156 1.156 0 0 0-.732-.732L9.1 2.137a.145.145 0 0 1 0-.274l.774-.258c.346-.115.617-.386.732-.732L10.863.1z"
  1201. />
  1202. </svg>
  1203. <span>Limpar Registro</span>
  1204. </button>
  1205. </section>
  1206. </section>
  1207. <section class="modal-alert-clear-data">
  1208. <header>
  1209. <svg
  1210. xmlns="http://www.w3.org/2000/svg"
  1211. width="16"
  1212. height="16"
  1213. fill="currentColor"
  1214. class="bi bi-x-lg"
  1215. viewBox="0 0 16 16"
  1216. >
  1217. <path
  1218. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1219. />
  1220. </svg>
  1221. </header>
  1222. <section>
  1223. <svg
  1224. xmlns="http://www.w3.org/2000/svg"
  1225. width="16"
  1226. height="16"
  1227. fill="currentColor"
  1228. class="bi bi-exclamation-triangle"
  1229. viewBox="0 0 16 16"
  1230. >
  1231. <path
  1232. d="M7.938 2.016A.13.13 0 0 1 8.002 2a.13.13 0 0 1 .063.016.146.146 0 0 1 .054.057l6.857 11.667c.036.06.035.124.002.183a.163.163 0 0 1-.054.06.116.116 0 0 1-.066.017H1.146a.115.115 0 0 1-.066-.017.163.163 0 0 1-.054-.06.176.176 0 0 1 .002-.183L7.884 2.073a.147.147 0 0 1 .054-.057zm1.044-.45a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566z"
  1233. />
  1234. <path
  1235. d="M7.002 12a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 5.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995z"
  1236. />
  1237. </svg>
  1238. <h1>ATENÇÃO</h1>
  1239. <p>
  1240. Ao limpar os dados do aplicativo, o aplicativo será redefinido como se estivesse sendo
  1241. instalado pela primeira vez! Essa ação é irreversível. Será necessário inserir o usuário
  1242. e senha novamente e atualizar o aplicativo para carregar as configurações atuais de
  1243. conexão VPN.
  1244. </p>
  1245. <div>
  1246. <button type="button" id="back-clear-data-button">
  1247. <svg
  1248. xmlns="http://www.w3.org/2000/svg"
  1249. width="16"
  1250. height="16"
  1251. fill="currentColor"
  1252. class="bi bi-caret-left"
  1253. viewBox="0 0 16 16"
  1254. >
  1255. <path
  1256. d="M10 12.796V3.204L4.519 8 10 12.796zm-.659.753-5.48-4.796a1 1 0 0 1 0-1.506l5.48-4.796A1 1 0 0 1 11 3.204v9.592a1 1 0 0 1-1.659.753z"
  1257. />
  1258. </svg>
  1259. <span>VOLTAR</span>
  1260. </button>
  1261. <button type="button" id="clear-data-button-confirm">
  1262. <svg
  1263. xmlns="http://www.w3.org/2000/svg"
  1264. width="16"
  1265. height="16"
  1266. fill="currentColor"
  1267. class="bi bi-trash"
  1268. viewBox="0 0 16 16"
  1269. >
  1270. <path
  1271. d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5Zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5Zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6Z"
  1272. />
  1273. <path
  1274. d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1ZM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118ZM2.5 3h11V2h-11v1Z"
  1275. />
  1276. </svg>
  1277. <span>LIMPAR DADOS</span>
  1278. </button>
  1279. </div>
  1280. </section>
  1281. </section>
  1282. <section class="modal-error-alert">
  1283. <header>
  1284. <svg
  1285. xmlns="http://www.w3.org/2000/svg"
  1286. width="16"
  1287. height="16"
  1288. fill="currentColor"
  1289. class="bi bi-x-lg"
  1290. viewBox="0 0 16 16"
  1291. >
  1292. <path
  1293. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1294. />
  1295. </svg>
  1296. </header>
  1297. <section></section>
  1298. </section>
  1299. <section class="modal-status-vpn">
  1300. <header>
  1301. <svg
  1302. xmlns="http://www.w3.org/2000/svg"
  1303. width="16"
  1304. height="16"
  1305. fill="currentColor"
  1306. class="bi bi-x-lg"
  1307. id="close-modal-status-vpn"
  1308. viewBox="0 0 16 16"
  1309. >
  1310. <path
  1311. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1312. />
  1313. </svg>
  1314. </header>
  1315. <section class="modal-status-content">
  1316. <div class="loading-status">
  1317. <svg
  1318. xmlns="http://www.w3.org/2000/svg"
  1319. width="16"
  1320. height="16"
  1321. fill="currentColor"
  1322. class="bi bi-shield-x"
  1323. viewBox="0 0 16 16"
  1324. >
  1325. <path
  1326. d="M5.338 1.59a61.44 61.44 0 0 0-2.837.856.481.481 0 0 0-.328.39c-.554 4.157.726 7.19 2.253 9.188a10.725 10.725 0 0 0 2.287 2.233c.346.244.652.42.893.533.12.057.218.095.293.118a.55.55 0 0 0 .101.025.615.615 0 0 0 .1-.025c.076-.023.174-.061.294-.118.24-.113.547-.29.893-.533a10.726 10.726 0 0 0 2.287-2.233c1.527-1.997 2.807-5.031 2.253-9.188a.48.48 0 0 0-.328-.39c-.651-.213-1.75-.56-2.837-.855C9.552 1.29 8.531 1.067 8 1.067c-.53 0-1.552.223-2.662.524zM5.072.56C6.157.265 7.31 0 8 0s1.843.265 2.928.56c1.11.3 2.229.655 2.887.87a1.54 1.54 0 0 1 1.044 1.262c.596 4.477-.787 7.795-2.465 9.99a11.775 11.775 0 0 1-2.517 2.453 7.159 7.159 0 0 1-1.048.625c-.28.132-.581.24-.829.24s-.548-.108-.829-.24a7.158 7.158 0 0 1-1.048-.625 11.777 11.777 0 0 1-2.517-2.453C1.928 10.487.545 7.169 1.141 2.692A1.54 1.54 0 0 1 2.185 1.43 62.456 62.456 0 0 1 5.072.56z"
  1327. />
  1328. <path
  1329. d="M6.146 5.146a.5.5 0 0 1 .708 0L8 6.293l1.146-1.147a.5.5 0 1 1 .708.708L8.707 7l1.147 1.146a.5.5 0 0 1-.708.708L8 7.707 6.854 8.854a.5.5 0 1 1-.708-.708L7.293 7 6.146 5.854a.5.5 0 0 1 0-.708z"
  1330. />
  1331. </svg>
  1332. </div>
  1333. <h1 id="modal-status-text">CONECTADO!</h1>
  1334. </section>
  1335. </section>
  1336. <section class="modal-checkuser">
  1337. <header>
  1338. <svg
  1339. xmlns="http://www.w3.org/2000/svg"
  1340. width="16"
  1341. height="16"
  1342. fill="currentColor"
  1343. class="bi bi-x-lg"
  1344. id="close-modal-checkuser"
  1345. viewBox="0 0 16 16"
  1346. >
  1347. <path
  1348. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1349. />
  1350. </svg>
  1351. </header>
  1352. <section></section>
  1353. </section>
  1354. <section class="modal-loading">
  1355. <header>
  1356. <svg
  1357. xmlns="http://www.w3.org/2000/svg"
  1358. width="16"
  1359. height="16"
  1360. fill="currentColor"
  1361. class="bi bi-x-lg"
  1362. id="close-modal-loading"
  1363. id="close-modal-checkuser"
  1364. viewBox="0 0 16 16"
  1365. >
  1366. <path
  1367. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"
  1368. />
  1369. </svg>
  1370. </header>
  1371. <section>
  1372. <div>
  1373. <svg
  1374. xmlns="http://www.w3.org/2000/svg"
  1375. width="16"
  1376. height="16"
  1377. fill="currentColor"
  1378. class="bi bi-calendar3"
  1379. viewBox="0 0 16 16"
  1380. >
  1381. <path
  1382. d="M14 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 3.857C1 3.384 1.448 3 2 3h12c.552 0 1 .384 1 .857v10.286c0 .473-.448.857-1 .857H2c-.552 0-1-.384-1-.857V3.857z"
  1383. />
  1384. <path
  1385. d="M6.5 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"
  1386. />
  1387. </svg>
  1388. </div>
  1389. </section>
  1390. </section>
  1391. </main>
  1392. <!-- FUNÇÕES DO APP -->
  1393. <script>
  1394. const dtStatusBarHeight = () => DtGetStatusBarHeight.execute()
  1395. const dtNavbarHeight = () => DtGetNavigationBarHeight.execute()
  1396. const dtAppLogo = () => DtGetAppConfig.execute('APP_LOGO')
  1397. const dtVpnState = () => DtGetVpnState.execute()
  1398. const dtTranslateText = (label) => DtTranslateText.execute(label)
  1399. const dtAllConfigs = () => DtGetConfigs.execute()
  1400. const dtSetConfig = (id) => DtSetConfig.execute(id)
  1401. const dtGetDefaultConfig = () => DtGetDefaultConfig.execute()
  1402. const dtGetLogs = () => DtGetLogs.execute()
  1403. const dtClearLogs = () => DtClearLogs.execute()
  1404. const dtGetUsername = () => DtUsername.get()
  1405. const dtSetUsername = (username) => DtUsername.set(username)
  1406. const dtGetPassword = () => DtPassword.get()
  1407. const dtSetPassword = (password) => DtPassword.set(password)
  1408. const dtGetUUID = () => DtUuid.get()
  1409. const dtSetUUID = (uuid) => DtUuid.set(uuid)
  1410. const dtUpdate = () => DtStartAppUpdate.execute()
  1411. const dtStartVpn = () => DtExecuteVpnStart.execute()
  1412. const dtStopVpn = () => DtExecuteVpnStop.execute()
  1413. const dtBatteryOptimization = () => DtIgnoreBatteryOptimizations.execute()
  1414. const dtApnConfiguration = () => DtStartApnActivity.execute()
  1415. const dtStartCheckUser = () => DtStartCheckUser.execute()
  1416. const dtCleanDataApp = () => DtCleanApp.execute()
  1417. const dtStartWebView = (url) => DtStartWebViewActivity.execute(url)
  1418. const dtOpenBrowser = (url) => DtOpenExternalUrl.execute(url)
  1419. </script>
  1420. <!-- FUNÇÕES PARA O APP -->
  1421. <script>
  1422. const dtOnNewLogListener = () => writeModalContent()
  1423. const dtConfigClickListener = () => writeInputCarrierList()
  1424. const dtCheckUserStartedListener = () => showModalLoading()
  1425. const dtVpnStateListener = (state) => vpnState(state)
  1426. const dtCheckUserModelListener = (model) => writeModalCheckUser(model)
  1427. const dtMessageErrorListener = (model) => writeModalError(model)
  1428. </script>
  1429. <!-- FUNÇÕES DE AJUDA -->
  1430. <script>
  1431. const createSvgIcon = (iconPath, Class = '') => {
  1432. const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
  1433. svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg')
  1434. svg.setAttribute('width', '16')
  1435. svg.setAttribute('height', '16')
  1436. svg.setAttribute('fill', 'currentColor')
  1437. svg.setAttribute('viewBox', '0 0 16 16')
  1438. svg.setAttribute('class', Class)
  1439. const path = document.createElementNS('http://www.w3.org/2000/svg', 'path')
  1440. path.setAttribute('d', iconPath)
  1441. svg.appendChild(path)
  1442. return svg
  1443. }
  1444. const createListItem = (iconPath, Class = '', text) => {
  1445. const li = document.createElement('li')
  1446. const svg = createSvgIcon(iconPath, Class)
  1447. const span = document.createElement('span')
  1448. span.setAttribute('class', Class)
  1449. span.innerHTML = text
  1450. li.appendChild(svg)
  1451. li.appendChild(span)
  1452. return li
  1453. }
  1454. </script>
  1455. <!-- FUNÇÕES DO LAYOUT -->
  1456. <script>
  1457. const vpnState = (state) => {
  1458. const stateLabel = state || dtVpnState()
  1459. switch (stateLabel) {
  1460. case 'DISCONNECTED':
  1461. StartStopVPNButton.html(dtTranslateText('LBL_BTN_START'))
  1462. writeModalVpnState(disconnected())
  1463. hiddenModalVpnState()
  1464. writeStatusVpn(disconnected())
  1465. return disconnected()
  1466. case 'CONNECTING':
  1467. StartStopVPNButton.html(dtTranslateText('LBL_BTN_STOP'))
  1468. writeModalVpnState(connecting())
  1469. writeStatusVpn(connecting())
  1470. return connecting()
  1471. case 'CONNECTED':
  1472. StartStopVPNButton.html(dtTranslateText('LBL_BTN_STOP'))
  1473. writeModalVpnState(connected())
  1474. writeStatusVpn(connected())
  1475. return connected()
  1476. case 'STOPPING':
  1477. StartStopVPNButton.html(dtTranslateText('LBL_BTN_STOPPING'))
  1478. writeModalVpnState(stopping())
  1479. writeStatusVpn(stopping())
  1480. return stopping()
  1481. case 'NO_NETWORK':
  1482. StartStopVPNButton.html(dtTranslateText('LBL_BTN_STOP'))
  1483. writeModalVpnState(noNetwork())
  1484. writeStatusVpn(noNetwork())
  1485. return noNetwork()
  1486. case 'AUTH':
  1487. StartStopVPNButton.html(dtTranslateText('LBL_BTN_STOP'))
  1488. writeModalVpnState(auth())
  1489. writeStatusVpn(auth())
  1490. return auth()
  1491. case 'AUTH_FAILED':
  1492. StartStopVPNButton.html(dtTranslateText('LBL_BTN_STOP'))
  1493. writeModalVpnState(authFailed())
  1494. writeStatusVpn(authFailed())
  1495. return authFailed()
  1496. default:
  1497. return 'Não foi possível obter o status da conexão'
  1498. }
  1499. }
  1500. const showConfigMenu = () => {
  1501. const menu = document.querySelector('section.menu')
  1502. if (!menu.className.includes('boingInUp') && !menu.className.includes('boingOutDown')) {
  1503. menu.classList.add('magictime', 'boingInUp')
  1504. HomeMenu.style({ visibility: `hidden` })
  1505. } else if (menu.className.includes('boingInUp')) {
  1506. menu.classList.remove('magictime', 'boingInUp')
  1507. menu.classList.add('magictime', 'boingOutDown')
  1508. HomeMenu.style({ visibility: `visible` })
  1509. } else if (menu.className.includes('boingOutDown')) {
  1510. menu.classList.remove('magictime', 'boingOutDown')
  1511. menu.classList.add('magictime', 'boingInUp')
  1512. HomeMenu.style({ visibility: `hidden` })
  1513. } else {
  1514. console.log('ocorreu um erro')
  1515. }
  1516. }
  1517. const showModalSpeedtest = () => {
  1518. ModalSpeedtest.addClass('show')
  1519. IframeSpeedtest.attr({ src: 'https://fast.com/pt/' })
  1520. }
  1521. const hiddenModalSpeedtest = () => {
  1522. IframeSpeedtest.attr({ src: '' })
  1523. ModalSpeedtest.removeClass('show')
  1524. }
  1525. const writeCarrierList = () => {
  1526. const writeCarrierList = document.querySelector('section.modal-configs section')
  1527. writeCarrierList.innerHTML = ''
  1528. const data = JSON.parse(dtAllConfigs())
  1529. data.sort((a, b) => a.sorter - b.sorter)
  1530. data.forEach((item, index) => item.items.sort((a, b) => a.sorter - b.sorter))
  1531. data.forEach((category) => {
  1532. const div = document.createElement('div')
  1533. const h1 = document.createElement('h1')
  1534. h1.classList.add('title')
  1535. h1.innerHTML = category.name
  1536. const ul = document.createElement('ul')
  1537. category.items.forEach((item) => {
  1538. const li = document.createElement('li')
  1539. li.innerHTML = `<img src="${item.icon}" alt="icon" /><div><h1>${item.name}</h1><p>${
  1540. item.description ?? ''
  1541. }</p></div>`
  1542. li.addEventListener('click', () => {
  1543. dtSetConfig(item.id)
  1544. ModalCarrierList.removeClass('show')
  1545. })
  1546. ul.appendChild(li)
  1547. })
  1548. div.appendChild(h1)
  1549. div.appendChild(ul)
  1550. writeCarrierList.appendChild(div)
  1551. })
  1552. }
  1553. const writeInputCarrierList = () => {
  1554. const data = JSON.parse(dtGetDefaultConfig())
  1555. const isV2ray = data?.mode?.toLowerCase()?.startsWith('v2ray')
  1556. InputCarrierValue.attr({ placeholder: data.name ?? 'Escolha sua operadora' })
  1557. if (!data?.auth?.v2ray_uuid && isV2ray) {
  1558. ContainerInputUser.style({ display: 'none' })
  1559. ContainerInputPassword.style({ display: 'none' })
  1560. ContainerInputUUID.style({ display: 'flex' })
  1561. InputUUIDValue.attr({ value: dtGetUUID() ?? '' })
  1562. } else {
  1563. ContainerInputPassword.style({ display: 'flex' })
  1564. ContainerInputUUID.style({ display: 'none' })
  1565. InputUserValue.attr({ value: dtGetUsername() ?? '' })
  1566. InputPasswordValue.attr({ value: dtGetPassword() ?? '' })
  1567. }
  1568. }
  1569. const showModalCarrierList = () => {
  1570. writeCarrierList()
  1571. ModalCarrierList.addClass('show')
  1572. }
  1573. const hiddenModalCarrierList = () => {
  1574. ModalCarrierList.removeClass('show')
  1575. }
  1576. const writeModalContent = () => {
  1577. const data = JSON.parse(dtGetLogs())
  1578. let content = ''
  1579. data.forEach((item) => {
  1580. content += `${Object.keys(item)} ${item[Object.keys(item)]} <br>`
  1581. })
  1582. ModalLoggerContent.html(content)
  1583. }
  1584. const showModalLogger = () => {
  1585. dtOnNewLogListener()
  1586. const modal = document.querySelector('section.modal-logs')
  1587. if (!modal.className.includes('show')) {
  1588. ModalLogger.addClass('show')
  1589. }
  1590. }
  1591. const hiddenModalLogger = () => {
  1592. ModalLogger.removeClass('show')
  1593. }
  1594. const startStopVpn = () => {
  1595. const state = dtVpnState()
  1596. if (state !== 'CONNECTED') {
  1597. dtStartVpn()
  1598. showModalVpnState()
  1599. } else {
  1600. dtStopVpn()
  1601. }
  1602. }
  1603. const writeStatusVpn = (state) => {
  1604. const icon = state.icon
  1605. const text = `<h1 style="color: ${state.color}">${state.text}</h1>`
  1606. ContentContainerSVpnState.html(icon + text)
  1607. return icon + text
  1608. }
  1609. const writeModalVpnState = (state) => {
  1610. const divIcon = `<div class="loading-status">${state.icon}</div>`
  1611. const titleStatus = `<h1>${state.text}</h1>`
  1612. ContentModalVpnState.html(divIcon + titleStatus)
  1613. return divIcon + titleStatus
  1614. }
  1615. const showModalVpnState = () => {
  1616. const data = JSON.parse(dtGetDefaultConfig())
  1617. if (!data || !dtGetUsername() || !dtGetPassword()) {
  1618. return
  1619. } else {
  1620. ModalVpnState.addClass('show')
  1621. }
  1622. }
  1623. const hiddenModalVpnState = () => {
  1624. ModalVpnState.removeClass('show')
  1625. }
  1626. const showModalLoading = () => {
  1627. if (!JSON.parse(dtGetDefaultConfig())?.urlCheckUser) {
  1628. hiddenModalVpnState()
  1629. } else {
  1630. hiddenModalVpnState()
  1631. ModalLoading.addClass('show')
  1632. }
  1633. }
  1634. const hiddenModalLoading = () => {
  1635. ModalLoading.removeClass('show')
  1636. }
  1637. const writeModalCheckUser = (model) => {
  1638. const data = JSON.parse(model)
  1639. ContentModalCheckUser.html(`
  1640. <h1>DETALHES DO USUÁRIO</h1>
  1641. <div>
  1642. <i class="bi bi-person"></i>
  1643. <span>Nome do usuário: ${data.username}</span>
  1644. </div>
  1645. <div>
  1646. <i class="bi bi-calendar-week"></i>
  1647. <span>Expiração: ${data.expiration_date}</span>
  1648. </div>
  1649. <div>
  1650. <i class="bi bi-hourglass-split"></i>
  1651. <span>Dias restantes: ${data.expiration_days}</span>
  1652. </div>
  1653. <div>
  1654. <i class="bi bi-people"></i>
  1655. <span>Dispositivos: ${data.count_connections}|${data.limit_connections}</span>
  1656. </div>
  1657. `)
  1658. showModalCheckUser()
  1659. }
  1660. const showModalCheckUser = () => {
  1661. hiddenModalLoading()
  1662. ModalCheckUser.addClass('show')
  1663. }
  1664. const hiddenModalCheckUser = () => {
  1665. ModalCheckUser.removeClass('show')
  1666. }
  1667. const showModalAlertClearData = () => {
  1668. ModalAlertClearData.addClass('show')
  1669. }
  1670. const hiddenModalAlertClearData = () => {
  1671. ModalAlertClearData.removeClass('show')
  1672. }
  1673. const writeModalError = (model) => {
  1674. const data = JSON.parse(model)
  1675. const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-exclamation-triangle" viewBox="0 0 16 16"><path d="M7.938 2.016A.13.13 0 0 1 8.002 2a.13.13 0 0 1 .063.016.146.146 0 0 1 .054.057l6.857 11.667c.036.06.035.124.002.183a.163.163 0 0 1-.054.06.116.116 0 0 1-.066.017H1.146a.115.115 0 0 1-.066-.017.163.163 0 0 1-.054-.06.176.176 0 0 1 .002-.183L7.884 2.073a.147.147 0 0 1 .054-.057zm1.044-.45a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566z"/><path d="M7.002 12a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 5.995a.905.905 0 1 1 1.8 0l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995z"/></svg>`
  1676. const h1 = `<h1 id="title-error-alert-title">${data.title}</h1>`
  1677. const p = `<p id="title-error-alert-description">${data.content}</p>`
  1678. ContentModalError.html(svg + h1 + p)
  1679. hiddenModalSpeedtest()
  1680. hiddenModalCarrierList()
  1681. hiddenModalLogger()
  1682. hiddenModalVpnState()
  1683. hiddenModalLoading()
  1684. hiddenModalCheckUser()
  1685. showModalError()
  1686. }
  1687. const showModalError = () => {
  1688. ModalError.addClass('show')
  1689. }
  1690. const hiddenModalError = () => {
  1691. ModalError.removeClass('show')
  1692. }
  1693. const getAppLogo = () => {
  1694. const logo = dtAppLogo()
  1695. if (!logo) {
  1696. return false
  1697. } else {
  1698. return JSON.parse(logo).value
  1699. }
  1700. }
  1701. </script>
  1702. <!-- ESTADOS DE CONEXÃO -->
  1703. <script>
  1704. const disconnected = () => {
  1705. const state = {
  1706. icon: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-outlet" viewBox="0 0 16 16"><path d="M3.34 2.994c.275-.338.68-.494 1.074-.494h7.172c.393 0 .798.156 1.074.494.578.708 1.84 2.534 1.84 5.006 0 2.472-1.262 4.297-1.84 5.006-.276.338-.68.494-1.074.494H4.414c-.394 0-.799-.156-1.074-.494C2.762 12.297 1.5 10.472 1.5 8c0-2.472 1.262-4.297 1.84-5.006zm1.074.506a.376.376 0 0 0-.299.126C3.599 4.259 2.5 5.863 2.5 8c0 2.137 1.099 3.74 1.615 4.374.06.073.163.126.3.126h7.17c.137 0 .24-.053.3-.126.516-.633 1.615-2.237 1.615-4.374 0-2.137-1.099-3.74-1.615-4.374a.376.376 0 0 0-.3-.126h-7.17z"/><path d="M6 5.5a.5.5 0 0 1 .5.5v1.5a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm4 0a.5.5 0 0 1 .5.5v1.5a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zM7 10v1h2v-1a1 1 0 0 0-2 0z"/></svg>`,
  1707. color: '#FFFFFF',
  1708. text: dtTranslateText('LBL_STATE_DISCONNECTED'),
  1709. }
  1710. return state
  1711. }
  1712. const connecting = () => {
  1713. const state = {
  1714. icon: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plug" viewBox="0 0 16 16"><path d="M6 0a.5.5 0 0 1 .5.5V3h3V.5a.5.5 0 0 1 1 0V3h1a.5.5 0 0 1 .5.5v3A3.5 3.5 0 0 1 8.5 10c-.002.434-.01.845-.04 1.22-.041.514-.126 1.003-.317 1.424a2.083 2.083 0 0 1-.97 1.028C6.725 13.9 6.169 14 5.5 14c-.998 0-1.61.33-1.974.718A1.922 1.922 0 0 0 3 16H2c0-.616.232-1.367.797-1.968C3.374 13.42 4.261 13 5.5 13c.581 0 .962-.088 1.218-.219.241-.123.4-.3.514-.55.121-.266.193-.621.23-1.09.027-.34.035-.718.037-1.141A3.5 3.5 0 0 1 4 6.5v-3a.5.5 0 0 1 .5-.5h1V.5A.5.5 0 0 1 6 0zM5 4v2.5A2.5 2.5 0 0 0 7.5 9h1A2.5 2.5 0 0 0 11 6.5V4H5z"/></svg>`,
  1715. color: '#FFFF00',
  1716. text: dtTranslateText('LBL_STATE_CONNECTING'),
  1717. }
  1718. return state
  1719. }
  1720. const connected = () => {
  1721. const state = {
  1722. icon: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plugin" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M1 8a7 7 0 1 1 2.898 5.673c-.167-.121-.216-.406-.002-.62l1.8-1.8a3.5 3.5 0 0 0 4.572-.328l1.414-1.415a.5.5 0 0 0 0-.707l-.707-.707 1.559-1.563a.5.5 0 1 0-.708-.706l-1.559 1.562-1.414-1.414 1.56-1.562a.5.5 0 1 0-.707-.706l-1.56 1.56-.707-.706a.5.5 0 0 0-.707 0L5.318 5.975a3.5 3.5 0 0 0-.328 4.571l-1.8 1.8c-.58.58-.62 1.6.121 2.137A8 8 0 1 0 0 8a.5.5 0 0 0 1 0Z"/></svg>`,
  1723. color: '#00FF00',
  1724. text: dtTranslateText('LBL_STATE_CONNECTED'),
  1725. }
  1726. return state
  1727. }
  1728. const stopping = () => {
  1729. const state = {
  1730. icon: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-stop" viewBox="0 0 16 16"><path d="M3.5 5A1.5 1.5 0 0 1 5 3.5h6A1.5 1.5 0 0 1 12.5 5v6a1.5 1.5 0 0 1-1.5 1.5H5A1.5 1.5 0 0 1 3.5 11V5zM5 4.5a.5.5 0 0 0-.5.5v6a.5.5 0 0 0 .5.5h6a.5.5 0 0 0 .5-.5V5a.5.5 0 0 0-.5-.5H5z"/></svg>`,
  1731. color: '#FFFF00',
  1732. text: dtTranslateText('LBL_STATE_STOPPING'),
  1733. }
  1734. return state
  1735. }
  1736. const noNetwork = () => {
  1737. const state = {
  1738. icon: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-wifi-off" viewBox="0 0 16 16"><path d="M10.706 3.294A12.545 12.545 0 0 0 8 3C5.259 3 2.723 3.882.663 5.379a.485.485 0 0 0-.048.736.518.518 0 0 0 .668.05A11.448 11.448 0 0 1 8 4c.63 0 1.249.05 1.852.148l.854-.854zM8 6c-1.905 0-3.68.56-5.166 1.526a.48.48 0 0 0-.063.745.525.525 0 0 0 .652.065 8.448 8.448 0 0 1 3.51-1.27L8 6zm2.596 1.404.785-.785c.63.24 1.227.545 1.785.907a.482.482 0 0 1 .063.745.525.525 0 0 1-.652.065 8.462 8.462 0 0 0-1.98-.932zM8 10l.933-.933a6.455 6.455 0 0 1 2.013.637c.285.145.326.524.1.75l-.015.015a.532.532 0 0 1-.611.09A5.478 5.478 0 0 0 8 10zm4.905-4.905.747-.747c.59.3 1.153.645 1.685 1.03a.485.485 0 0 1 .047.737.518.518 0 0 1-.668.05 11.493 11.493 0 0 0-1.811-1.07zM9.02 11.78c.238.14.236.464.04.66l-.707.706a.5.5 0 0 1-.707 0l-.707-.707c-.195-.195-.197-.518.04-.66A1.99 1.99 0 0 1 8 11.5c.374 0 .723.102 1.021.28zm4.355-9.905a.53.53 0 0 1 .75.75l-10.75 10.75a.53.53 0 0 1-.75-.75l10.75-10.75z"/></svg>`,
  1739. color: '#FF0000',
  1740. text: dtTranslateText('LBL_STATE_NO_NETWORK'),
  1741. }
  1742. return state
  1743. }
  1744. const auth = () => {
  1745. const state = {
  1746. icon: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-person-lock" viewBox="0 0 16 16"><path d="M11 5a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM8 7a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm0 5.996V14H3s-1 0-1-1 1-4 6-4c.564 0 1.077.038 1.544.107a4.524 4.524 0 0 0-.803.918A10.46 10.46 0 0 0 8 10c-2.29 0-3.516.68-4.168 1.332-.678.678-.83 1.418-.832 1.664h5ZM9 13a1 1 0 0 1 1-1v-1a2 2 0 1 1 4 0v1a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1v-2Zm3-3a1 1 0 0 0-1 1v1h2v-1a1 1 0 0 0-1-1Z"/></svg>`,
  1747. color: '#FFFF00',
  1748. text: dtTranslateText('LBL_STATE_AUTH'),
  1749. }
  1750. return state
  1751. }
  1752. const authFailed = () => {
  1753. const state = {
  1754. icon: `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-person-slash" viewBox="0 0 16 16"><path d="M13.879 10.414a2.501 2.501 0 0 0-3.465 3.465l3.465-3.465Zm.707.707-3.465 3.465a2.501 2.501 0 0 0 3.465-3.465Zm-4.56-1.096a3.5 3.5 0 1 1 4.949 4.95 3.5 3.5 0 0 1-4.95-4.95ZM11 5a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM8 7a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm.256 7a4.474 4.474 0 0 1-.229-1.004H3c.001-.246.154-.986.832-1.664C4.484 10.68 5.711 10 8 10c.26 0 .507.009.74.025.226-.341.496-.65.804-.918C9.077 9.038 8.564 9 8 9c-5 0-6 3-6 4s1 1 1 1h5.256Z"/></svg>`,
  1755. color: '#FF0000',
  1756. text: dtTranslateText('LBL_STATE_AUTH_FAILED'),
  1757. }
  1758. return state
  1759. }
  1760. </script>
  1761. <!-- DOM WRAPPER -->
  1762. <script>
  1763. const Dom = (selector) => {
  1764. const _elements = document.querySelectorAll(selector)
  1765. const wrapper = {
  1766. on(listeners) {
  1767. for (const [event, listener] of Object.entries(listeners)) {
  1768. _elements.forEach((element) => {
  1769. element.addEventListener(event, listener)
  1770. })
  1771. }
  1772. return wrapper
  1773. },
  1774. addClass: (...tokens) => {
  1775. _elements.forEach((element) => {
  1776. element.classList.add(...tokens)
  1777. })
  1778. return wrapper
  1779. },
  1780. removeClass: (...tokens) => {
  1781. _elements.forEach((element) => {
  1782. element.classList.remove(...tokens)
  1783. })
  1784. return wrapper
  1785. },
  1786. toggleClass: (token, force) => {
  1787. _elements.forEach((element) => {
  1788. element.classList.toggle(token, force)
  1789. })
  1790. return wrapper
  1791. },
  1792. style(styles) {
  1793. for (const [property, value] of Object.entries(styles)) {
  1794. console.log(value)
  1795. _elements.forEach((element) => {
  1796. element.style[property] = value
  1797. })
  1798. }
  1799. return wrapper
  1800. },
  1801. attr(attrs) {
  1802. for (const [name, value] of Object.entries(attrs)) {
  1803. _elements.forEach((element) => element.setAttribute(name, value))
  1804. }
  1805. return wrapper
  1806. },
  1807. html(value) {
  1808. _elements.forEach((element) => (element.innerHTML = value))
  1809. return wrapper
  1810. },
  1811. }
  1812. return wrapper
  1813. }
  1814. </script>
  1815. <!-- VÁRIAVEIS -->
  1816. <script>
  1817. const Main = Dom('main')
  1818. const AppLogo = Dom('#app-logo')
  1819. const ConfigMenu = Dom('#configuracao')
  1820. const ContainerConfigMenu = Dom('section.menu')
  1821. const BatteryOptimizationButton = Dom('#battery-optimization')
  1822. const ApnConfigurationButton = Dom('#apn-configuration')
  1823. const CheckuserButton = Dom('#checkuser')
  1824. const SpeedtestButton = Dom('#speedtest-button')
  1825. const ClearDataAppButton = Dom('#clean-data-app')
  1826. const GenTestButton = Dom('#gen-test')
  1827. const BuyAccessButton = Dom('#buy-access')
  1828. const ContactSupportButton = Dom('#contact-support')
  1829. const ModalSpeedtest = Dom('section.modal-speedtest')
  1830. const CloseModalSpeedtest = Dom('section.modal-speedtest header svg')
  1831. const LoadingSpeedtest = Dom('section.modal-speedtest section div.loading')
  1832. const IframeSpeedtest = Dom('#iframe-speedtest')
  1833. const SelectCarrierButton = Dom('#operadora')
  1834. const ModalCarrierList = Dom('section.modal-configs')
  1835. const CloseModalCarrierList = Dom('section.modal-configs header svg')
  1836. const ModalContentCarrierList = Dom('section.modal-configs section')
  1837. const ContainerInputUser = Dom('#user-container')
  1838. const ContainerInputPassword = Dom('#password-container')
  1839. const ContainerInputUUID = Dom('#uuid-container')
  1840. const InputCarrierValue = Dom('#operadora input')
  1841. const InputUserValue = Dom('#user-container input')
  1842. const InputPasswordValue = Dom('#password-container input')
  1843. const InputUUIDValue = Dom('#uuid-container input')
  1844. const RefreshButton = Dom('#update-config')
  1845. const LoggerButton = Dom('#logs-button')
  1846. const StartStopVPNButton = Dom('#vpn-start')
  1847. const ContainerSVpnState = Dom('section.status-vpn')
  1848. const ContentContainerSVpnState = Dom('section.status-vpn section')
  1849. const ModalVpnState = Dom('section.modal-status-vpn')
  1850. const CloseModalVpnState = Dom('section.modal-status-vpn header svg')
  1851. const ContentModalVpnState = Dom('section.modal-status-vpn section.modal-status-content')
  1852. const ModalLogger = Dom('section.modal-logs')
  1853. const CloseModalLogger = Dom('section.modal-logs header svg')
  1854. const ModalLoggerContent = Dom('section.modal-logs section p')
  1855. const CleanLoggerContent = Dom('section.modal-logs section button')
  1856. const ModalLoading = Dom('section.modal-loading')
  1857. const CloseModalLoading = Dom('section.modal-loading header svg')
  1858. const ModalCheckUser = Dom('section.modal-checkuser')
  1859. const CloseModalCheckUser = Dom('section.modal-checkuser header svg')
  1860. const ContentModalCheckUser = Dom('section.modal-checkuser section')
  1861. const ModalAlertClearData = Dom('section.modal-alert-clear-data')
  1862. const CloseModalAlertClearData = Dom('section.modal-alert-clear-data header svg')
  1863. const BackModalAlertClearData = Dom('#back-clear-data-button')
  1864. const ConfirmModalAlertClearData = Dom('#clear-data-button-confirm')
  1865. const ModalError = Dom('section.modal-error-alert')
  1866. const CloseModalError = Dom('section.modal-error-alert header svg')
  1867. const ContentModalError = Dom('section.modal-error-alert section')
  1868. const HomeMenu = Dom('section.home-menu')
  1869. </script>
  1870. <!-- VARIAVEIS ROOT -->
  1871. <script>
  1872. document.documentElement.style.setProperty(
  1873. '--margem-do-topo-do-modal',
  1874. `${dtStatusBarHeight() + 10}px`
  1875. )
  1876. document.documentElement.style.setProperty(
  1877. '--margem-do-bottom-do-modal',
  1878. `${dtNavbarHeight() + 10}px`
  1879. )
  1880. </script>
  1881. <!-- AÇÕES -->
  1882. <script>
  1883. Main.style({ padding: `${dtStatusBarHeight() + 10}px 0px 0px 0px` })
  1884. HomeMenu.style({ bottom: `${dtNavbarHeight() + 10}px` })
  1885. AppLogo.attr({ src: getAppLogo() })
  1886. ConfigMenu.on({ click: () => showConfigMenu() })
  1887. BatteryOptimizationButton.on({ click: () => dtBatteryOptimization() })
  1888. ApnConfigurationButton.on({ click: () => dtApnConfiguration() })
  1889. SpeedtestButton.on({ click: () => showModalSpeedtest() })
  1890. CloseModalSpeedtest.on({ click: () => hiddenModalSpeedtest() })
  1891. SelectCarrierButton.on({ click: () => showModalCarrierList() })
  1892. CloseModalCarrierList.on({ click: () => hiddenModalCarrierList() })
  1893. InputUserValue.on({ input: (e) => dtSetUsername(e.target.value) })
  1894. InputPasswordValue.on({ input: (e) => dtSetPassword(e.target.value) })
  1895. InputUUIDValue.on({ input: (e) => dtSetUUID(e.target.value) })
  1896. RefreshButton.on({ click: () => dtUpdate() })
  1897. LoggerButton.on({ click: () => showModalLogger() })
  1898. CloseModalLogger.on({ click: () => hiddenModalLogger() })
  1899. CleanLoggerContent.on({ click: () => dtClearLogs() })
  1900. StartStopVPNButton.on({ click: () => startStopVpn() })
  1901. ContentContainerSVpnState.html(vpnState())
  1902. ContentModalVpnState.html(vpnState())
  1903. CloseModalVpnState.on({ click: () => hiddenModalVpnState() })
  1904. CloseModalLoading.on({ click: () => hiddenModalLoading() })
  1905. CloseModalCheckUser.on({ click: () => hiddenModalCheckUser() })
  1906. CheckuserButton.on({ click: () => dtStartCheckUser() })
  1907. ClearDataAppButton.on({ click: () => showModalAlertClearData() })
  1908. CloseModalAlertClearData.on({ click: () => hiddenModalAlertClearData() })
  1909. BackModalAlertClearData.on({ click: () => hiddenModalAlertClearData() })
  1910. ConfirmModalAlertClearData.on({ click: () => dtCleanDataApp() })
  1911. CloseModalError.on({ click: () => hiddenModalError() })
  1912. GenTestButton.on({
  1913. click: () => dtOpenBrowser('https://fusionnet-ilimitada.com/redirecionar-teste/'),
  1914. })
  1915. BuyAccessButton.on({
  1916. click: () => dtOpenBrowser('https://fusionnet-ilimitada.com/escolher-plano/'),
  1917. })
  1918. ContactSupportButton.on({
  1919. click: () =>
  1920. dtOpenBrowser(
  1921. 'https://api.whatsapp.com/send?phone=5594981158898&text=Vim%20Pelo%20App.%20Pode%20me%20ajudar?'
  1922. ),
  1923. })
  1924. writeInputCarrierList()
  1925. </script>
  1926. </body>
  1927. </html>

comments powered by Disqus