TEMA


SUBMITTED BY: VINIMODDER

DATE: April 30, 2024, 10:10 p.m.

FORMAT: Text only

SIZE: 101.1 kB

HITS: 323

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>213259300 - @FredBarbosa</title>
  7. <style>
  8. :root {
  9. font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
  10. line-height: 1.5;
  11. font-weight: 400;
  12. font-synthesis: none;
  13. text-rendering: optimizeLegibility;
  14. -webkit-font-smoothing: antialiased;
  15. -moz-osx-font-smoothing: grayscale;
  16. text-size-adjust: 100%;
  17. -webkit-text-size-adjust: 100%;
  18. --space-status-bar: 10px;
  19. --space-nav-bar: 33px;
  20. --default-background-color: linear-gradient(135deg,
  21. #9f2fff,
  22. #0bb1d3,
  23. #7f47cb,
  24. #00ffff,
  25. #7a2cec,
  26. #4adfdf,
  27. #76fcfc,
  28. #7f47cb,
  29. #9f2fff,
  30. #0bb1d3,
  31. #7f47cb,
  32. #00ffff,
  33. #7a2cec,
  34. #4adfdf);
  35. --connected-background-color: linear-gradient(135deg,
  36. #05b76d,
  37. #01ac66,
  38. #008e52,
  39. #30704b,
  40. #00ff00,
  41. #29ab87,
  42. #00a86b,
  43. #2e8b57,
  44. #3f7046,
  45. #3f7,
  46. #008e52,
  47. #30704b,
  48. #00ff00,
  49. #29ab87,
  50. #00a86b,
  51. #2e8b57,
  52. #3f7046,
  53. #3f7);
  54. --connecting-background-color: linear-gradient(135deg,
  55. #ffc823,
  56. #f4b007,
  57. #fff14a,
  58. #eaa700,
  59. #fc9200,
  60. #ffcb05,
  61. #feb308,
  62. #ecc218,
  63. #ffc823,
  64. #f4b007,
  65. #fff14a,
  66. #eaa700,
  67. #fc9200,
  68. #ffcb05,
  69. #feb308,
  70. #ecc218);
  71. --error-background-color: linear-gradient(135deg,
  72. #e20807,
  73. #d40000,
  74. #9a001a,
  75. #65100d,
  76. #e20807,
  77. #d40000,
  78. #9a001a,
  79. #65100d,
  80. #e20807,
  81. #d40000,
  82. #9a001a,
  83. #65100d,
  84. #000000,
  85. #ff0000,
  86. #9a001a,
  87. #e20807,
  88. #65100d);
  89. }
  90. @keyframes ButtonStartVpnAnimation {
  91. 0% {
  92. background-position: 0;
  93. }
  94. 100% {
  95. background-position: 300%;
  96. }
  97. }
  98. @keyframes spin {
  99. 0% {
  100. transform: rotate(0deg);
  101. }
  102. 100% {
  103. transform: rotate(360deg);
  104. }
  105. }
  106. *,
  107. *::after,
  108. *::before {
  109. margin: 0;
  110. padding: 0;
  111. box-sizing: border-box;
  112. }
  113. html,
  114. body {
  115. width: 100%;
  116. height: 100%;
  117. }
  118. body {
  119. background: #051d40;
  120. padding-bottom: var(--space-nav-bar);
  121. }
  122. main {
  123. width: auto;
  124. height: 89%;
  125. display: flex;
  126. position: relative;
  127. padding: 0 0 0 0;
  128. overflow: hidden;
  129. }
  130. section.home {
  131. width: 100vw;
  132. min-width: 100%;
  133. height: 100%;
  134. display: flex;
  135. flex-direction: column;
  136. position: absolute;
  137. top: 0;
  138. left: 0;
  139. opacity: 0;
  140. transform: translateX(100%);
  141. transition: opacity 0.3s ease, transform 0.3s ease;
  142. overflow: hidden;
  143. }
  144. section.home header {
  145. width: 100%;
  146. height: 20%;
  147. max-height: 135px;
  148. display: flex;
  149. align-items: center;
  150. justify-content: center;
  151. padding: var(--space-status-bar) 10px 0 10px;
  152. background-image: url();
  153. background-size: cover;
  154. background-position: center;
  155. background-repeat: no-repeat;
  156. }
  157. section.home header img {
  158. width: 80%;
  159. }
  160. section.container-carrier-selector-button {
  161. width: 100%;
  162. height: 10%;
  163. max-height: 60px;
  164. display: flex;
  165. justify-content: center;
  166. align-items: center;
  167. margin: 10% 0 0 0;
  168. }
  169. section.container-carrier-selector-button button {
  170. width: 90%;
  171. height: 65%;
  172. display: flex;
  173. align-items: center;
  174. justify-content: center;
  175. gap: 5px;
  176. position: relative;
  177. border: 0px;
  178. border-radius: 20px;
  179. background: radial-gradient(circle, #0bb1d3, #9f2fff 85%);
  180. background-size: 300%;
  181. animation: 8s infinite ButtonStartVpnAnimation;
  182. }
  183. section.container-carrier-selector-button button svg {
  184. color: #ffffff;
  185. }
  186. section.container-carrier-selector-button button span {
  187. color: #ffffff;
  188. font-size: 12px;
  189. }
  190. section.container-button-start-stop-vpn {
  191. width: 100%;
  192. height: auto;
  193. display: flex;
  194. justify-content: center;
  195. align-items: center;
  196. margin: 20% 0 0 0;
  197. }
  198. section.container-button-start-stop-vpn button {
  199. width: 150px;
  200. height: 150px;
  201. display: flex;
  202. align-items: center;
  203. justify-content: center;
  204. position: relative;
  205. border: 0;
  206. border-radius: 50%;
  207. background: linear-gradient(to top left, #0bb1d3, #9f2fff 85%);
  208. }
  209. section.container-button-start-stop-vpn button svg {
  210. width: 50%;
  211. height: 50%;
  212. color: #ffffff;
  213. }
  214. section.container-button-start-stop-vpn button::before,
  215. section.container-button-start-stop-vpn button::after {
  216. width: calc(100% + 10px);
  217. height: calc(100% + 10px);
  218. content: "";
  219. position: absolute;
  220. z-index: -1;
  221. border-radius: 50%;
  222. background: var(--default-background-color);
  223. background-size: 300%;
  224. animation: 8s infinite ButtonStartVpnAnimation;
  225. }
  226. section.container-button-start-stop-vpn button::after {
  227. filter: blur(30px);
  228. }
  229. section.container-status-connection,
  230. section.container-version,
  231. section.container-local-ip {
  232. width: 100%;
  233. height: auto;
  234. display: none;
  235. flex-direction: column;
  236. align-items: center;
  237. justify-content: center;
  238. margin: auto 0 auto 0;
  239. }
  240. section.container-status-connection.active,
  241. section.container-version.active,
  242. section.container-local-ip.active {
  243. display: flex;
  244. }
  245. section.container-status-connection button,
  246. section.container-version button,
  247. section.container-local-ip button {
  248. padding: 2.5% 10%;
  249. border: 0;
  250. border-radius: 60px;
  251. background: radial-gradient(circle, #0bb1d3, #9f2fff 85%);
  252. background-size: 300%;
  253. animation: 8s infinite ButtonStartVpnAnimation;
  254. }
  255. section.container-status-connection button span,
  256. section.container-version button span,
  257. section.container-local-ip button span {
  258. color: #ffffff;
  259. }
  260. @media only screen and (max-width: 375px) {
  261. section.container-button-start-stop-vpn button {
  262. width: 110px;
  263. height: 110px;
  264. }
  265. section.container-status-connection {
  266. margin-top: 10%;
  267. }
  268. }
  269. @media only screen and (max-width: 280px) {
  270. section.container-button-start-stop-vpn {
  271. margin-top: 15%;
  272. }
  273. section.container-button-start-stop-vpn button {
  274. width: 90px;
  275. height: 90px;
  276. }
  277. section.container-status-connection {
  278. margin-top: 20% !important;
  279. }
  280. }
  281. @media only screen and (max-width: 250px) {
  282. section.container-button-start-stop-vpn {
  283. margin-top: 5%;
  284. }
  285. section.container-button-start-stop-vpn button {
  286. width: 90px;
  287. height: 90px;
  288. }
  289. section.container-status-connection {
  290. margin-top: 10% !important;
  291. }
  292. }
  293. section.profile,
  294. section.carrier-list,
  295. section.container-tools,
  296. section.container-error {
  297. width: 100%;
  298. min-width: 100%;
  299. height: 100%;
  300. display: flex;
  301. flex-direction: column;
  302. gap: 10px;
  303. position: absolute;
  304. top: 0;
  305. left: 0;
  306. padding: var(--space-status-bar) 0 0 0;
  307. opacity: 0;
  308. transform: translateX(100%);
  309. transition: opacity 0.3s ease, transform 0.3s ease;
  310. }
  311. section.carrier-list {
  312. height: 97%;
  313. }
  314. section.container-tools {
  315. gap: 1px;
  316. }
  317. section.loading,
  318. section.checkuser,
  319. section.clean-data-app,
  320. section.hotspot-container,
  321. section.terms-container,
  322. section.logs-container,
  323. section.renew-alert {
  324. width: 100%;
  325. min-width: 100%;
  326. height: 100%;
  327. display: flex;
  328. justify-content: center;
  329. align-items: center;
  330. position: absolute;
  331. top: 0;
  332. left: 0;
  333. z-index: 999999999;
  334. padding-top: 15%;
  335. background: rgba(0, 0, 0, 0.3);
  336. opacity: 0;
  337. transform: scale(0);
  338. transform-origin: center;
  339. transition: opacity 0.3s ease, transform 0.3s ease;
  340. }
  341. section.hotspot-container {
  342. padding-top: 0;
  343. }
  344. section.loading.active,
  345. section.checkuser.active,
  346. section.clean-data-app.active,
  347. section.hotspot-container.active,
  348. section.terms-container.active,
  349. section.logs-container.active,
  350. section.renew-alert.active {
  351. opacity: 1;
  352. transform: scale(1);
  353. }
  354. section.loading section,
  355. section.checkuser section,
  356. section.clean-data-app section,
  357. section.hotspot-container section,
  358. section.terms-container section,
  359. section.logs-container section,
  360. section.renew-alert section {
  361. width: 80%;
  362. height: auto;
  363. min-height: 50%;
  364. display: flex;
  365. flex-direction: column;
  366. align-items: center;
  367. border-radius: 10px;
  368. background: #051d40;
  369. overflow: hidden;
  370. }
  371. section.renew-alert section {
  372. position: relative;
  373. overflow: initial;
  374. }
  375. section.renew-alert.active section::before,
  376. section.renew-alert.active section::after {
  377. width: calc(100% + 2px);
  378. height: calc(100% + 2px);
  379. content: "";
  380. position: absolute;
  381. left: -1px;
  382. right: 0;
  383. bottom: -1px;
  384. z-index: -1;
  385. border-radius: 10px;
  386. background: linear-gradient(135deg, #9f2fff, #0bb1d3, #7f47cb, #00ffff, #7a2cec, #4adfdf, #76fcfc, #7f47cb, #9f2fff, #0bb1d3, #7f47cb, #00ffff, #7a2cec, #4adfdf);
  387. background-size: 300%;
  388. animation: 4s infinite alternate-reverse ButtonStartVpnAnimation;
  389. }
  390. section.renew-alert section::after {
  391. filter: blur(7px);
  392. }
  393. section.logs-container section {
  394. width: 90%;
  395. min-height: 0;
  396. margin-top: 25%;
  397. padding-bottom: 0.8rem;
  398. }
  399. section.renew-alert section {
  400. width: 90%;
  401. padding-bottom: 1rem;
  402. }
  403. section.loading section header,
  404. section.checkuser section header,
  405. section.clean-data-app section header,
  406. section.hotspot-container section header,
  407. section.terms-container section header,
  408. section.logs-container section header,
  409. section.renew-alert section header {
  410. width: 100%;
  411. height: auto;
  412. display: flex;
  413. align-items: center;
  414. justify-content: center;
  415. position: relative;
  416. padding: 4% 2% 4% 2%;
  417. border-bottom: 2px solid #03142d;
  418. }
  419. section.loading section header h1,
  420. section.checkuser section header h1,
  421. section.clean-data-app section header h1,
  422. section.hotspot-container section header h1,
  423. section.terms-container section header h1,
  424. section.logs-container section header h1,
  425. section.renew-alert section header h1 {
  426. margin-left: auto;
  427. color: #ffffff;
  428. font-size: 0.8rem;
  429. }
  430. @media (max-width: 280px) {
  431. section.clean-data-app section header h1 {
  432. font-size: 0.7rem;
  433. }
  434. }
  435. section.loading section header svg,
  436. section.checkuser section header svg,
  437. section.clean-data-app section header svg,
  438. section.hotspot-container section header svg,
  439. section.terms-container section header svg,
  440. section.logs-container section header svg,
  441. section.renew-alert section header svg {
  442. margin-left: auto;
  443. color: #ffffff;
  444. }
  445. section.terms-container section p {
  446. width: 95%;
  447. height: auto;
  448. max-height: 350px;
  449. padding: 5% 0;
  450. color: #ffffff;
  451. text-align: center;
  452. overflow: auto;
  453. }
  454. section.loading section div.loading {
  455. width: 150px;
  456. height: 150px;
  457. margin-top: auto;
  458. margin-bottom: auto;
  459. border-top: 4px solid #ffffff;
  460. border-right: 4px solid #ffffff;
  461. border-bottom: 4px solid #ffffff;
  462. border-left: 4px solid transparent;
  463. border-radius: 50%;
  464. background-color: transparent;
  465. animation: spin 1s linear infinite;
  466. }
  467. section.checkuser section section {
  468. width: 100%;
  469. height: auto;
  470. min-height: 100%;
  471. display: flex;
  472. align-items: center;
  473. justify-content: center;
  474. margin: auto 0 auto 0;
  475. padding: 3% 0;
  476. border-radius: 0;
  477. }
  478. section.checkuser section section div:first-child {
  479. margin: 0;
  480. }
  481. section.checkuser section section div {
  482. width: 90%;
  483. height: auto;
  484. display: flex;
  485. align-items: center;
  486. gap: 10px;
  487. margin: 5% 0 0 0;
  488. padding: 3% 3%;
  489. border-radius: 10px;
  490. background: radial-gradient(circle, #0bb1d3, #9f2fff 85%);
  491. background-size: 300%;
  492. animation: 8s infinite ButtonStartVpnAnimation;
  493. }
  494. section.checkuser section section div svg,
  495. section.checkuser section section div span {
  496. color: #ffffff;
  497. }
  498. section.checkuser section section div span {
  499. font-size: 0.8rem;
  500. }
  501. section.clean-data-app section section,
  502. section.hotspot-container section section {
  503. width: 100%;
  504. height: auto;
  505. min-height: 100%;
  506. display: flex;
  507. align-items: center;
  508. justify-content: center;
  509. margin: auto 0 auto 0;
  510. padding: 8% 0;
  511. border-radius: 0;
  512. }
  513. section.clean-data-app section section svg,
  514. section.hotspot-container section section svg {
  515. width: 30%;
  516. height: auto;
  517. color: #ffff00;
  518. font-size: 8rem;
  519. }
  520. section.hotspot-container section section svg {
  521. width: 20%;
  522. height: auto;
  523. color: #ffffff;
  524. }
  525. section.clean-data-app section section h1,
  526. section.hotspot-container section section h1 {
  527. color: #ffffff;
  528. font-size: 1rem;
  529. }
  530. section.clean-data-app section section p,
  531. section.hotspot-container section section p {
  532. margin: 5% 0 8% 0;
  533. padding: 0 3%;
  534. color: #ffffff;
  535. text-align: center;
  536. font-family: Arial, sans-serif;
  537. }
  538. section.hotspot-container section section p {
  539. width: 100%;
  540. height: 10%;
  541. max-height: 300px;
  542. overflow: auto;
  543. }
  544. section.clean-data-app section section button,
  545. section.hotspot-container section section button {
  546. display: flex;
  547. align-items: center;
  548. justify-content: center;
  549. padding: 4% 10%;
  550. border: 0;
  551. border-radius: 60px;
  552. background: radial-gradient(circle, #0bb1d3, #9f2fff 85%);
  553. background-size: 300%;
  554. animation: 8s infinite ButtonStartVpnAnimation;
  555. }
  556. section.clean-data-app section section button span,
  557. section.hotspot-container section section button span {
  558. color: #ffffff;
  559. }
  560. section.renew-alert section section {
  561. max-height: 250px;
  562. margin: auto 0 auto 0;
  563. border-radius: 0;
  564. overflow: auto;
  565. &>p {
  566. overflow: hidden;
  567. color: #FFFFFF;
  568. text-align: center;
  569. &>bold {
  570. font-weight: bold;
  571. }
  572. &>italic {
  573. font-style: italic;
  574. text-decoration: underline;
  575. }
  576. }
  577. }
  578. section.logs-container section section {
  579. width: 100%;
  580. height: auto;
  581. max-height: 250px;
  582. padding: 0.4rem 0.4rem 0rem 0.4rem;
  583. margin: 0.4rem 0 0.8rem 0;
  584. border-radius: 0;
  585. overflow: auto;
  586. scrollbar-width: none;
  587. -ms-overflow-style: none;
  588. ::-webkit-scrollbar {
  589. display: none;
  590. }
  591. ::-webkit-scrollbar-thumb {
  592. background: transparent;
  593. }
  594. &>p {
  595. width: 100%;
  596. height: auto;
  597. color: #FFFFFF;
  598. font-size: 0.8rem;
  599. }
  600. }
  601. section.logs-container section button {
  602. width: auto;
  603. height: auto;
  604. display: flex;
  605. align-items: center;
  606. justify-content: center;
  607. gap: 8px;
  608. margin: auto 0 0 0;
  609. padding: 3% 7%;
  610. position: relative;
  611. border: 0px;
  612. border-radius: 20px;
  613. background: radial-gradient(circle, #0bb1d3, #9f2fff 85%);
  614. background-size: 300%;
  615. animation: 8s infinite ButtonStartVpnAnimation;
  616. &>svg {
  617. color: #FFFFFF;
  618. }
  619. &>span {
  620. color: #FFFFFF;
  621. }
  622. }
  623. section.profile header,
  624. section.carrier-list header,
  625. section.container-tools header,
  626. section.container-error header {
  627. width: 100%;
  628. height: 10%;
  629. display: flex;
  630. justify-content: center;
  631. align-items: center;
  632. position: relative;
  633. padding: 0 20px 0 20px;
  634. background: #051d40;
  635. }
  636. section.profile header::before,
  637. section.profile header::after,
  638. section.carrier-list header::before,
  639. section.carrier-list header::after,
  640. section.container-tools header::before,
  641. section.container-tools header::after,
  642. section.container-error header::before,
  643. section.container-error header::after {
  644. width: calc(100% + 2px);
  645. height: calc(100% + 2px);
  646. content: "";
  647. position: absolute;
  648. z-index: -1;
  649. background: linear-gradient(135deg,
  650. #9f2fff,
  651. #0bb1d3,
  652. #7f47cb,
  653. #00ffff,
  654. #7a2cec,
  655. #4adfdf,
  656. #76fcfc,
  657. #7f47cb,
  658. #9f2fff,
  659. #0bb1d3,
  660. #7f47cb,
  661. #00ffff,
  662. #7a2cec,
  663. #4adfdf);
  664. background-size: 300%;
  665. animation: 15s infinite ButtonStartVpnAnimation;
  666. }
  667. section.profile header::after,
  668. section.carrier-list header::after,
  669. section.container-tools header::after,
  670. section.container-error header::after {
  671. filter: blur(5px);
  672. }
  673. section.profile header svg,
  674. section.carrier-list header svg,
  675. section.container-tools header svg,
  676. section.container-error header svg {
  677. width: 20px;
  678. height: 20px;
  679. margin: 0 auto 0 0;
  680. fill: url(#grad);
  681. }
  682. section.profile header h1,
  683. section.carrier-list header h1,
  684. section.container-tools header h1,
  685. section.container-error header h1 {
  686. margin: 0 auto 0 0;
  687. color: #ffffff;
  688. font-size: 0.9rem;
  689. }
  690. section.profile form {
  691. width: 100%;
  692. height: auto;
  693. padding: 0px 10px;
  694. display: flex;
  695. flex-direction: column;
  696. }
  697. section.profile form fieldset {
  698. width: 100%;
  699. height: auto;
  700. display: flex;
  701. flex-direction: column;
  702. align-items: center;
  703. justify-content: center;
  704. position: relative;
  705. margin: 0% 0px;
  706. padding: 5px 10px;
  707. border: 0px solid #00ff00;
  708. border-radius: 5px;
  709. background: #051d40;
  710. }
  711. section.profile form fieldset::before,
  712. section.profile form fieldset::after {
  713. width: calc(100% + 2px);
  714. height: calc(100% + 17px);
  715. content: "";
  716. position: absolute;
  717. top: -16px;
  718. right: 0;
  719. bottom: 0;
  720. left: -1px;
  721. z-index: -1;
  722. border-radius: 5px;
  723. background: radial-gradient(circle,
  724. #9f2fff,
  725. #0bb1d3,
  726. #7f47cb,
  727. #00ffff,
  728. #7a2cec,
  729. #4adfdf,
  730. #76fcfc,
  731. #7f47cb,
  732. #9f2fff,
  733. #0bb1d3,
  734. #7f47cb,
  735. #00ffff,
  736. #7a2cec,
  737. #4adfdf);
  738. background-size: 300%;
  739. animation: 20s infinite ButtonStartVpnAnimation;
  740. }
  741. section.profile form fieldset::after {
  742. filter: blur(3px);
  743. }
  744. section.profile form fieldset legend {
  745. padding: 0px 7px 0px 5px;
  746. background: #051d40;
  747. }
  748. section.profile form fieldset legend svg {
  749. width: auto;
  750. height: 1.563rem;
  751. fill: url(#grad);
  752. }
  753. section.profile form fieldset p {
  754. color: #ffffff;
  755. font-size: 0.9rem;
  756. font-style: italic;
  757. }
  758. section.profile form fieldset:nth-child(2) {
  759. margin-top: 5%;
  760. padding: 0px 10px 20px 10px;
  761. }
  762. section.profile form fieldset:nth-child(2)::after,
  763. section.profile form fieldset:nth-child(2)::before {
  764. height: calc(100% + 15px);
  765. top: -14px;
  766. }
  767. section.profile form fieldset:nth-child(2) legend {
  768. color: #ffffff;
  769. }
  770. section.profile form fieldset:nth-child(2) label {
  771. margin-right: auto;
  772. color: #ffffff;
  773. }
  774. section.profile form fieldset:nth-child(2) label.hidden {
  775. display: none;
  776. }
  777. section.profile form fieldset:nth-child(2) div {
  778. width: 100%;
  779. height: 40px;
  780. display: flex;
  781. align-items: center;
  782. margin: 0 0 0 auto;
  783. border: 1px solid #ffffff;
  784. border-radius: 5px;
  785. overflow: hidden;
  786. }
  787. section.profile form fieldset:nth-child(2) div.hidden {
  788. display: none;
  789. }
  790. section.profile form fieldset:nth-child(2) div svg {
  791. width: 15%;
  792. max-width: 40px;
  793. height: 100%;
  794. max-height: 40px;
  795. padding: 3%;
  796. color: #ffffff;
  797. }
  798. section.profile form fieldset:nth-child(2) div svg.hidden {
  799. display: none;
  800. }
  801. section.profile form fieldset:nth-child(2) div input {
  802. width: 100%;
  803. height: 100%;
  804. padding: 0px 5px;
  805. border: 0px;
  806. border-left: 1px solid #ffffff;
  807. outline: none;
  808. color: #ffffff;
  809. background: transparent;
  810. }
  811. section.profile form fieldset:nth-child(2) label[for="passworddiv"] {
  812. margin-top: 4%;
  813. }
  814. section.profile form fieldset:nth-child(2) label[for="uuiddiv"] {
  815. margin-top: 4%;
  816. }
  817. section.profile form fieldset:nth-child(2) button {
  818. width: 80%;
  819. min-width: 200px;
  820. height: 20%;
  821. min-height: 30px;
  822. display: flex;
  823. align-items: center;
  824. justify-content: center;
  825. gap: 10px;
  826. margin: 6% auto 0px auto;
  827. border: 0px;
  828. border-radius: 20px;
  829. background: radial-gradient(circle, #0bb1d3, #9f2fff 85%);
  830. background-size: 300%;
  831. animation: 5s infinite ButtonStartVpnAnimation;
  832. }
  833. section.profile form fieldset:nth-child(2) button svg {
  834. color: #ffffff;
  835. filter: drop-shadow(1px 1px 2px rgba(72, 79, 87, 0.5));
  836. }
  837. section.profile form fieldset:nth-child(2) button span {
  838. color: #ffffff;
  839. font-family: Arial, sans-serif;
  840. font-weight: 500;
  841. text-shadow: 1px 1px 2px rgba(72, 79, 87, 0.5);
  842. }
  843. section.carrier-list section {
  844. width: 100%;
  845. height: 90%;
  846. overflow-y: auto;
  847. }
  848. section.carrier-list section div:first-child {
  849. margin: 0;
  850. }
  851. section.carrier-list section div {
  852. width: 100%;
  853. height: auto;
  854. display: flex;
  855. flex-direction: column;
  856. }
  857. section.carrier-list section div h1 {
  858. width: 100%;
  859. height: 50px;
  860. display: flex;
  861. align-items: center;
  862. padding: 0px 3%;
  863. color: #ffffff;
  864. font-size: 0.9rem;
  865. background: #051d40;
  866. }
  867. section.carrier-list section div ul {
  868. width: 100%;
  869. height: auto;
  870. list-style: none;
  871. }
  872. section.carrier-list section div ul li {
  873. width: 100%;
  874. height: 60px;
  875. display: flex;
  876. align-items: center;
  877. gap: 5px;
  878. position: relative;
  879. margin: 1% 0;
  880. padding: 0 2%;
  881. background: #07214b;
  882. color: #ffffff;
  883. /* overflow: hidden; */
  884. /* REMOVER CASO QUEIRA A BORDA ANIMADA E COLORIDA */
  885. }
  886. section.carrier-list section div ul li::before,
  887. section.carrier-list section div ul li::after {
  888. width: 100%;
  889. height: calc(100% + 2px);
  890. content: "";
  891. position: absolute;
  892. top: 0;
  893. left: 0;
  894. z-index: -1;
  895. background: radial-gradient(circle,
  896. #9f2fff,
  897. #0bb1d3,
  898. #7f47cb,
  899. #00ffff,
  900. #7a2cec,
  901. #4adfdf,
  902. #76fcfc,
  903. #7f47cb,
  904. #9f2fff,
  905. #0bb1d3,
  906. #7f47cb,
  907. #00ffff,
  908. #7a2cec,
  909. #4adfdf);
  910. background-size: 300%;
  911. animation: 15s infinite ButtonStartVpnAnimation;
  912. }
  913. section.carrier-list section div ul li img {
  914. width: 30px;
  915. }
  916. section.carrier-list section div ul li span {
  917. width: calc(100% - 30px);
  918. white-space: nowrap;
  919. overflow: auto;
  920. }
  921. section.carrier-list section div ul li svg {
  922. width: 30px;
  923. display: none;
  924. }
  925. section.carrier-list section div ul li.active svg {
  926. display: block;
  927. }
  928. section.container-tools section {
  929. width: 100%;
  930. height: 89%;
  931. display: flex;
  932. flex-direction: column;
  933. gap: 10px;
  934. margin: 0 auto 0 auto;
  935. padding: 2% 0 0 0;
  936. background: transparent;
  937. overflow: auto;
  938. }
  939. section.container-tools section button {
  940. width: 100%;
  941. height: auto;
  942. display: flex;
  943. align-items: center;
  944. gap: 5px;
  945. padding: 10px;
  946. border: 0px solid transparent;
  947. border-bottom: 1px solid #ddd;
  948. background: transparent;
  949. }
  950. section.container-tools section button svg:first-child {
  951. width: 20px;
  952. height: 100%;
  953. margin: 0 10px 0 0;
  954. color: #ffffff;
  955. }
  956. section.container-tools section button div {
  957. max-width: 83%;
  958. height: auto;
  959. display: flex;
  960. flex-direction: column;
  961. align-items: flex-start;
  962. gap: 5px;
  963. }
  964. section.container-tools section button div h3 {
  965. color: #ffffff;
  966. }
  967. section.container-tools section button div p {
  968. color: #ffffff;
  969. text-align: left;
  970. }
  971. section.container-tools section button svg:last-child {
  972. width: 16px;
  973. height: 100%;
  974. margin: 0 0 0 auto;
  975. color: #ffffff;
  976. }
  977. section.container-error section {
  978. width: 100%;
  979. height: 85%;
  980. display: flex;
  981. flex-direction: column;
  982. align-items: center;
  983. }
  984. section.container-error section h1 {
  985. margin: 1% 0 0 0;
  986. color: #ffffff;
  987. font-size: 0.9rem;
  988. }
  989. section.container-error section p {
  990. margin: 3% 0 0 0;
  991. padding: 0 3%;
  992. color: #ffffff;
  993. text-align: center;
  994. font-size: 0.8rem;
  995. font-family: Arial, sans-serif;
  996. overflow: auto;
  997. }
  998. section.active {
  999. opacity: 1;
  1000. transform: translateX(0%);
  1001. }
  1002. section.container-menu {
  1003. width: 100%;
  1004. height: 10%;
  1005. display: flex;
  1006. align-items: center;
  1007. justify-content: center;
  1008. gap: 10px;
  1009. position: relative;
  1010. margin: auto 0px 0px 0px;
  1011. padding: 0px 10px;
  1012. background-color: #051d40;
  1013. }
  1014. section.container-menu::before,
  1015. section.container-menu::after {
  1016. width: calc(100%);
  1017. height: calc(100% + 4px);
  1018. content: "";
  1019. position: absolute;
  1020. left: 0;
  1021. right: 0;
  1022. bottom: -2px;
  1023. z-index: -1;
  1024. background: linear-gradient(135deg,
  1025. #9f2fff,
  1026. #0bb1d3,
  1027. #7f47cb,
  1028. #00ffff,
  1029. #7a2cec,
  1030. #4adfdf,
  1031. #76fcfc,
  1032. #7f47cb,
  1033. #9f2fff,
  1034. #0bb1d3,
  1035. #7f47cb,
  1036. #00ffff,
  1037. #7a2cec,
  1038. #4adfdf);
  1039. background-size: 300%;
  1040. animation: 4s infinite alternate-reverse ButtonStartVpnAnimation;
  1041. }
  1042. section.container-menu::after {
  1043. filter: blur(10px);
  1044. }
  1045. section.container-menu button {
  1046. flex: 1;
  1047. width: 60px;
  1048. height: 50%;
  1049. display: flex;
  1050. flex-direction: column;
  1051. justify-content: center;
  1052. align-items: center;
  1053. gap: 8px;
  1054. position: relative;
  1055. z-index: 5;
  1056. border: 0px;
  1057. background: transparent;
  1058. }
  1059. section.container-menu button:nth-child(2) {
  1060. margin-right: 10px;
  1061. }
  1062. section.container-menu button:nth-child(3) {
  1063. margin-right: 10px;
  1064. }
  1065. section.container-menu button:last-child {
  1066. margin-right: 5px;
  1067. }
  1068. section.container-menu button svg {
  1069. color: #ffffff;
  1070. }
  1071. section.container-menu button span {
  1072. color: #ffffff;
  1073. text-transform: uppercase;
  1074. font-size: 0.7rem;
  1075. }
  1076. section.container-toast {
  1077. width: 100%;
  1078. height: auto;
  1079. display: flex;
  1080. justify-content: center;
  1081. align-items: center;
  1082. position: absolute;
  1083. left: 0;
  1084. bottom: 2.5%;
  1085. right: 0;
  1086. z-index: 99999999;
  1087. padding: 10px 10px;
  1088. transform: scale(0);
  1089. }
  1090. section.container-toast div.toast {
  1091. width: auto;
  1092. height: auto;
  1093. display: flex;
  1094. align-items: center;
  1095. position: relative;
  1096. padding: 0px 5px 0px 0px;
  1097. border: 1px solid transparent;
  1098. border-radius: 10px;
  1099. background: #152039;
  1100. }
  1101. section.container-toast div.toast::before,
  1102. section.container-toast div.toast::after {
  1103. width: calc(100% + 10px);
  1104. height: calc(100% + 10px);
  1105. content: "";
  1106. position: absolute;
  1107. top: -5px;
  1108. left: -5px;
  1109. z-index: -1;
  1110. border-radius: 10px;
  1111. background: radial-gradient(circle,
  1112. #9f2fff,
  1113. #0bb1d3,
  1114. #7f47cb,
  1115. #00ffff,
  1116. #7a2cec,
  1117. #4adfdf,
  1118. #76fcfc,
  1119. #7f47cb,
  1120. #9f2fff,
  1121. #0bb1d3,
  1122. #7f47cb,
  1123. #00ffff,
  1124. #7a2cec,
  1125. #4adfdf);
  1126. background-size: 300%;
  1127. animation: 15s infinite ButtonStartVpnAnimation;
  1128. }
  1129. section.container-toast div.toast::after {
  1130. filter: blur(5px);
  1131. }
  1132. section.container-toast div.toast.error {
  1133. border: 1px solid #ff0000;
  1134. }
  1135. section.container-toast div.toast div.icon {
  1136. width: auto;
  1137. height: 100%;
  1138. display: flex;
  1139. justify-content: center;
  1140. align-items: center;
  1141. padding: 5px 4px 5px 7px;
  1142. border-top-left-radius: 10px;
  1143. border-bottom-left-radius: 10px;
  1144. overflow: hidden;
  1145. background: #152039;
  1146. }
  1147. section.container-toast div.toast.error div.icon {
  1148. border-right: 1px solid #ff0000;
  1149. }
  1150. section.container-toast div.toast div.icon img {
  1151. width: auto;
  1152. height: 100%;
  1153. min-height: 30px;
  1154. }
  1155. section.container-toast div.toast span {
  1156. margin-left: 5px;
  1157. color: #ffffff;
  1158. font-family: Arial, sans-serif;
  1159. font-size: 0.8rem;
  1160. font-weight: 300;
  1161. }
  1162. @media (max-width: 280px) {
  1163. section.container-menu button {
  1164. flex: 1;
  1165. width: 60px;
  1166. max-width: 60px;
  1167. height: 50%;
  1168. display: flex;
  1169. flex-direction: column;
  1170. justify-content: center;
  1171. align-items: center;
  1172. gap: 8px;
  1173. position: relative;
  1174. z-index: 5;
  1175. border: 0px;
  1176. background: transparent;
  1177. }
  1178. section.container-menu button:last-child {
  1179. margin-right: 10px;
  1180. }
  1181. section.container-menu button span {
  1182. font-size: 0.5rem;
  1183. }
  1184. }
  1185. @media only screen and (max-width: 576px) {
  1186. section.container-menu button {
  1187. flex: 1;
  1188. width: 60px;
  1189. max-width: 60px;
  1190. height: 50%;
  1191. display: flex;
  1192. flex-direction: column;
  1193. justify-content: center;
  1194. align-items: center;
  1195. gap: 8px;
  1196. position: relative;
  1197. z-index: 5;
  1198. border: 0px;
  1199. background: transparent;
  1200. }
  1201. section.container-menu button:last-child {
  1202. margin-right: 10px;
  1203. }
  1204. section.container-menu button span {
  1205. font-size: 0.5rem;
  1206. }
  1207. }
  1208. .spaceInDown {
  1209. -webkit-animation-name: spaceInDown;
  1210. animation-name: spaceInDown;
  1211. }
  1212. @-webkit-keyframes spaceInDown {
  1213. 0% {
  1214. opacity: 0;
  1215. transform-origin: 50% 100%;
  1216. transform: scale(0.2) translate(0%, 200%);
  1217. }
  1218. 100% {
  1219. opacity: 1;
  1220. transform-origin: 50% 100%;
  1221. transform: scale(1) translate(0%, 0%);
  1222. }
  1223. }
  1224. @keyframes spaceInDown {
  1225. 0% {
  1226. opacity: 0;
  1227. transform-origin: 50% 100%;
  1228. transform: scale(0.2) translate(0%, 200%);
  1229. }
  1230. 100% {
  1231. opacity: 1;
  1232. transform-origin: 50% 100%;
  1233. transform: scale(1) translate(0%, 0%);
  1234. }
  1235. }
  1236. .spaceOutDown {
  1237. -webkit-animation-name: spaceOutDown;
  1238. animation-name: spaceOutDown;
  1239. }
  1240. @-webkit-keyframes spaceOutDown {
  1241. 0% {
  1242. opacity: 1;
  1243. transform-origin: 50% 100%;
  1244. transform: scale(1) translate(0%, 0%);
  1245. }
  1246. 100% {
  1247. opacity: 0;
  1248. transform-origin: 50% 100%;
  1249. transform: scale(0.2) translate(0%, 200%);
  1250. }
  1251. }
  1252. @keyframes spaceOutDown {
  1253. 0% {
  1254. opacity: 1;
  1255. transform-origin: 50% 100%;
  1256. transform: scale(1) translate(0%, 0%);
  1257. }
  1258. 100% {
  1259. opacity: 0;
  1260. transform-origin: 50% 100%;
  1261. transform: scale(0.2) translate(0%, 200%);
  1262. }
  1263. }
  1264. .masterSshAnimatedTime {
  1265. -webkit-animation-duration: 1s;
  1266. animation-duration: 1s;
  1267. -webkit-animation-fill-mode: both;
  1268. animation-fill-mode: both;
  1269. }
  1270. @media (print),
  1271. (prefers-reduced-motion) {
  1272. .masterSshAnimatedTime {
  1273. -webkit-animation: unset !important;
  1274. animation: unset !important;
  1275. transition: none !important;
  1276. }
  1277. }
  1278. </style>
  1279. </head>
  1280. <body>
  1281. <main>
  1282. <section class="home active">
  1283. <header>
  1284. <img src="https://svgshare.com/i/w8x.svg" alt="LOGO DO APP" id="app_logo" />
  1285. </header>
  1286. <section class="container-carrier-selector-button">
  1287. <button type="button" id="carrier-list-button">
  1288. <span id="value-of-carrier-list-button">SELECIONE UMA CONFIGURAÇÃO</span>
  1289. </button>
  1290. </section>
  1291. <section class="container-button-start-stop-vpn">
  1292. <button type="button" title="Iniciar ou Parar conexão VPN" id="start-stop-vpn-button">
  1293. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-power"
  1294. viewBox="0 0 16 16">
  1295. <path d="M7.5 1v7h1V1h-1z" />
  1296. <path
  1297. d="M3 8.812a4.999 4.999 0 0 1 2.578-4.375l-.485-.874A6 6 0 1 0 11 3.616l-.501.865A5 5 0 1 1 3 8.812z" />
  1298. </svg>
  1299. </button>
  1300. </section>
  1301. <section class="container-status-connection active">
  1302. <button type="button">
  1303. <span id="state-value">LBL_STATE_DISCONNECTED</span>
  1304. </button>
  1305. </section>
  1306. <section class="container-local-ip active">
  1307. <button type="button">
  1308. <span id="local-ip-value">Localizando IP...</span>
  1309. </button>
  1310. </section>
  1311. <section class="container-version active">
  1312. <button type="button">
  1313. <span id="version">Carregando versão...</span>
  1314. </button>
  1315. </section>
  1316. </section>
  1317. <section class="carrier-list">
  1318. <header>
  1319. <svg id="back-carrier-container" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
  1320. class="bi bi-arrow-return-left" viewBox="0 0 16 16">
  1321. <path fill-rule="evenodd"
  1322. d="M14.5 1.5a.5.5 0 0 1 .5.5v4.8a2.5 2.5 0 0 1-2.5 2.5H2.707l3.347 3.346a.5.5 0 0 1-.708.708l-4.2-4.2a.5.5 0 0 1 0-.708l4-4a.5.5 0 1 1 .708.708L2.707 8.3H12.5A1.5 1.5 0 0 0 14 6.8V2a.5.5 0 0 1 .5-.5z" />
  1323. </svg>
  1324. <h1>SELECIONE UMA OPÇÃO</h1>
  1325. </header>
  1326. <section></section>
  1327. </section>
  1328. <section class="profile">
  1329. <header>
  1330. <svg id="back-profile-container" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
  1331. class="bi bi-arrow-return-left" viewBox="0 0 16 16">
  1332. <path fill-rule="evenodd"
  1333. d="M14.5 1.5a.5.5 0 0 1 .5.5v4.8a2.5 2.5 0 0 1-2.5 2.5H2.707l3.347 3.346a.5.5 0 0 1-.708.708l-4.2-4.2a.5.5 0 0 1 0-.708l4-4a.5.5 0 1 1 .708.708L2.707 8.3H12.5A1.5 1.5 0 0 0 14 6.8V2a.5.5 0 0 1 .5-.5z" />
  1334. </svg>
  1335. <h1>PERFIL</h1>
  1336. </header>
  1337. <form>
  1338. <fieldset>
  1339. <legend>
  1340. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
  1341. class="bi bi-person-exclamation" viewBox="0 0 16 16">
  1342. <path
  1343. 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 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" />
  1344. <path
  1345. d="M16 12.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0Zm-3.5-2a.5.5 0 0 0-.5.5v1.5a.5.5 0 0 0 1 0V11a.5.5 0 0 0-.5-.5Zm0 4a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1Z" />
  1346. </svg>
  1347. </legend>
  1348. <p>
  1349. Insira suas credenciais nos campos abaixo e clique no botão
  1350. "Salvar credenciais". Isso o levará de volta à página inicial do
  1351. aplicativo, onde você poderá se conectar e desfrutar da conexão.
  1352. </p>
  1353. </fieldset>
  1354. <fieldset>
  1355. <legend>Informe suas credenciais</legend>
  1356. <label for="usernamediv">Nome de usuário</label>
  1357. <div id="usernamediv">
  1358. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-person"
  1359. viewBox="0 0 16 16">
  1360. <path
  1361. 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" />
  1362. </svg>
  1363. <input id="username" type="text" name="username" placeholder="Usuário" />
  1364. </div>
  1365. <label for="passworddiv">Senha</label>
  1366. <div id="passworddiv">
  1367. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-key"
  1368. viewBox="0 0 16 16">
  1369. <path
  1370. 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" />
  1371. <path d="M4 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0z" />
  1372. </svg>
  1373. <input id="password" type="password" name="password" placeholder="Senha" />
  1374. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
  1375. class="bi bi-eye-slash hidden" id="eye-not-view" viewBox="0 0 16 16">
  1376. <path
  1377. 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.486l.708.709z" />
  1378. <path
  1379. 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.829l.822.822zm-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.829z" />
  1380. <path
  1381. 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.708z" />
  1382. </svg>
  1383. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye"
  1384. id="eye-view" viewBox="0 0 16 16">
  1385. <path
  1386. d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.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" />
  1387. <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z" />
  1388. </svg>
  1389. </div>
  1390. <label for="uuiddiv" class="hidden">UUID</label>
  1391. <div id="uuiddiv" class="hidden">
  1392. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-fingerprint"
  1393. viewBox="0 0 16 16">
  1394. <path
  1395. 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" />
  1396. <path
  1397. 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" />
  1398. <path
  1399. 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" />
  1400. <path
  1401. 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" />
  1402. <path
  1403. 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" />
  1404. </svg>
  1405. <input id="uuid" type="text" placeholder="UUID" />
  1406. </div>
  1407. <button id="save-creds" type="button" title="Salvar informações de usuario e senha">
  1408. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-save"
  1409. viewBox="0 0 16 16">
  1410. <path
  1411. d="M2 1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H9.5a1 1 0 0 0-1 1v7.293l2.646-2.647a.5.5 0 0 1 .708.708l-3.5 3.5a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L7.5 9.293V2a2 2 0 0 1 2-2H14a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h2.5a.5.5 0 0 1 0 1H2z" />
  1412. </svg>
  1413. <span>Salvar credenciais</span>
  1414. </button>
  1415. </fieldset>
  1416. </form>
  1417. </section>
  1418. <section class="container-tools">
  1419. <header>
  1420. <svg id="back-tools-container" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
  1421. class="bi bi-arrow-return-left" viewBox="0 0 16 16">
  1422. <path fill-rule="evenodd"
  1423. d="M14.5 1.5a.5.5 0 0 1 .5.5v4.8a2.5 2.5 0 0 1-2.5 2.5H2.707l3.347 3.346a.5.5 0 0 1-.708.708l-4.2-4.2a.5.5 0 0 1 0-.708l4-4a.5.5 0 1 1 .708.708L2.707 8.3H12.5A1.5 1.5 0 0 0 14 6.8V2a.5.5 0 0 1 .5-.5z" />
  1424. </svg>
  1425. <h1>FERRAMENTAS</h1>
  1426. </header>
  1427. <section>
  1428. <button type="button" id="register-button">
  1429. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-list-columns"
  1430. viewBox="0 0 16 16">
  1431. <path fill-rule="evenodd"
  1432. d="M0 .5A.5.5 0 0 1 .5 0h9a.5.5 0 0 1 0 1h-9A.5.5 0 0 1 0 .5Zm13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Zm-13 2A.5.5 0 0 1 .5 2h8a.5.5 0 0 1 0 1h-8a.5.5 0 0 1-.5-.5Zm13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Zm-13 2A.5.5 0 0 1 .5 4h10a.5.5 0 0 1 0 1H.5a.5.5 0 0 1-.5-.5Zm13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Zm-13 2A.5.5 0 0 1 .5 6h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5Zm13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Zm-13 2A.5.5 0 0 1 .5 8h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5Zm13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Zm-13 2a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5Zm13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Zm-13 2a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5Zm13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Zm-13 2a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H.5a.5.5 0 0 1-.5-.5Zm13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5Z" />
  1433. </svg>
  1434. <div>
  1435. <h3>REGISTRO</h3>
  1436. <p>
  1437. Verifica todos os detalhes do que acontece ao abrir e conectar
  1438. no app.
  1439. </p>
  1440. </div>
  1441. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-right"
  1442. viewBox="0 0 16 16">
  1443. <path fill-rule="evenodd"
  1444. d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z" />
  1445. </svg>
  1446. </button>
  1447. <button type="button" id="speedtest-tool">
  1448. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-activity"
  1449. viewBox="0 0 16 16">
  1450. <path fill-rule="evenodd"
  1451. d="M6 2a.5.5 0 0 1 .47.33L10 12.036l1.53-4.208A.5.5 0 0 1 12 7.5h3.5a.5.5 0 0 1 0 1h-3.15l-1.88 5.17a.5.5 0 0 1-.94 0L6 3.964 4.47 8.171A.5.5 0 0 1 4 8.5H.5a.5.5 0 0 1 0-1h3.15l1.88-5.17A.5.5 0 0 1 6 2Z" />
  1452. </svg>
  1453. <div>
  1454. <h3>SPEEDTEST</h3>
  1455. <p>Teste a velocidade da sua conexão</p>
  1456. </div>
  1457. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-right"
  1458. viewBox="0 0 16 16">
  1459. <path fill-rule="evenodd"
  1460. d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z" />
  1461. </svg>
  1462. </button>
  1463. <button type="button" id="hotspot-button-tools">
  1464. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-broadcast"
  1465. viewBox="0 0 16 16">
  1466. <path
  1467. d="M3.05 3.05a7 7 0 0 0 0 9.9.5.5 0 0 1-.707.707 8 8 0 0 1 0-11.314.5.5 0 0 1 .707.707zm2.122 2.122a4 4 0 0 0 0 5.656.5.5 0 1 1-.708.708 5 5 0 0 1 0-7.072.5.5 0 0 1 .708.708zm5.656-.708a.5.5 0 0 1 .708 0 5 5 0 0 1 0 7.072.5.5 0 1 1-.708-.708 4 4 0 0 0 0-5.656.5.5 0 0 1 0-.708zm2.122-2.12a.5.5 0 0 1 .707 0 8 8 0 0 1 0 11.313.5.5 0 0 1-.707-.707 7 7 0 0 0 0-9.9.5.5 0 0 1 0-.707zM10 8a2 2 0 1 1-4 0 2 2 0 0 1 4 0z" />
  1468. </svg>
  1469. <div>
  1470. <h3>HOTSPOT</h3>
  1471. <p>
  1472. Aqui você pode compartilar sua conexão VPN usando o roteador do
  1473. seu celular.
  1474. </p>
  1475. </div>
  1476. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-right"
  1477. viewBox="0 0 16 16">
  1478. <path fill-rule="evenodd"
  1479. d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z" />
  1480. </svg>
  1481. </button>
  1482. <button type="button" id="apn-tool">
  1483. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-broadcast-pin"
  1484. viewBox="0 0 16 16">
  1485. <path
  1486. d="M3.05 3.05a7 7 0 0 0 0 9.9.5.5 0 0 1-.707.707 8 8 0 0 1 0-11.314.5.5 0 0 1 .707.707zm2.122 2.122a4 4 0 0 0 0 5.656.5.5 0 1 1-.708.708 5 5 0 0 1 0-7.072.5.5 0 0 1 .708.708zm5.656-.708a.5.5 0 0 1 .708 0 5 5 0 0 1 0 7.072.5.5 0 1 1-.708-.708 4 4 0 0 0 0-5.656.5.5 0 0 1 0-.708zm2.122-2.12a.5.5 0 0 1 .707 0 8 8 0 0 1 0 11.313.5.5 0 0 1-.707-.707 7 7 0 0 0 0-9.9.5.5 0 0 1 0-.707zM6 8a2 2 0 1 1 2.5 1.937V15.5a.5.5 0 0 1-1 0V9.937A2 2 0 0 1 6 8z" />
  1487. </svg>
  1488. <div>
  1489. <h3>CONFIGURAR APN</h3>
  1490. <p>Aqui você pode fazer ajustes no APN</p>
  1491. </div>
  1492. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-right"
  1493. viewBox="0 0 16 16">
  1494. <path fill-rule="evenodd"
  1495. d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z" />
  1496. </svg>
  1497. </button>
  1498. <button type="button" id="battery-tool">
  1499. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
  1500. class="bi bi-battery-charging" viewBox="0 0 16 16">
  1501. <path
  1502. d="M9.585 2.568a.5.5 0 0 1 .226.58L8.677 6.832h1.99a.5.5 0 0 1 .364.843l-5.334 5.667a.5.5 0 0 1-.842-.49L5.99 9.167H4a.5.5 0 0 1-.364-.843l5.333-5.667a.5.5 0 0 1 .616-.09z" />
  1503. <path d="M2 4h4.332l-.94 1H2a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h2.38l-.308 1H2a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z" />
  1504. <path
  1505. d="M2 6h2.45L2.908 7.639A1.5 1.5 0 0 0 3.313 10H2V6zm8.595-2-.308 1H12a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H9.276l-.942 1H12a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-1.405z" />
  1506. <path
  1507. d="M12 10h-1.783l1.542-1.639c.097-.103.178-.218.241-.34V10zm0-3.354V6h-.646a1.5 1.5 0 0 1 .646.646zM16 8a1.5 1.5 0 0 1-1.5 1.5v-3A1.5 1.5 0 0 1 16 8z" />
  1508. </svg>
  1509. <div>
  1510. <h3>OTIMIZAÇÃO DE BATERIA</h3>
  1511. <p>
  1512. Aqui você consegue desativar a otimização de bateria que acaba
  1513. encerrando o aplicativo sem a sua permissão!
  1514. </p>
  1515. </div>
  1516. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-right"
  1517. viewBox="0 0 16 16">
  1518. <path fill-rule="evenodd"
  1519. d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z" />
  1520. </svg>
  1521. </button>
  1522. <button type="button" id="checkuser-tool">
  1523. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
  1524. class="bi bi-person-lines-fill" viewBox="0 0 16 16">
  1525. <path
  1526. 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" />
  1527. </svg>
  1528. <div>
  1529. <h3>DETALHES DO LOGIN</h3>
  1530. <p>
  1531. Aqui você consegue visualizar alguns detalhes do seu perfil.
  1532. </p>
  1533. </div>
  1534. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-right"
  1535. viewBox="0 0 16 16">
  1536. <path fill-rule="evenodd"
  1537. d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z" />
  1538. </svg>
  1539. </button>
  1540. <button type="button" id="button-open-clear-data-app">
  1541. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash"
  1542. viewBox="0 0 16 16">
  1543. <path
  1544. 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" />
  1545. <path
  1546. 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" />
  1547. </svg>
  1548. <div>
  1549. <h3>LIMPAR DADOS</h3>
  1550. <p>
  1551. Aqui você pode fazer a limpeza do cache e dados do aplicativo.
  1552. </p>
  1553. </div>
  1554. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-right"
  1555. viewBox="0 0 16 16">
  1556. <path fill-rule="evenodd"
  1557. d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z" />
  1558. </svg>
  1559. </button>
  1560. <button type="button" id="button-open-terms-app">
  1561. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
  1562. class="bi bi-journal-medical" viewBox="0 0 16 16">
  1563. <path fill-rule="evenodd"
  1564. d="M8 4a.5.5 0 0 1 .5.5v.634l.549-.317a.5.5 0 1 1 .5.866L9 6l.549.317a.5.5 0 1 1-.5.866L8.5 6.866V7.5a.5.5 0 0 1-1 0v-.634l-.549.317a.5.5 0 1 1-.5-.866L7 6l-.549-.317a.5.5 0 0 1 .5-.866l.549.317V4.5A.5.5 0 0 1 8 4zM5 9.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5zm0 2a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5z" />
  1565. <path
  1566. 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" />
  1567. <path
  1568. 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" />
  1569. </svg>
  1570. <div>
  1571. <h3>TERMOS DE USO</h3>
  1572. <p>
  1573. Aqui você consegue ler os termos de uso e licença do aplicativo.
  1574. </p>
  1575. </div>
  1576. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-right"
  1577. viewBox="0 0 16 16">
  1578. <path fill-rule="evenodd"
  1579. d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z" />
  1580. </svg>
  1581. </button>
  1582. </section>
  1583. </section>
  1584. <section class="logs-container">
  1585. <section>
  1586. <header>
  1587. <h1>REGISTRO</h1>
  1588. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-x-lg"
  1589. id="register-logs-close" viewBox="0 0 16 16">
  1590. <path
  1591. 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" />
  1592. </svg>
  1593. </header>
  1594. <section>
  1595. <p></p>
  1596. </section>
  1597. <button type="button" id="clear-logs">
  1598. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash"
  1599. viewBox="0 0 16 16">
  1600. <path
  1601. 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" />
  1602. <path
  1603. 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" />
  1604. </svg>
  1605. <span>LIMPAR REGISTRO</span>
  1606. </button>
  1607. </section>
  1608. </section>
  1609. <section class="loading">
  1610. <section>
  1611. <header>
  1612. <h1>CARREGANDO INFORMAÇÕES</h1>
  1613. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-x-lg"
  1614. id="loading-container-close" viewBox="0 0 16 16">
  1615. <path
  1616. 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" />
  1617. </svg>
  1618. </header>
  1619. <div class="loading"></div>
  1620. </section>
  1621. </section>
  1622. <section class="checkuser">
  1623. <section>
  1624. <header>
  1625. <h1>DETALHES DO USUÁRIO</h1>
  1626. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-x-lg"
  1627. id="checkuser-close" viewBox="0 0 16 16">
  1628. <path
  1629. 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" />
  1630. </svg>
  1631. </header>
  1632. <section>
  1633. <div>
  1634. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-person-fill"
  1635. viewBox="0 0 16 16">
  1636. <path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3Zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" />
  1637. </svg>
  1638. <span id="checkuser-name">USUÁRIO: ALEX</span>
  1639. </div>
  1640. <div>
  1641. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
  1642. class="bi bi-calendar-fill" viewBox="0 0 16 16">
  1643. <path
  1644. 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-2V5h16V4H0V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5z" />
  1645. </svg>
  1646. <span id="checkuser-expires">EXPIRA EM: 25/09/2023</span>
  1647. </div>
  1648. <div>
  1649. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-clock-fill"
  1650. viewBox="0 0 16 16">
  1651. <path
  1652. d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8 3.5a.5.5 0 0 0-1 0V9a.5.5 0 0 0 .252.434l3.5 2a.5.5 0 0 0 .496-.868L8 8.71V3.5z" />
  1653. </svg>
  1654. <span id="checkuser-remaing-days">RESTA: 30 DIAS</span>
  1655. </div>
  1656. <div>
  1657. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-phone-fill"
  1658. viewBox="0 0 16 16">
  1659. <path
  1660. d="M3 2a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V2zm6 11a1 1 0 1 0-2 0 1 1 0 0 0 2 0z" />
  1661. </svg>
  1662. <span id="checkuser-total-conection">CONEXÕES: 1/10</span>
  1663. </div>
  1664. </section>
  1665. </section>
  1666. </section>
  1667. <section class="renew-alert">
  1668. <section>
  1669. <header>
  1670. <h1>RENOVE SEU ACESSO</h1>
  1671. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-x-lg"
  1672. id="renew-alert-close" viewBox="0 0 16 16">
  1673. <path
  1674. 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" />
  1675. </svg>
  1676. </header>
  1677. <section>
  1678. <p>
  1679. <bold id="renew-username">Caro usuário</bold>
  1680. <br /><br />
  1681. <italic>Seu período de acesso está chegando ao fim! Para continuar utilizando nossos serviços, entre em
  1682. contato para fazer a renovação.</italic>
  1683. <br /><br />
  1684. Atenciosamente, <bold>MASTER SSH</bold>
  1685. </p>
  1686. </section>
  1687. </section>
  1688. </section>
  1689. <section class="clean-data-app">
  1690. <section>
  1691. <header>
  1692. <h1>DESEJA CONFIRMAR ESSA AÇÃO ?</h1>
  1693. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-x-lg"
  1694. id="hidden-clear-data-app" viewBox="0 0 16 16">
  1695. <path
  1696. 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" />
  1697. </svg>
  1698. </header>
  1699. <section>
  1700. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
  1701. class="bi bi-exclamation-lg" viewBox="0 0 16 16">
  1702. <path
  1703. d="M7.005 3.1a1 1 0 1 1 1.99 0l-.388 6.35a.61.61 0 0 1-1.214 0L7.005 3.1ZM7 12a1 1 0 1 1 2 0 1 1 0 0 1-2 0Z" />
  1704. </svg>
  1705. <h1>TEM CERTEZA DA AÇÃO ?</h1>
  1706. <p>
  1707. Ao efetuar a ação de limpar os dados do aplicativo, será possível
  1708. carregar somente as configurações mais recentes mediante uma
  1709. conexão ativa com a internet.
  1710. </p>
  1711. <button type="button" id="confirm-clean-data-app">
  1712. <span>CONFIRMAR</span>
  1713. </button>
  1714. </section>
  1715. </section>
  1716. </section>
  1717. <section class="hotspot-container">
  1718. <section>
  1719. <header>
  1720. <h1>ROTEADOR WIFI - HOTSPOT</h1>
  1721. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-x-lg"
  1722. id="hidden-hotspot-container" viewBox="0 0 16 16">
  1723. <path
  1724. 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" />
  1725. </svg>
  1726. </header>
  1727. <section>
  1728. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-router-fill"
  1729. viewBox="0 0 16 16">
  1730. <path
  1731. 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" />
  1732. <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" />
  1733. <path
  1734. 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 1Zm4.5-.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0Zm2.5.5a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1Zm1.5-.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0Zm2 0a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0Z" />
  1735. <path d="M8.5 5.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z" />
  1736. </svg>
  1737. <h1 id="title-hotspot">ROTEAMENTO DESLIGADO</h1>
  1738. <p>
  1739. Ao ativar o hotspot com compartilhamento de VPN do seu celular, um
  1740. IP local é gerado no seu dispositivo. Este IP é usado como proxy
  1741. no dispositivo conectado à sua rede Wi-Fi.
  1742. <br />
  1743. <br />
  1744. <b>SIGA ESTES PASSOS IMPORTANTES</b>
  1745. <br />
  1746. <br />
  1747. 1 - Ligue o roteador do celular primeiro.
  1748. <br /><br />
  1749. 2 - Ative o compartilhamento de VPN.
  1750. <br /><br />
  1751. 3 - Use o botão para controlar o roteador.
  1752. <br /><br />
  1753. 4 - Encontre o segundo IP na barra de notificações.
  1754. <br /><br />
  1755. 5 - Copie o segundo IP e use como proxy no dispositivo conectado à
  1756. rede.
  1757. <br />
  1758. <br />
  1759. Lembre-se: O segundo IP é seu proxy. Isso garantirá o correto
  1760. funcionamento do compartilhamento de VPN via hotspot do celular.
  1761. </p>
  1762. <button type="button" id="enable-hotspot">
  1763. <span id="value-button-hotspot">LIGAR HOTSPOT</span>
  1764. </button>
  1765. </section>
  1766. </section>
  1767. </section>
  1768. <section class="terms-container">
  1769. <section>
  1770. <header>
  1771. <h1>TERMOS DE USO</h1>
  1772. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-x-lg"
  1773. id="hidden-terms-container" viewBox="0 0 16 16">
  1774. <path
  1775. 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" />
  1776. </svg>
  1777. </header>
  1778. <p>
  1779. Importante: Ao utilizar o nosso aplicativo, é fundamental que você
  1780. esteja ciente e concorde com os seguintes pontos:
  1781. <br /><br /><br />
  1782. 1° - Nosso suporte está disponível para ajudar clientes que
  1783. enfrentam problemas como dificuldades de conexão, informações
  1784. incorretas, ou se o aplicativo não está instalado corretamente.
  1785. <br /><br />
  1786. 2° - Não somos responsáveis por questões relacionadas à manutenção
  1787. da sua operadora, quedas na conexão causadas por fatores externos ou
  1788. problemas climáticos que possam afetar a velocidade da sua internet
  1789. através da VPN.
  1790. <br /><br />
  1791. 3° - Caso haja uma interrupção no serviço devido à operadora, não
  1792. efetuamos reembolsos. No entanto, os dias em que o serviço ficar
  1793. indisponível serão compensados quando a situação se normalizar,
  1794. visto que há custos associados à manutenção dos servidores.
  1795. <br /><br />
  1796. 4° - Não nos responsabilizamos por sites e jogos que impeçam o uso
  1797. da nossa VPN.
  1798. <br /><br />
  1799. 5° - É permitido usar apenas o número de dispositivos estipulado no
  1800. seu contrato com o revendedor autorizado.
  1801. <br /><br />
  1802. 6° - É estritamente proibido o uso de aplicativos torrent ou P2P,
  1803. pois eles podem prejudicar o desempenho dos nossos servidores.
  1804. <br /><br />
  1805. 7° - É importante que, independentemente da sua operadora, você faça
  1806. uma recarga a cada 2 meses para garantir um serviço contínuo.
  1807. <br /><br />
  1808. 8° - Mantenha o aplicativo sempre atualizado, pois as atualizações
  1809. são necessárias para garantir o bom funcionamento do serviço.
  1810. <br /><br /><br /><br />
  1811. Agradecemos por escolher o nosso aplicativo e desejamos a você uma
  1812. ótima experiência de navegação!
  1813. </p>
  1814. </section>
  1815. </section>
  1816. <section class="container-error">
  1817. <header>
  1818. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor"
  1819. class="bi bi-arrow-return-left" viewBox="0 0 16 16">
  1820. <path fill-rule="evenodd"
  1821. d="M14.5 1.5a.5.5 0 0 1 .5.5v4.8a2.5 2.5 0 0 1-2.5 2.5H2.707l3.347 3.346a.5.5 0 0 1-.708.708l-4.2-4.2a.5.5 0 0 1 0-.708l4-4a.5.5 0 1 1 .708.708L2.707 8.3H12.5A1.5 1.5 0 0 0 14 6.8V2a.5.5 0 0 1 .5-.5z" />
  1822. </svg>
  1823. <h1>ERROR</h1>
  1824. </header>
  1825. <section>
  1826. <h1 id="error-title"></h1>
  1827. <p id="error-log"></p>
  1828. </section>
  1829. </section>
  1830. <section class="container-toast masterSshAnimatedTime">
  1831. <div class="toast">
  1832. <div class="icon">
  1833. <img
  1834. src="data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg id='Camada_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 255.17 400'%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill:%23fff;%7D.cls-2%7Bfill:%239f2eff;%7D.cls-3%7Bfill:none;stroke:url(%23Gradiente_sem_nome_253-3);%7D.cls-3,.cls-4%7Bstroke-miterlimit:10;%7D.cls-4%7Bfill:url(%23Gradiente_sem_nome_253);stroke:url(%23Gradiente_sem_nome_253-2);%7D.cls-5%7Bfill:%230ab1d3;%7D%3C/style%3E%3ClinearGradient id='Gradiente_sem_nome_253' x1='76.24' y1='76.85' x2='139.38' y2='76.85' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%230bb1d3'/%3E%3Cstop offset='1' stop-color='%239f2fff'/%3E%3C/linearGradient%3E%3ClinearGradient id='Gradiente_sem_nome_253-2' x1='75.93' x2='139.69' xlink:href='%23Gradiente_sem_nome_253'/%3E%3ClinearGradient id='Gradiente_sem_nome_253-3' x1='72.44' y1='201.84' x2='127.55' y2='201.84' xlink:href='%23Gradiente_sem_nome_253'/%3E%3C/defs%3E%3Ccircle class='cls-5' cx='167.12' cy='32.88' r='32.88'/%3E%3Ccircle class='cls-1' cx='42.09' cy='132.11' r='42.09'/%3E%3Ccircle class='cls-2' cx='169.67' cy='314.5' r='85.5'/%3E%3Cline class='cls-4' x1='139.38' y1='51.86' x2='76.24' y2='101.85'/%3E%3Cline class='cls-3' x1='72.84' y1='165.78' x2='127.15' y2='237.9'/%3E%3C/svg%3E"
  1835. alt="Icone do toast" />
  1836. </div>
  1837. <span class="text">Procurando atualizações</span>
  1838. </div>
  1839. </section>
  1840. </main>
  1841. <section class="container-menu">
  1842. <button id="home" type="button" title="Inicio">
  1843. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-house"
  1844. viewBox="0 0 16 16">
  1845. <defs>
  1846. <linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="0%">
  1847. <stop offset="0%" stop-color="#0bb1d3" />
  1848. <stop offset="100%" stop-color="#9f2fff" />
  1849. </linearGradient>
  1850. </defs>
  1851. <path
  1852. d="M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L2 8.207V13.5A1.5 1.5 0 0 0 3.5 15h9a1.5 1.5 0 0 0 1.5-1.5V8.207l.646.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.707 1.5ZM13 7.207V13.5a.5.5 0 0 1-.5.5h-9a.5.5 0 0 1-.5-.5V7.207l5-5 5 5Z" />
  1853. </svg>
  1854. <span>Inicio</span>
  1855. </button>
  1856. <button id="login" type="button" title="Login">
  1857. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-person"
  1858. viewBox="0 0 16 16">
  1859. <path
  1860. 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" />
  1861. </svg>
  1862. <span>Perfil</span>
  1863. </button>
  1864. <button id="tools" type="button" title="Ferramentas">
  1865. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-nut"
  1866. viewBox="0 0 16 16">
  1867. <path
  1868. d="m11.42 2 3.428 6-3.428 6H4.58L1.152 8 4.58 2h6.84zM4.58 1a1 1 0 0 0-.868.504l-3.428 6a1 1 0 0 0 0 .992l3.428 6A1 1 0 0 0 4.58 15h6.84a1 1 0 0 0 .868-.504l3.429-6a1 1 0 0 0 0-.992l-3.429-6A1 1 0 0 0 11.42 1H4.58z" />
  1869. <path
  1870. d="M6.848 5.933a2.5 2.5 0 1 0 2.5 4.33 2.5 2.5 0 0 0-2.5-4.33zm-1.78 3.915a3.5 3.5 0 1 1 6.061-3.5 3.5 3.5 0 0 1-6.062 3.5z" />
  1871. </svg>
  1872. <span>Ferramentas</span>
  1873. </button>
  1874. <button id="update" type="button" title="Atualizar">
  1875. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-clockwise"
  1876. viewBox="0 0 16 16">
  1877. <path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z" />
  1878. <path 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" />
  1879. </svg>
  1880. <span>Atualizar</span>
  1881. </button>
  1882. </section>
  1883. <!-- FUNÇÕES DO APP -->
  1884. <script>
  1885. const appGetStatusbarHeightSize = () => DtGetStatusBarHeight.execute()
  1886. const appGetNavbarHeightSize = () => DtGetNavigationBarHeight.execute()
  1887. const appTranslateText = (label) => DtTranslateText.execute(label)
  1888. const appGetConfigLabel = (label) => DtGetAppConfig.execute(label)
  1889. const appGetCarrierName = () => `${Android.getNetworkName()}`
  1890. const appGetLocalIp = () => `${Android.getLocalIP()}`
  1891. const AppUpdate = () => DtStartAppUpdate.execute()
  1892. const appAllConfigs = () => DtGetConfigs.execute()
  1893. const appSetConfig = (id) => DtSetConfig.execute(id)
  1894. const appGetDefaultConfig = () => DtGetDefaultConfig.execute()
  1895. const appGetConfigVersion = () =>
  1896. `${DtGetLocalConfigVersion.execute() ?? "1.0"}`
  1897. const appGetUsername = () => DtUsername.get()
  1898. const appSetUsername = (username) => DtUsername.set(username)
  1899. const appGetPassword = () => DtPassword.get()
  1900. const appSetPassword = (password) => DtPassword.set(password)
  1901. const appGetUUID = () => DtUuid.get()
  1902. const appSetUUID = (uuid) => DtUuid.set(uuid)
  1903. const appGetConnectionState = () => DtGetVpnState.execute()
  1904. const appStartConnection = () => DtExecuteVpnStart.execute()
  1905. const appStopConnection = () => DtExecuteVpnStop.execute()
  1906. const appGetStatusHotspot = () => DtGetStatusHotSpotService.execute()
  1907. const appStartHotspot = () => DtStartHotSpotService.execute()
  1908. const appStopHotspot = () => DtStopHotSpotService.execute()
  1909. const appGetLogs = () => DtGetLogs.execute()
  1910. const appCleanLogs = () => DtClearLogs.execute()
  1911. const appBatteryOptimize = () => DtIgnoreBatteryOptimizations.execute()
  1912. const appApnConfiguration = () => DtStartApnActivity.execute()
  1913. const appStartCheckUser = () => DtStartCheckUser.execute()
  1914. const appIntoBrowser = (url) => DtStartWebViewActivity.execute(url)
  1915. const appClearData = () => DtCleanApp.execute()
  1916. </script>
  1917. <!-- VARIAVEIS LET -->
  1918. <script>
  1919. let timeoutId
  1920. </script>
  1921. <!-- DOM WRAPPER -->
  1922. <script>
  1923. const Dom = (selector) => {
  1924. const _elements = document.querySelectorAll(selector)
  1925. const wrapper = {
  1926. on(listeners) {
  1927. for (const [event, listener] of Object.entries(listeners)) {
  1928. _elements.forEach((element) => {
  1929. element.addEventListener(event, listener)
  1930. })
  1931. }
  1932. return wrapper
  1933. },
  1934. addClass: (...tokens) => {
  1935. _elements.forEach((element) => {
  1936. element.classList.add(...tokens)
  1937. })
  1938. return wrapper
  1939. },
  1940. removeClass: (...tokens) => {
  1941. _elements.forEach((element) => {
  1942. element.classList.remove(...tokens)
  1943. })
  1944. return wrapper
  1945. },
  1946. toggleClass: (token, force) => {
  1947. _elements.forEach((element) => {
  1948. element.classList.toggle(token, force)
  1949. })
  1950. return wrapper
  1951. },
  1952. style(styles) {
  1953. for (const [property, value] of Object.entries(styles)) {
  1954. console.log(value)
  1955. _elements.forEach((element) => {
  1956. element.style[property] = value
  1957. })
  1958. }
  1959. return wrapper
  1960. },
  1961. attr(attrs) {
  1962. for (const [name, value] of Object.entries(attrs)) {
  1963. _elements.forEach((element) => element.setAttribute(name, value))
  1964. }
  1965. return wrapper
  1966. },
  1967. html(value) {
  1968. _elements.forEach((element) => (element.innerHTML = value))
  1969. return wrapper
  1970. },
  1971. }
  1972. return wrapper
  1973. }
  1974. </script>
  1975. <!-- AÇÕES EM VARIAVEIS ROOT -->
  1976. <script>
  1977. document.documentElement.style.setProperty(
  1978. "--space-status-bar",
  1979. `${appGetStatusbarHeightSize() + 10}px`
  1980. )
  1981. document.documentElement.style.setProperty(
  1982. "--space-nav-bar",
  1983. `${appGetNavbarHeightSize() + 10}px`
  1984. )
  1985. </script>
  1986. <!-- VARIAVEIS -->
  1987. <script>
  1988. const Body = Dom("body")
  1989. const HomeHeader = Dom("section.home header")
  1990. const LogoHeader = Dom("#app_logo")
  1991. const HomeContainer = Dom("section.home")
  1992. const CarrierContainer = Dom("section.carrier-list")
  1993. const ProfileContainer = Dom("section.profile")
  1994. const ToolsContainer = Dom("section.container-tools")
  1995. const RegisterContainer = Dom("section.logs-container")
  1996. const ErrorContainer = Dom("section.container-error")
  1997. const LoadingContainer = Dom("section.loading")
  1998. const CheckuserContainer = Dom("section.checkuser")
  1999. const ClearDataContainer = Dom("section.clean-data-app")
  2000. const HotspotContainer = Dom("section.hotspot-container")
  2001. const TermsContainer = Dom("section.terms-container")
  2002. const RenewContainer = Dom("section.renew-alert")
  2003. const BackButtonCarrierContainer = Dom("#back-carrier-container")
  2004. const BackProfileContainer = Dom("#back-profile-container")
  2005. const BackToolsContainer = Dom("#back-tools-container")
  2006. const BackRegisterContainer = Dom("#register-logs-close")
  2007. const BackErrorContainer = Dom("section.container-error header svg")
  2008. const BackLoadingContainer = Dom("#loading-container-close")
  2009. const BackCheckuserContainer = Dom("#checkuser-close")
  2010. const BackClearDataContainer = Dom("#hidden-clear-data-app")
  2011. const BackHotspotContainer = Dom("#hidden-hotspot-container")
  2012. const BackTermsContainer = Dom("#hidden-terms-container")
  2013. const BackRenewContainer = Dom("#renew-alert-close")
  2014. const RenewUsername = Dom("#renew-username")
  2015. const ButtonOfCarrierList = Dom("#carrier-list-button")
  2016. const ValueOfCarrierListButton = Dom("#value-of-carrier-list-button")
  2017. const ButtonVpnStartOrStop = Dom("#start-stop-vpn-button")
  2018. const StatesConnectionValue = Dom("#state-value")
  2019. const LocalIpValue = Dom('#local-ip-value')
  2020. const ConfigVersion = Dom("#version")
  2021. const LabelDivUser = Dom("label[for='usernamediv']")
  2022. const LabelDivPassword = Dom("label[for='passworddiv']")
  2023. const LabelUUID = Dom("label[for='uuiddiv']")
  2024. const DivUsername = Dom("#usernamediv")
  2025. const DivPassword = Dom("#passworddiv")
  2026. const DivUUID = Dom("#uuiddiv")
  2027. const InputUsername = Dom("#username")
  2028. const InputPassword = Dom("#password")
  2029. const InputUUID = Dom("#uuid")
  2030. const EyeViewPasswordInput = Dom("#eye-view")
  2031. const EyeNotViewPasswordInput = Dom("#eye-not-view")
  2032. const ButtonSaveCreds = Dom("#save-creds")
  2033. const CheckuserName = Dom("#checkuser-name")
  2034. const CheckuserExpires = Dom("#checkuser-expires")
  2035. const CheckuserRemainingDays = Dom("#checkuser-remaing-days")
  2036. const CheckuserTotalConnection = Dom("#checkuser-total-conection")
  2037. const RegisterLogsText = Dom("section.logs-container section section p")
  2038. const ToastContainer = Dom("section.container-toast")
  2039. const Toast = Dom("section.container-toast div.toast")
  2040. const ToastIcon = Dom("section.container-toast div.toast div.icon")
  2041. const ToastText = Dom("section.container-toast div.toast span.text")
  2042. const HomeButton = Dom("#home")
  2043. const LoginButton = Dom("#login")
  2044. const ToolsButton = Dom("#tools")
  2045. const UpdateButton = Dom("#update")
  2046. const ButtonRegister = Dom("#register-button")
  2047. const ButtonCleanRegisterLogs = Dom("#clear-logs")
  2048. const ButtonStartStopHotspot = Dom("#enable-hotspot")
  2049. const ButtonOpenHotspotContainer = Dom("#hotspot-button-tools")
  2050. const TitleHotspotContainer = Dom("#title-hotspot")
  2051. const ValueOfButtonHotspotContainer = Dom("#value-button-hotspot")
  2052. const ButtonOpenClearDataContainer = Dom("#button-open-clear-data-app")
  2053. const ButtonConfirmClearData = Dom("#confirm-clean-data-app")
  2054. const ButtonOpenSpeedtest = Dom("#speedtest-tool")
  2055. const ButtonOpenApnConfig = Dom("#apn-tool")
  2056. const ButtonOpenBatteryOptimization = Dom("#battery-tool")
  2057. const ButtonOpenCheckuser = Dom("#checkuser-tool")
  2058. const ButtonOpenTerms = Dom("#button-open-terms-app")
  2059. const ErrorTitle = Dom("#error-title")
  2060. const ErrorDescription = Dom("#error-log")
  2061. </script>
  2062. <!-- FUNÇÕES DO LAYOUT -->
  2063. <script>
  2064. const appLogo = () => {
  2065. const logo = appGetConfigLabel("APP_LOGO")
  2066. if (!logo) {
  2067. return ""
  2068. } else {
  2069. return `${JSON.parse(logo).value}`
  2070. }
  2071. }
  2072. const appBackground = () => {
  2073. const background_type = appGetConfigLabel("APP_BACKGROUND_TYPE")
  2074. const background_color = appGetConfigLabel("APP_BACKGROUND_COLOR")
  2075. const background_image = appGetConfigLabel("APP_BACKGROUND_IMAGE")
  2076. if (!background_type) {
  2077. return ""
  2078. } else if (JSON.parse(background_type)?.value === "COLOR") {
  2079. return `${JSON.parse(background_color).value}`
  2080. } else {
  2081. return `url(${JSON.parse(background_image).value})`
  2082. }
  2083. }
  2084. const getConfigName = () => {
  2085. if (!appGetDefaultConfig()) {
  2086. return `${appTranslateText("LBL_CHOOSE_CONFIG")}`
  2087. } else {
  2088. return `${JSON.parse(appGetDefaultConfig())?.name}`
  2089. }
  2090. }
  2091. const getUsernameValue = () => `${appGetUsername() ?? ""}`
  2092. const getPasswordValue = () => `${appGetPassword() ?? ""}`
  2093. const getUUIDValue = () => `${appGetUUID() ?? ""}`
  2094. const getUsernamePlaceholder = () => `${appTranslateText("LBL_USERNAME")}`
  2095. const getPassowrdPlaceholder = () => `${appTranslateText("LBL_PASSWORD")}`
  2096. const getUUIDPlaceholder = () => `${appTranslateText("LBL_UUID")}`
  2097. const toggleInput = () => {
  2098. if (checkV2ray()) {
  2099. LabelDivUser.style({ display: "none" })
  2100. DivUsername.style({ display: "none" })
  2101. LabelDivPassword.style({ display: "none" })
  2102. DivPassword.style({ display: "none" })
  2103. LabelUUID.removeClass("hidden")
  2104. DivUUID.removeClass("hidden")
  2105. } else {
  2106. LabelDivUser.style({ display: "block" })
  2107. DivUsername.style({ display: "flex" })
  2108. LabelDivPassword.style({ display: "block" })
  2109. DivPassword.style({ display: "flex" })
  2110. LabelUUID.addClass("hidden")
  2111. DivUUID.addClass("hidden")
  2112. }
  2113. }
  2114. const showInputPasswordValue = () => {
  2115. EyeViewPasswordInput.addClass("hidden")
  2116. EyeNotViewPasswordInput.removeClass("hidden")
  2117. InputPassword.attr({ type: "text" })
  2118. }
  2119. const hiddenInputPasswordValue = () => {
  2120. EyeViewPasswordInput.removeClass("hidden")
  2121. EyeNotViewPasswordInput.addClass("hidden")
  2122. InputPassword.attr({ type: "password" })
  2123. }
  2124. const checkV2ray = () => {
  2125. const data = JSON.parse(appGetDefaultConfig())
  2126. if (!appGetDefaultConfig()) {
  2127. return false
  2128. } else if (data?.mode?.toLowerCase()?.startsWith("v2ray")) {
  2129. return true
  2130. } else {
  2131. return false
  2132. }
  2133. }
  2134. const getConnectionState = () => {
  2135. const rootStyles = getComputedStyle(document.documentElement)
  2136. const defaultColor = "--default-background-color"
  2137. const connectedColor = "--connected-background-color"
  2138. const connectingColor = "--connecting-background-color"
  2139. const errorColor = "--error-background-color"
  2140. const states = {
  2141. disconnected: () => {
  2142. const gradientColor = rootStyles.getPropertyValue(defaultColor)
  2143. document.documentElement.style.setProperty(
  2144. defaultColor,
  2145. "linear-gradient(135deg,#9f2fff,#0bb1d3,#7f47cb,#00ffff,#7a2cec,#4adfdf,#76fcfc,#7f47cb,#9f2fff,#0bb1d3,#7f47cb,#00ffff,#7a2cec,#4adfdf)"
  2146. )
  2147. return states
  2148. },
  2149. connecting: () => {
  2150. const gradientColor = rootStyles.getPropertyValue(connectingColor)
  2151. document.documentElement.style.setProperty(
  2152. defaultColor,
  2153. gradientColor
  2154. )
  2155. return states
  2156. },
  2157. connected: () => {
  2158. const gradientColor = rootStyles.getPropertyValue(connectedColor)
  2159. document.documentElement.style.setProperty(
  2160. defaultColor,
  2161. gradientColor
  2162. )
  2163. return states
  2164. },
  2165. error: () => {
  2166. const gradientColor = rootStyles.getPropertyValue(errorColor)
  2167. document.documentElement.style.setProperty(
  2168. defaultColor,
  2169. gradientColor
  2170. )
  2171. return states
  2172. },
  2173. }
  2174. return states
  2175. }
  2176. const connectionState = (state) => {
  2177. const connectionValue = `${state || appGetConnectionState()}`
  2178. switch (connectionValue) {
  2179. case "DISCONNECTED":
  2180. getConnectionState().disconnected()
  2181. StatesConnectionValue.html(appTranslateText('LBL_STATE_DISCONNECTED'))
  2182. break
  2183. case "CONNECTING":
  2184. showRegisterContainer()
  2185. getConnectionState().connecting()
  2186. StatesConnectionValue.html(appTranslateText('LBL_STATE_CONNECTING'))
  2187. break
  2188. case "CONNECTED":
  2189. getConnectionState().connected()
  2190. StatesConnectionValue.html(appTranslateText('LBL_STATE_CONNECTED'))
  2191. break
  2192. case "STOPPING":
  2193. getConnectionState().connecting()
  2194. StatesConnectionValue.html(appTranslateText('LBL_STATE_STOPPING'))
  2195. break
  2196. case "NO_NETWORK":
  2197. getConnectionState().error()
  2198. StatesConnectionValue.html(appTranslateText('LBL_STATE_NO_NETWORK'))
  2199. break
  2200. case "AUTH":
  2201. getConnectionState().connecting()
  2202. StatesConnectionValue.html(appTranslateText('LBL_STATE_AUTH'))
  2203. break
  2204. case "AUTH_FAILED":
  2205. getConnectionState().connecting()
  2206. StatesConnectionValue.html(appTranslateText('LBL_STATE_AUTH_FAILED'))
  2207. break
  2208. }
  2209. }
  2210. const startStopConnection = () => {
  2211. const state = appGetConnectionState()
  2212. if (getUsernameValue().length >= 3 && getPasswordValue().length >= 3) {
  2213. if (appGetDefaultConfig()) {
  2214. state !== "CONNECTED" ? appStartConnection() : appStopConnection()
  2215. } else {
  2216. showCarrierListContainer()
  2217. }
  2218. } else {
  2219. showProfileContainer()
  2220. }
  2221. }
  2222. const writeLogsRegister = () => {
  2223. const data = JSON.parse(appGetLogs())
  2224. let logs = ""
  2225. data.forEach((item) => {
  2226. logs += `${Object.keys(item)} ${item[Object.keys(item)]} <br>`
  2227. })
  2228. RegisterLogsText.html(logs)
  2229. document.querySelector("section.logs-container.active section section").scrollTop =
  2230. document.querySelector(
  2231. "section.logs-container.active section section p"
  2232. ).scrollHeight
  2233. }
  2234. const writeCarrierList = () => {
  2235. const container = document.querySelector("section.carrier-list section")
  2236. const existingCategories = container.querySelectorAll("div").length
  2237. container.innerHTML = ""
  2238. const data = JSON.parse(appAllConfigs())
  2239. data.sort((a, b) => a.sorter - b.sorter)
  2240. data.forEach((item, index) =>
  2241. item.items.sort((a, b) => a.sorter - b.sorter)
  2242. )
  2243. data.forEach((category) => {
  2244. const div = document.createElement("div")
  2245. const h1 = document.createElement("h1")
  2246. h1.innerHTML = category.name
  2247. const ul = document.createElement("ul")
  2248. category.items.forEach((item) => {
  2249. const li = document.createElement("li")
  2250. li.innerHTML = `<img src="${item.icon}" alt="icon" /> <span>${item.name}</span> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-check2" viewBox="0 0 16 16"><path d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z" /></svg>`
  2251. li.addEventListener("click", (e) => {
  2252. appSetConfig(item.id)
  2253. hiddenCarrierListContainer()
  2254. document
  2255. .querySelectorAll("li")
  2256. .forEach((item, index) => item.classList.remove("active"))
  2257. li.classList.add("active")
  2258. writeValueOnButtonOfCarrierList(item.name)
  2259. })
  2260. ul.appendChild(li)
  2261. })
  2262. div.appendChild(h1)
  2263. div.appendChild(ul)
  2264. container.appendChild(div)
  2265. })
  2266. }
  2267. const writeValueOnButtonOfCarrierList = (value) =>
  2268. ValueOfCarrierListButton.html(value ?? getConfigName())
  2269. const showToastContainer = (value) => {
  2270. Toast.style({ borderColor: "#051d40" })
  2271. ToastIcon.style({ borderRight: "1px solid #051d40" })
  2272. writeToastText(value)
  2273. ToastContainer.removeClass("masterSshAnimatedTime", "spaceOutDown")
  2274. ToastContainer.removeClass("masterSshAnimatedTime", "spaceInDown")
  2275. setTimeout(() => {
  2276. ToastContainer.addClass("masterSshAnimatedTime", "spaceInDown")
  2277. }, 100)
  2278. clearTimeout(timeoutId)
  2279. timeoutId = setTimeout(() => hiddenToastContainer(), 6000)
  2280. }
  2281. const showToastContainerWithError = (value) => {
  2282. Toast.style({ borderColor: "#FF0000" })
  2283. ToastIcon.style({ borderRight: "1px solid #FF0000" })
  2284. writeToastText(value)
  2285. ToastContainer.removeClass("masterSshAnimatedTime", "spaceOutDown")
  2286. ToastContainer.removeClass("masterSshAnimatedTime", "spaceInDown")
  2287. setTimeout(() => {
  2288. ToastContainer.addClass("masterSshAnimatedTime", "spaceInDown")
  2289. }, 100)
  2290. clearTimeout(timeoutId)
  2291. timeoutId = setTimeout(() => hiddenToastContainer(), 6000)
  2292. }
  2293. const writeToastText = (text) => {
  2294. ToastText.html(text)
  2295. }
  2296. const hiddenToastContainer = () => {
  2297. ToastContainer.removeClass("masterSshAnimatedTime", "spaceInDown")
  2298. ToastContainer.removeClass("masterSshAnimatedTime", "spaceOutDown")
  2299. ToastContainer.addClass("masterSshAnimatedTime", "spaceOutDown")
  2300. }
  2301. const showHomeContainer = () => {
  2302. hiddenAllContainers()
  2303. HomeContainer.addClass("active")
  2304. }
  2305. const showCarrierListContainer = () => {
  2306. writeCarrierList()
  2307. hiddenAllContainers()
  2308. CarrierContainer.addClass("active")
  2309. }
  2310. const hiddenCarrierListContainer = () => {
  2311. showHomeContainer()
  2312. }
  2313. const showProfileContainer = () => {
  2314. hiddenAllContainers()
  2315. ProfileContainer.addClass("active")
  2316. }
  2317. const hiddenProfileContainer = () => {
  2318. showHomeContainer()
  2319. }
  2320. const showToolsContainer = () => {
  2321. hiddenAllContainers()
  2322. ToolsContainer.addClass("active")
  2323. }
  2324. const hiddenToolsContainer = () => {
  2325. showHomeContainer()
  2326. }
  2327. const showRegisterContainer = () => {
  2328. RegisterContainer.addClass("active")
  2329. }
  2330. const hiddenRegisterContainer = () => {
  2331. RegisterContainer.removeClass('active')
  2332. }
  2333. const writeErrorContainer = (model) => {
  2334. const data = JSON.parse(model)
  2335. ErrorTitle.html(data.title)
  2336. ErrorDescription.html(data.content)
  2337. showErrorContainer()
  2338. }
  2339. const showErrorContainer = () => {
  2340. hiddenAllContainers()
  2341. ErrorContainer.addClass("active")
  2342. }
  2343. const hiddenErrorContainer = () => {
  2344. showHomeContainer()
  2345. }
  2346. const showLoadingContainer = () => {
  2347. const data = JSON.parse(appGetDefaultConfig())
  2348. if (data?.url_check_user) {
  2349. LoadingContainer.addClass("active")
  2350. }
  2351. hiddenRegisterContainer()
  2352. }
  2353. const hiddenLoadingContainer = () => {
  2354. LoadingContainer.removeClass("active")
  2355. }
  2356. const showRenewContainer = () => {
  2357. RenewContainer.addClass('active')
  2358. }
  2359. const hiddenRenewContainer = () => {
  2360. RenewContainer.removeClass('active')
  2361. }
  2362. const writeCheckuserContainer = (model) => {
  2363. const data = JSON.parse(model)
  2364. CheckuserName.html(`USUÁRIO: ${data.username}`)
  2365. CheckuserExpires.html(`EXPIRA EM: ${data.expiration_date}`)
  2366. CheckuserRemainingDays.html(`RESTA: ${data.expiration_days} DIAS`)
  2367. CheckuserTotalConnection.html(
  2368. `CONEXÕES: ${data.count_connections}/${data.limit_connections}`
  2369. )
  2370. if (data.expiration_days <= 5) {
  2371. RenewUsername.html(`Caro ${data.username}`)
  2372. showRenewContainer()
  2373. } else {
  2374. hiddenRenewContainer()
  2375. }
  2376. showCheckuserContainer()
  2377. }
  2378. const showCheckuserContainer = () => {
  2379. hiddenLoadingContainer()
  2380. CheckuserContainer.addClass("active")
  2381. }
  2382. const hiddenCheckuserContainer = () => {
  2383. CheckuserContainer.removeClass("active")
  2384. }
  2385. const showClearDataAppContainer = () => {
  2386. ClearDataContainer.addClass("active")
  2387. }
  2388. const hiddenClearDataAppContainer = () => {
  2389. ClearDataContainer.removeClass("active")
  2390. }
  2391. const writeLocalIpValue = () => {
  2392. LocalIpValue.html(`${appGetCarrierName()}: ${appGetLocalIp()}`)
  2393. }
  2394. const startHotspot = () => {
  2395. appStartHotspot()
  2396. TitleHotspotContainer.html("ROTEAMENTO LIGADO")
  2397. ValueOfButtonHotspotContainer.html("DESLIGAR HOTSPOT")
  2398. }
  2399. const stopHotspot = () => {
  2400. appStopHotspot()
  2401. TitleHotspotContainer.html("ROTEAMENTO DESLIGADO")
  2402. ValueOfButtonHotspotContainer.html("LIGAR HOTSPOT")
  2403. }
  2404. const toggleHotspot = () => {
  2405. appGetStatusHotspot() === "STOPPED" ? startHotspot() : stopHotspot()
  2406. }
  2407. const setStatusHotspot = () => {
  2408. if (appGetStatusHotspot() === "STOPPED") {
  2409. TitleHotspotContainer.html("ROTEAMENTO DESLIGADO")
  2410. ValueOfButtonHotspotContainer.html("LIGAR HOTSPOT")
  2411. } else {
  2412. TitleHotspotContainer.html("ROTEAMENTO LIGADO")
  2413. ValueOfButtonHotspotContainer.html("DESLIGAR HOTSPOT")
  2414. }
  2415. }
  2416. const showHotspotContainer = () => {
  2417. HotspotContainer.addClass("active")
  2418. }
  2419. const hiddenHotspotContainer = () => {
  2420. HotspotContainer.removeClass("active")
  2421. }
  2422. const showTermsContainer = () => {
  2423. TermsContainer.addClass("active")
  2424. }
  2425. const hiddenTermsContainer = () => {
  2426. TermsContainer.removeClass("active")
  2427. }
  2428. const openSpeedtest = () => {
  2429. appIntoBrowser("https://fast.com")
  2430. }
  2431. const hiddenAllContainers = () => {
  2432. HomeContainer.removeClass("active")
  2433. CarrierContainer.removeClass("active")
  2434. ProfileContainer.removeClass("active")
  2435. ToolsContainer.removeClass("active")
  2436. RegisterContainer.removeClass("active")
  2437. ErrorContainer.removeClass("active")
  2438. }
  2439. const setLoopFunctionsExecute = () => {
  2440. setInterval(() => {
  2441. writeLocalIpValue()
  2442. ConfigVersion.html(`VERSÃO: ${appGetConfigVersion()}`)
  2443. }, 200)
  2444. }
  2445. const allFunctionsExecute = () => {
  2446. connectionState()
  2447. toggleInput()
  2448. writeLogsRegister()
  2449. setStatusHotspot()
  2450. }
  2451. </script>
  2452. <!-- FUNÇÕES PARA O APP -->
  2453. <script>
  2454. const dtShowSuccessToastListener = (value) => showToastContainer(value)
  2455. const dtShowErrorToastListener = (value) =>
  2456. showToastContainerWithError(value)
  2457. const dtConfigClickListener = () => {
  2458. toggleInput()
  2459. InputUsername.attr({ value: getUsernameValue() })
  2460. InputPassword.attr({ value: getPasswordValue() })
  2461. InputUUID.attr({ value: getUUIDValue() })
  2462. }
  2463. const dtVpnStateListener = (state) => connectionState(state)
  2464. const dtOnNewLogListener = () => writeLogsRegister()
  2465. const dtMessageErrorListener = (model) => writeErrorContainer(model)
  2466. const dtCheckUserStartedListener = () => showLoadingContainer()
  2467. const dtCheckUserModelListener = (model) => writeCheckuserContainer(model)
  2468. </script>
  2469. <!-- AÇÕES -->
  2470. <script>
  2471. HomeHeader.style({
  2472. background: appBackground(),
  2473. backgroundSize: "cover",
  2474. backgroundPosition: "center",
  2475. backgroundRepeat: "no-repeat",
  2476. })
  2477. LogoHeader.attr({ src: appLogo() })
  2478. ConfigVersion.html(`VERSÃO: ${appGetConfigVersion()}`)
  2479. HomeButton.on({ click: () => showHomeContainer() })
  2480. LoginButton.on({ click: () => showProfileContainer() })
  2481. ToolsButton.on({ click: () => showToolsContainer() })
  2482. UpdateButton.on({ click: () => AppUpdate() })
  2483. BackButtonCarrierContainer.on({
  2484. click: () => hiddenCarrierListContainer(),
  2485. })
  2486. BackProfileContainer.on({ click: () => hiddenProfileContainer() })
  2487. BackToolsContainer.on({ click: () => hiddenToolsContainer() })
  2488. BackRegisterContainer.on({ click: () => hiddenRegisterContainer() })
  2489. BackErrorContainer.on({ click: () => hiddenErrorContainer() })
  2490. ButtonOfCarrierList.on({ click: () => showCarrierListContainer() })
  2491. ValueOfCarrierListButton.html(getConfigName())
  2492. ButtonVpnStartOrStop.on({ click: () => startStopConnection() })
  2493. InputUsername.attr({ value: getUsernameValue() })
  2494. InputPassword.attr({ value: getPasswordValue() })
  2495. InputUUID.attr({ value: getUUIDValue() })
  2496. InputUsername.attr({ placeholder: getUsernamePlaceholder() })
  2497. InputPassword.attr({ placeholder: getPassowrdPlaceholder() })
  2498. InputUUID.attr({ placeholder: getUUIDPlaceholder() })
  2499. InputUsername.on({ input: (e) => appSetUsername(e.target.value) })
  2500. InputPassword.on({ input: (e) => appSetPassword(e.target.value) })
  2501. InputUUID.on({ input: (e) => appSetUUID(e.target.value) })
  2502. EyeViewPasswordInput.on({ click: () => showInputPasswordValue() })
  2503. EyeNotViewPasswordInput.on({ click: () => hiddenInputPasswordValue() })
  2504. ButtonSaveCreds.on({ click: () => hiddenProfileContainer() })
  2505. ButtonRegister.on({ click: () => showRegisterContainer() })
  2506. ButtonCleanRegisterLogs.on({ click: () => appCleanLogs() })
  2507. ButtonOpenHotspotContainer.on({ click: () => showHotspotContainer() })
  2508. BackHotspotContainer.on({ click: () => hiddenHotspotContainer() })
  2509. ButtonStartStopHotspot.on({ click: () => toggleHotspot() })
  2510. ButtonOpenClearDataContainer.on({
  2511. click: () => showClearDataAppContainer(),
  2512. })
  2513. BackClearDataContainer.on({ click: () => hiddenClearDataAppContainer() })
  2514. ButtonConfirmClearData.on({ click: () => appClearData() })
  2515. BackLoadingContainer.on({ click: () => hiddenLoadingContainer() })
  2516. BackCheckuserContainer.on({ click: () => hiddenCheckuserContainer() })
  2517. BackRenewContainer.on({ click: () => hiddenRenewContainer() })
  2518. BackTermsContainer.on({ click: () => hiddenTermsContainer() })
  2519. ButtonOpenSpeedtest.on({ click: () => openSpeedtest() })
  2520. ButtonOpenApnConfig.on({ click: () => appApnConfiguration() })
  2521. ButtonOpenBatteryOptimization.on({ click: () => appBatteryOptimize() })
  2522. ButtonOpenCheckuser.on({ click: () => appStartCheckUser() })
  2523. ButtonOpenTerms.on({ click: () => showTermsContainer() })
  2524. setLoopFunctionsExecute()
  2525. allFunctionsExecute()
  2526. </script>
  2527. </body>
  2528. </html>

comments powered by Disqus