Browse Source

no message

student 1 week ago
parent
commit
a5c6e9d0a1
28 changed files with 747 additions and 165 deletions
  1. BIN
      2026_04_23_15_58.xlsx
  2. BIN
      ssl_1774289502_star_natcom.com.ht (1).zip
  3. 37 0
      ssl_1774289502_star_natcom.com.ht (1)/CA-Bundle/Sectigo Public Server Authentication CA DV R36.crt
  4. 39 0
      ssl_1774289502_star_natcom.com.ht (1)/CA-Bundle/Sectigo Public Server Authentication Root R46.crt
  5. 34 0
      ssl_1774289502_star_natcom.com.ht (1)/CA-Bundle/USERTrust RSA Certification Authority.crt
  6. 1 0
      ssl_1774289502_star_natcom.com.ht (1)/Nginx/HuongDanNginx.txt
  7. 1 0
      ssl_1774289502_star_natcom.com.ht (1)/Nginx/HuongdanPrivateKey.txt
  8. 114 0
      ssl_1774289502_star_natcom.com.ht (1)/Nginx/star_natcom.com.ht-nginx.crt
  9. 3 0
      ssl_1774289502_star_natcom.com.ht (1)/huongdan.txt
  10. 76 0
      ssl_1774289502_star_natcom.com.ht (1)/star_natcom.com.ht.ca-bundle
  11. 38 0
      ssl_1774289502_star_natcom.com.ht (1)/star_natcom.com.ht.crt
  12. 28 0
      ssl_1774289502_star_natcom.com.ht (1)/star_natcom.com.ht.key
  13. 22 22
      website/Areas/LotteryV2/Controllers/HomeController.cs
  14. 82 68
      website/Areas/LotteryV2/Views/Home/BuyTicket.cshtml
  15. 39 16
      website/Areas/LotteryV2/Views/Home/GameHome.cshtml
  16. 57 3
      website/Areas/LotteryV2/Views/Home/History.cshtml
  17. 2 2
      website/Areas/LotteryV2/Views/Home/Index.cshtml
  18. 22 4
      website/Areas/LotteryV2/Views/Home/More.cshtml
  19. 14 2
      website/Areas/LotteryV2/Views/Home/Profile.cshtml
  20. 57 1
      website/Areas/LotteryV2/Views/Home/Results.cshtml
  21. 44 24
      website/Areas/LotteryV2/Views/Home/TransferWinMoney.cshtml
  22. 12 9
      website/Areas/LotteryV2/Views/Home/_TermResultHistoryGrouped.cshtml
  23. 2 0
      website/Areas/LotteryV2/Views/Home/_TermResultHistoryV2.cshtml
  24. 13 11
      website/Areas/LotteryV2/Views/Home/_TermUserTicketHistory.cshtml
  25. 7 0
      website/Areas/LotteryV2/Views/Shared/_Layout.cshtml
  26. 1 1
      website/Languages/Lang.Designer.cs
  27. 1 1
      website/Languages/Lang.fr.resx
  28. 1 1
      website/Languages/Lang.resx

BIN
2026_04_23_15_58.xlsx


BIN
ssl_1774289502_star_natcom.com.ht (1).zip


+ 37 - 0
ssl_1774289502_star_natcom.com.ht (1)/CA-Bundle/Sectigo Public Server Authentication CA DV R36.crt

@@ -0,0 +1,37 @@
+
+-----BEGIN CERTIFICATE-----
+MIIGTDCCBDSgAwIBAgIQOXpmzCdWNi4NqofKbqvjsTANBgkqhkiG9w0BAQwFADBf
+MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD
+Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw
+HhcNMjEwMzIyMDAwMDAwWhcNMzYwMzIxMjM1OTU5WjBgMQswCQYDVQQGEwJHQjEY
+MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTcwNQYDVQQDEy5TZWN0aWdvIFB1Ymxp
+YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gQ0EgRFYgUjM2MIIBojANBgkqhkiG9w0B
+AQEFAAOCAY8AMIIBigKCAYEAljZf2HIz7+SPUPQCQObZYcrxLTHYdf1ZtMRe7Yeq
+RPSwygz16qJ9cAWtWNTcuICc++p8Dct7zNGxCpqmEtqifO7NvuB5dEVexXn9RFFH
+12Hm+NtPRQgXIFjx6MSJcNWuVO3XGE57L1mHlcQYj+g4hny90aFh2SCZCDEVkAja
+EMMfYPKuCjHuuF+bzHFb/9gV8P9+ekcHENF2nR1efGWSKwnfG5RawlkaQDpRtZTm
+M64TIsv/r7cyFO4nSjs1jLdXYdz5q3a4L0NoabZfbdxVb+CUEHfB0bpulZQtH1Rv
+38e/lIdP7OTTIlZh6OYL6NhxP8So0/sht/4J9mqIGxRFc0/pC8suja+wcIUna0HB
+pXKfXTKpzgis+zmXDL06ASJf5E4A2/m+Hp6b84sfPAwQ766rI65mh50S0Di9E3Pn
+2WcaJc+PILsBmYpgtmgWTR9eV9otfKRUBfzHUHcVgarub/XluEpRlTtZudU5xbFN
+xx/DgMrXLUAPaI60fZ6wA+PTAgMBAAGjggGBMIIBfTAfBgNVHSMEGDAWgBRWc1hk
+lfmSGrASKgRieaFAFYghSTAdBgNVHQ4EFgQUaMASFhgOr872h6YyV6NGUV3LBycw
+DgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0lBBYwFAYI
+KwYBBQUHAwEGCCsGAQUFBwMCMBsGA1UdIAQUMBIwBgYEVR0gADAIBgZngQwBAgEw
+VAYDVR0fBE0wSzBJoEegRYZDaHR0cDovL2NybC5zZWN0aWdvLmNvbS9TZWN0aWdv
+UHVibGljU2VydmVyQXV0aGVudGljYXRpb25Sb290UjQ2LmNybDCBhAYIKwYBBQUH
+AQEEeDB2ME8GCCsGAQUFBzAChkNodHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3Rp
+Z29QdWJsaWNTZXJ2ZXJBdXRoZW50aWNhdGlvblJvb3RSNDYucDdjMCMGCCsGAQUF
+BzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAgEA
+YtOC9Fy+TqECFw40IospI92kLGgoSZGPOSQXMBqmsGWZUQ7rux7cj1du6d9rD6C8
+ze1B2eQjkrGkIL/OF1s7vSmgYVafsRoZd/IHUrkoQvX8FZwUsmPu7amgBfaY3g+d
+q1x0jNGKb6I6Bzdl6LgMD9qxp+3i7GQOnd9J8LFSietY6Z4jUBzVoOoz8iAU84OF
+h2HhAuiPw1ai0VnY38RTI+8kepGWVfGxfBWzwH9uIjeooIeaosVFvE8cmYUB4TSH
+5dUyD0jHct2+8ceKEtIoFU/FfHq/mDaVnvcDCZXtIgitdMFQdMZaVehmObyhRdDD
+4NQCs0gaI9AAgFj4L9QtkARzhQLNyRf87Kln+YU0lgCGr9HLg3rGO8q+Y4ppLsOd
+unQZ6ZxPNGIfOApbPVf5hCe58EZwiWdHIMn9lPP6+F404y8NNugbQixBber+x536
+WrZhFZLjEkhp7fFXf9r32rNPfb74X/U90Bdy4lzp3+X1ukh1BuMxA/EEhDoTOS3l
+7ABvc7BYSQubQ2490OcdkIzUh3ZwDrakMVrbaTxUM2p24N6dB+ns2zptWCva6jzW
+r8IWKIMxzxLPv5Kt3ePKcUdvkBU/smqujSczTzzSjIoR5QqQA6lN1ZRSnuHIWCvh
+JEltkYnTAH41QJ6SAWO66GrrUESwN/cgZzL4JLEqz1Y=
+-----END CERTIFICATE-----

+ 39 - 0
ssl_1774289502_star_natcom.com.ht (1)/CA-Bundle/Sectigo Public Server Authentication Root R46.crt

@@ -0,0 +1,39 @@
+
+-----BEGIN CERTIFICATE-----
+MIIGlTCCBH2gAwIBAgIRANJ/u8HeNZ5SFq1hSVhgmcQwDQYJKoZIhvcNAQEMBQAw
+gYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtK
+ZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYD
+VQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTIx
+MDMyMjAwMDAwMFoXDTM4MDExODIzNTk1OVowXzELMAkGA1UEBhMCR0IxGDAWBgNV
+BAoTD1NlY3RpZ28gTGltaXRlZDE2MDQGA1UEAxMtU2VjdGlnbyBQdWJsaWMgU2Vy
+dmVyIEF1dGhlbnRpY2F0aW9uIFJvb3QgUjQ2MIICIjANBgkqhkiG9w0BAQEFAAOC
+Ag8AMIICCgKCAgEAk77VNlJ12AEjoBxHQknuY7a3If3EldVIKyZ8FFMQ2nn9K7ct
+pNQs+uoy3UnCub0PSD17WphUr55dMXRPB/xQId2kz2hPGxJjbSWZTCqZ80gwYfqB
+fB6nCErcPiscHxhMcao1jK34bug7StnllALWiYQTqm3ITzPMUJY3kjPcX4jnn1TZ
+SPCYQ9Zm/Z8XOEPFAVEL1+MjDxRdWxTnS77d9MjaAzfR1jmhIVEwg7Bt1zBOlluR
+8HAkq79FgWRDDb0hOi886Z4NyyC1QifM2m+b7mQwkDnNk2WBITG1I1AzNyLjOO34
+MTDMRf5i+dFdMnlCh99qzFYZQE3Oqrv5tXZJlPEn+JGlg+UGs2MOgNzgElWApjtm
+tDmHLcjw0NEU6eQNTQ72XVdyxTscR1ad4tX7gWGMzE2AkDRbt9cUddzYBEifwMEo
+iLTpHMqnsfFWt3tJTFnlIBWohAIp+jiUaZpJBo/NH3kUFxIMg3reH7GX7vmXeCik
+yESS6X0mBaZYcpt5E9gRX67FOGI0aLKGMI74kGGeMmz1BzbNokxu7Io27fLmmRVE
+cMN8vJw5wLTha/eDJSNX2RKA5UnwdQ/vjescm1QotCE8/HwK/+97a3X/ix2gGQWr
++vgrgULoOLq7+6r9PeDzyt9Ol5cp7fMYVumllqy9w5CYsuD5otSmR0N8bc8CAwEA
+AaOCASAwggEcMB8GA1UdIwQYMBaAFFN5v1qqK0rPVIDh2JvAnfKyA2bLMB0GA1Ud
+DgQWBBRWc1hklfmSGrASKgRieaFAFYghSTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T
+AQH/BAUwAwEB/zAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwEQYDVR0g
+BAowCDAGBgRVHSAAMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNlcnRy
+dXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDA1
+BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVzZXJ0cnVz
+dC5jb20wDQYJKoZIhvcNAQEMBQADggIBADpvBIlq7bMU0cFDT/9P9+BsgCkRgQs0
+S6Bf7vJSlWMHwby0VGvxCS0hrbi0K2BINZbEbsVsgpQq04431yyoVn3Hldorgq24
+RldRDOOipEZDTFB9wC9HYt1thHF00XeG2C8KC1plwoEzKAIhPvefI/C3cT0CfTXJ
+uFjUbKIgSwjNjw6YHtLgoy/hd5+JLUlLco/gzFX/qWbT7tEquOMYpsNKWZj8TLqP
+q6zMiG4Na6feEZte6YPXGrMWlTWN341vDedc+yxQqSug79HJUQcOZs7KyDWztmae
+QxsPE49UV/8XwrfZtZaYyrs4FpD94Z4Q8dzXGL8+qEJjxgcza7W6PROaClubavd1
+VKPm8+aCW77u7SxpR2TFGL6kPdxsKyFijpcunR5V79sUyROfNdzjrAcFWZXK8sbb
+9FlnwuVG677JLv+ZVTX5AxLvW5OB4zt5uS+zB62wJ/Wv+jXGAttSAcJec4iFgCWH
+Rvdi/jJoSzRLa3nEzx6pFIzclSCnh0u1xCeLcUBypSiPga8W+6PkuoyQq8U9qs9E
+oxG5NvrvlyshwUS9yvcZRGw7Ljlx4jJH/BhIPR8kIBCQj1vna9TziZOrw1Of8hDU
+bHKFG9Pm8Dp2vbjz/2JH39qvxshPKVllGfq+5klPm7yZRUYTiCMAbqwNdL/nsqF2
+Rnnyp58XRStJ
+-----END CERTIFICATE-----

+ 34 - 0
ssl_1774289502_star_natcom.com.ht (1)/CA-Bundle/USERTrust RSA Certification Authority.crt

@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB
+iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl
+cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV
+BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw
+MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV
+BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
+aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy
+dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
+AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B
+3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY
+tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/
+Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2
+VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT
+79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6
+c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT
+Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l
+c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee
+UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE
+Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd
+BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G
+A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF
+Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO
+VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3
+ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs
+8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR
+iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze
+Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ
+XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/
+qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB
+VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB
+L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG
+jjxDah2nGN59PRbxYvnKkKj9
+-----END CERTIFICATE-----

+ 1 - 0
ssl_1774289502_star_natcom.com.ht (1)/Nginx/HuongDanNginx.txt

@@ -0,0 +1 @@
+Tap tin Nginx da gom ca CERT va ROOT Bundle

+ 1 - 0
ssl_1774289502_star_natcom.com.ht (1)/Nginx/HuongdanPrivateKey.txt

@@ -0,0 +1 @@
+Prive Key su dung tap .key o thu muc goc (neu co)

+ 114 - 0
ssl_1774289502_star_natcom.com.ht (1)/Nginx/star_natcom.com.ht-nginx.crt

@@ -0,0 +1,114 @@
+
+-----BEGIN CERTIFICATE-----
+MIIGhTCCBO2gAwIBAgIRAPI4pbL8hi0Skw2X0a1KXDEwDQYJKoZIhvcNAQELBQAw
+YDELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDE3MDUGA1UE
+AxMuU2VjdGlnbyBQdWJsaWMgU2VydmVyIEF1dGhlbnRpY2F0aW9uIENBIERWIFIz
+NjAeFw0yNjAzMjMwMDAwMDBaFw0yNjEwMDcyMzU5NTlaMBoxGDAWBgNVBAMMDyou
+bmF0Y29tLmNvbS5odDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUf
+7strg1YT63xHOX0FQTK9USjhGzYSMx2wb0pSk3PsNBQDXcHK91kMGDKR951W+uTc
+PN4FSrZsL7uWbOHbYavqLXmcnv4GPVIOJ6uA7U+IV99cLU/StxKOF8pCoyxN4fj6
+c49yL4cwqZzKoSAE330e5AYQPpRM1WEbOGvciRf0PThlwLrKqwyikOoH8zg9zf6P
+TcTt8t5ZG9Joi0l7v7p4PbVxYNSmsrqbJ+ztQCs9o8jGaV+F5yvjYqjnV7ZypR7E
+P8T1Xq3Dn5A/a5vt5qK8NcR7E/2rakuDmSkaCq+kCxuJ+v9etzuulNJ3bjehQgq8
+eN2cwwZfQmY1Anbcy1ECAwEAAaOCAv4wggL6MB8GA1UdIwQYMBaAFGjAEhYYDq/O
+9oemMlejRlFdywcnMB0GA1UdDgQWBBSsatzlF6D6J6A3kJiww/Qnc8AYTTAOBgNV
+HQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDATBJ
+BgNVHSAEQjBAMDQGCysGAQQBsjEBAgIHMCUwIwYIKwYBBQUHAgEWF2h0dHBzOi8v
+c2VjdGlnby5jb20vQ1BTMAgGBmeBDAECATCBhAYIKwYBBQUHAQEEeDB2ME8GCCsG
+AQUFBzAChkNodHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNTZXJ2
+ZXJBdXRoZW50aWNhdGlvbkNBRFZSMzYuY3J0MCMGCCsGAQUFBzABhhdodHRwOi8v
+b2NzcC5zZWN0aWdvLmNvbTApBgNVHREEIjAggg8qLm5hdGNvbS5jb20uaHSCDW5h
+dGNvbS5jb20uaHQwggGGBgorBgEEAdZ5AgQCBIIBdgSCAXIBcAB1ANdtfRDRp/V3
+wsfpX9cAv/mCyTNaZeHQswFzF8DIxWl3AAABnRvk/t4AAAQDAEYwRAIgV6D4Ca45
+wfAyTrWtOabA9mEgtw0ttdNOA8kR36aFQ08CIDcXHiOGTj7WNjKuLlTrXe59bsbK
+V7pjoXdJ949C2yWQAHYAyKPEf8ezrbk1awE/anoSbeM6TkOlxkb5l605dZkdz5oA
+AAGdG+T/GgAABAMARzBFAiA5sTUfPQSUiYOfEliw6COZ+VXEYeoobPrINXIShXkg
+QgIhAIvEazlM+OFA/3Vbyz3CaZJEBp69LZA+Vqy+Tq2+E9ZzAH8AbP5QGUOoXqkW
+vFLRM+TcyR7xQRx9JYQg0XOAnhgY6zoAAAGdG+UBRwAIAAAFAAQfaU8EAwBIMEYC
+IQCgRjJBTjjlw/AlJ6E4UK/sY6KZGh/Tjw/4+TvaXGtAQgIhAOa4hQgmgIwJRlaW
+arH6xGcxBniKNdJ1FyGi56p2m51kMA0GCSqGSIb3DQEBCwUAA4IBgQBH1M1wSkzT
+Sdey6gF4LhCpplCiArtPPhZ5R/zBT+iIS+q2tek8GG4ApVDU8iesqyJYy9wHQBBU
+wFNT2Rry5GVMi3Wu1emh0rLruNdnT6Pcr5HJDJuCw0QyRL+gl53dwdU02jMX1xym
+QGIgGqRuJKg6fUmytS8St1YfHOfGEDPmZ00voJSZQe7batST3sG138vRqeNY1lZo
+TpAsVT1v/rjaoSpXs/fvrHqW3rLdty+dxgfyQfrBdWMd6HOZPgp63uBPDyu3YMp5
+WS0R4nbiMDBva/DdUaE9avwc96PeEHKO46Sxw9A/ENf2gZDdOjep2UTaEeRpfGE6
+bPd3mhETGu+B0WG946ZVxfebGiWW0TNppzKWJwNKxQO0qqY0gPPxfJQ1dk6mMfSB
+dUzkfnixMhMo4JFoE+oIosBpzdNiDx79upSwfG6JygFdVd6CvZdr3lMcqDUAn/zW
+skgPf2iaVphYt1T+w75+qP9oGqdScmPuPtSIE8ctQ2GgQ9CPdsYGpxk=
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIGTDCCBDSgAwIBAgIQOXpmzCdWNi4NqofKbqvjsTANBgkqhkiG9w0BAQwFADBf
+MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD
+Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw
+HhcNMjEwMzIyMDAwMDAwWhcNMzYwMzIxMjM1OTU5WjBgMQswCQYDVQQGEwJHQjEY
+MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTcwNQYDVQQDEy5TZWN0aWdvIFB1Ymxp
+YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gQ0EgRFYgUjM2MIIBojANBgkqhkiG9w0B
+AQEFAAOCAY8AMIIBigKCAYEAljZf2HIz7+SPUPQCQObZYcrxLTHYdf1ZtMRe7Yeq
+RPSwygz16qJ9cAWtWNTcuICc++p8Dct7zNGxCpqmEtqifO7NvuB5dEVexXn9RFFH
+12Hm+NtPRQgXIFjx6MSJcNWuVO3XGE57L1mHlcQYj+g4hny90aFh2SCZCDEVkAja
+EMMfYPKuCjHuuF+bzHFb/9gV8P9+ekcHENF2nR1efGWSKwnfG5RawlkaQDpRtZTm
+M64TIsv/r7cyFO4nSjs1jLdXYdz5q3a4L0NoabZfbdxVb+CUEHfB0bpulZQtH1Rv
+38e/lIdP7OTTIlZh6OYL6NhxP8So0/sht/4J9mqIGxRFc0/pC8suja+wcIUna0HB
+pXKfXTKpzgis+zmXDL06ASJf5E4A2/m+Hp6b84sfPAwQ766rI65mh50S0Di9E3Pn
+2WcaJc+PILsBmYpgtmgWTR9eV9otfKRUBfzHUHcVgarub/XluEpRlTtZudU5xbFN
+xx/DgMrXLUAPaI60fZ6wA+PTAgMBAAGjggGBMIIBfTAfBgNVHSMEGDAWgBRWc1hk
+lfmSGrASKgRieaFAFYghSTAdBgNVHQ4EFgQUaMASFhgOr872h6YyV6NGUV3LBycw
+DgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0lBBYwFAYI
+KwYBBQUHAwEGCCsGAQUFBwMCMBsGA1UdIAQUMBIwBgYEVR0gADAIBgZngQwBAgEw
+VAYDVR0fBE0wSzBJoEegRYZDaHR0cDovL2NybC5zZWN0aWdvLmNvbS9TZWN0aWdv
+UHVibGljU2VydmVyQXV0aGVudGljYXRpb25Sb290UjQ2LmNybDCBhAYIKwYBBQUH
+AQEEeDB2ME8GCCsGAQUFBzAChkNodHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3Rp
+Z29QdWJsaWNTZXJ2ZXJBdXRoZW50aWNhdGlvblJvb3RSNDYucDdjMCMGCCsGAQUF
+BzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAgEA
+YtOC9Fy+TqECFw40IospI92kLGgoSZGPOSQXMBqmsGWZUQ7rux7cj1du6d9rD6C8
+ze1B2eQjkrGkIL/OF1s7vSmgYVafsRoZd/IHUrkoQvX8FZwUsmPu7amgBfaY3g+d
+q1x0jNGKb6I6Bzdl6LgMD9qxp+3i7GQOnd9J8LFSietY6Z4jUBzVoOoz8iAU84OF
+h2HhAuiPw1ai0VnY38RTI+8kepGWVfGxfBWzwH9uIjeooIeaosVFvE8cmYUB4TSH
+5dUyD0jHct2+8ceKEtIoFU/FfHq/mDaVnvcDCZXtIgitdMFQdMZaVehmObyhRdDD
+4NQCs0gaI9AAgFj4L9QtkARzhQLNyRf87Kln+YU0lgCGr9HLg3rGO8q+Y4ppLsOd
+unQZ6ZxPNGIfOApbPVf5hCe58EZwiWdHIMn9lPP6+F404y8NNugbQixBber+x536
+WrZhFZLjEkhp7fFXf9r32rNPfb74X/U90Bdy4lzp3+X1ukh1BuMxA/EEhDoTOS3l
+7ABvc7BYSQubQ2490OcdkIzUh3ZwDrakMVrbaTxUM2p24N6dB+ns2zptWCva6jzW
+r8IWKIMxzxLPv5Kt3ePKcUdvkBU/smqujSczTzzSjIoR5QqQA6lN1ZRSnuHIWCvh
+JEltkYnTAH41QJ6SAWO66GrrUESwN/cgZzL4JLEqz1Y=
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIGlTCCBH2gAwIBAgIRANJ/u8HeNZ5SFq1hSVhgmcQwDQYJKoZIhvcNAQEMBQAw
+gYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtK
+ZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYD
+VQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTIx
+MDMyMjAwMDAwMFoXDTM4MDExODIzNTk1OVowXzELMAkGA1UEBhMCR0IxGDAWBgNV
+BAoTD1NlY3RpZ28gTGltaXRlZDE2MDQGA1UEAxMtU2VjdGlnbyBQdWJsaWMgU2Vy
+dmVyIEF1dGhlbnRpY2F0aW9uIFJvb3QgUjQ2MIICIjANBgkqhkiG9w0BAQEFAAOC
+Ag8AMIICCgKCAgEAk77VNlJ12AEjoBxHQknuY7a3If3EldVIKyZ8FFMQ2nn9K7ct
+pNQs+uoy3UnCub0PSD17WphUr55dMXRPB/xQId2kz2hPGxJjbSWZTCqZ80gwYfqB
+fB6nCErcPiscHxhMcao1jK34bug7StnllALWiYQTqm3ITzPMUJY3kjPcX4jnn1TZ
+SPCYQ9Zm/Z8XOEPFAVEL1+MjDxRdWxTnS77d9MjaAzfR1jmhIVEwg7Bt1zBOlluR
+8HAkq79FgWRDDb0hOi886Z4NyyC1QifM2m+b7mQwkDnNk2WBITG1I1AzNyLjOO34
+MTDMRf5i+dFdMnlCh99qzFYZQE3Oqrv5tXZJlPEn+JGlg+UGs2MOgNzgElWApjtm
+tDmHLcjw0NEU6eQNTQ72XVdyxTscR1ad4tX7gWGMzE2AkDRbt9cUddzYBEifwMEo
+iLTpHMqnsfFWt3tJTFnlIBWohAIp+jiUaZpJBo/NH3kUFxIMg3reH7GX7vmXeCik
+yESS6X0mBaZYcpt5E9gRX67FOGI0aLKGMI74kGGeMmz1BzbNokxu7Io27fLmmRVE
+cMN8vJw5wLTha/eDJSNX2RKA5UnwdQ/vjescm1QotCE8/HwK/+97a3X/ix2gGQWr
++vgrgULoOLq7+6r9PeDzyt9Ol5cp7fMYVumllqy9w5CYsuD5otSmR0N8bc8CAwEA
+AaOCASAwggEcMB8GA1UdIwQYMBaAFFN5v1qqK0rPVIDh2JvAnfKyA2bLMB0GA1Ud
+DgQWBBRWc1hklfmSGrASKgRieaFAFYghSTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T
+AQH/BAUwAwEB/zAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwEQYDVR0g
+BAowCDAGBgRVHSAAMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNlcnRy
+dXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDA1
+BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVzZXJ0cnVz
+dC5jb20wDQYJKoZIhvcNAQEMBQADggIBADpvBIlq7bMU0cFDT/9P9+BsgCkRgQs0
+S6Bf7vJSlWMHwby0VGvxCS0hrbi0K2BINZbEbsVsgpQq04431yyoVn3Hldorgq24
+RldRDOOipEZDTFB9wC9HYt1thHF00XeG2C8KC1plwoEzKAIhPvefI/C3cT0CfTXJ
+uFjUbKIgSwjNjw6YHtLgoy/hd5+JLUlLco/gzFX/qWbT7tEquOMYpsNKWZj8TLqP
+q6zMiG4Na6feEZte6YPXGrMWlTWN341vDedc+yxQqSug79HJUQcOZs7KyDWztmae
+QxsPE49UV/8XwrfZtZaYyrs4FpD94Z4Q8dzXGL8+qEJjxgcza7W6PROaClubavd1
+VKPm8+aCW77u7SxpR2TFGL6kPdxsKyFijpcunR5V79sUyROfNdzjrAcFWZXK8sbb
+9FlnwuVG677JLv+ZVTX5AxLvW5OB4zt5uS+zB62wJ/Wv+jXGAttSAcJec4iFgCWH
+Rvdi/jJoSzRLa3nEzx6pFIzclSCnh0u1xCeLcUBypSiPga8W+6PkuoyQq8U9qs9E
+oxG5NvrvlyshwUS9yvcZRGw7Ljlx4jJH/BhIPR8kIBCQj1vna9TziZOrw1Of8hDU
+bHKFG9Pm8Dp2vbjz/2JH39qvxshPKVllGfq+5klPm7yZRUYTiCMAbqwNdL/nsqF2
+Rnnyp58XRStJ
+-----END CERTIFICATE-----

+ 3 - 0
ssl_1774289502_star_natcom.com.ht (1)/huongdan.txt

@@ -0,0 +1,3 @@
+Cam on da chon MuaSSL.com
+Vui long tim cac huong dan cai dat o day
+https://muassl.com/ho-tro/huong-dan-cai-dat.html 

+ 76 - 0
ssl_1774289502_star_natcom.com.ht (1)/star_natcom.com.ht.ca-bundle

@@ -0,0 +1,76 @@
+
+-----BEGIN CERTIFICATE-----
+MIIGTDCCBDSgAwIBAgIQOXpmzCdWNi4NqofKbqvjsTANBgkqhkiG9w0BAQwFADBf
+MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD
+Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw
+HhcNMjEwMzIyMDAwMDAwWhcNMzYwMzIxMjM1OTU5WjBgMQswCQYDVQQGEwJHQjEY
+MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTcwNQYDVQQDEy5TZWN0aWdvIFB1Ymxp
+YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gQ0EgRFYgUjM2MIIBojANBgkqhkiG9w0B
+AQEFAAOCAY8AMIIBigKCAYEAljZf2HIz7+SPUPQCQObZYcrxLTHYdf1ZtMRe7Yeq
+RPSwygz16qJ9cAWtWNTcuICc++p8Dct7zNGxCpqmEtqifO7NvuB5dEVexXn9RFFH
+12Hm+NtPRQgXIFjx6MSJcNWuVO3XGE57L1mHlcQYj+g4hny90aFh2SCZCDEVkAja
+EMMfYPKuCjHuuF+bzHFb/9gV8P9+ekcHENF2nR1efGWSKwnfG5RawlkaQDpRtZTm
+M64TIsv/r7cyFO4nSjs1jLdXYdz5q3a4L0NoabZfbdxVb+CUEHfB0bpulZQtH1Rv
+38e/lIdP7OTTIlZh6OYL6NhxP8So0/sht/4J9mqIGxRFc0/pC8suja+wcIUna0HB
+pXKfXTKpzgis+zmXDL06ASJf5E4A2/m+Hp6b84sfPAwQ766rI65mh50S0Di9E3Pn
+2WcaJc+PILsBmYpgtmgWTR9eV9otfKRUBfzHUHcVgarub/XluEpRlTtZudU5xbFN
+xx/DgMrXLUAPaI60fZ6wA+PTAgMBAAGjggGBMIIBfTAfBgNVHSMEGDAWgBRWc1hk
+lfmSGrASKgRieaFAFYghSTAdBgNVHQ4EFgQUaMASFhgOr872h6YyV6NGUV3LBycw
+DgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0lBBYwFAYI
+KwYBBQUHAwEGCCsGAQUFBwMCMBsGA1UdIAQUMBIwBgYEVR0gADAIBgZngQwBAgEw
+VAYDVR0fBE0wSzBJoEegRYZDaHR0cDovL2NybC5zZWN0aWdvLmNvbS9TZWN0aWdv
+UHVibGljU2VydmVyQXV0aGVudGljYXRpb25Sb290UjQ2LmNybDCBhAYIKwYBBQUH
+AQEEeDB2ME8GCCsGAQUFBzAChkNodHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3Rp
+Z29QdWJsaWNTZXJ2ZXJBdXRoZW50aWNhdGlvblJvb3RSNDYucDdjMCMGCCsGAQUF
+BzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAgEA
+YtOC9Fy+TqECFw40IospI92kLGgoSZGPOSQXMBqmsGWZUQ7rux7cj1du6d9rD6C8
+ze1B2eQjkrGkIL/OF1s7vSmgYVafsRoZd/IHUrkoQvX8FZwUsmPu7amgBfaY3g+d
+q1x0jNGKb6I6Bzdl6LgMD9qxp+3i7GQOnd9J8LFSietY6Z4jUBzVoOoz8iAU84OF
+h2HhAuiPw1ai0VnY38RTI+8kepGWVfGxfBWzwH9uIjeooIeaosVFvE8cmYUB4TSH
+5dUyD0jHct2+8ceKEtIoFU/FfHq/mDaVnvcDCZXtIgitdMFQdMZaVehmObyhRdDD
+4NQCs0gaI9AAgFj4L9QtkARzhQLNyRf87Kln+YU0lgCGr9HLg3rGO8q+Y4ppLsOd
+unQZ6ZxPNGIfOApbPVf5hCe58EZwiWdHIMn9lPP6+F404y8NNugbQixBber+x536
+WrZhFZLjEkhp7fFXf9r32rNPfb74X/U90Bdy4lzp3+X1ukh1BuMxA/EEhDoTOS3l
+7ABvc7BYSQubQ2490OcdkIzUh3ZwDrakMVrbaTxUM2p24N6dB+ns2zptWCva6jzW
+r8IWKIMxzxLPv5Kt3ePKcUdvkBU/smqujSczTzzSjIoR5QqQA6lN1ZRSnuHIWCvh
+JEltkYnTAH41QJ6SAWO66GrrUESwN/cgZzL4JLEqz1Y=
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIGlTCCBH2gAwIBAgIRANJ/u8HeNZ5SFq1hSVhgmcQwDQYJKoZIhvcNAQEMBQAw
+gYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5MRQwEgYDVQQHEwtK
+ZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMS4wLAYD
+VQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTIx
+MDMyMjAwMDAwMFoXDTM4MDExODIzNTk1OVowXzELMAkGA1UEBhMCR0IxGDAWBgNV
+BAoTD1NlY3RpZ28gTGltaXRlZDE2MDQGA1UEAxMtU2VjdGlnbyBQdWJsaWMgU2Vy
+dmVyIEF1dGhlbnRpY2F0aW9uIFJvb3QgUjQ2MIICIjANBgkqhkiG9w0BAQEFAAOC
+Ag8AMIICCgKCAgEAk77VNlJ12AEjoBxHQknuY7a3If3EldVIKyZ8FFMQ2nn9K7ct
+pNQs+uoy3UnCub0PSD17WphUr55dMXRPB/xQId2kz2hPGxJjbSWZTCqZ80gwYfqB
+fB6nCErcPiscHxhMcao1jK34bug7StnllALWiYQTqm3ITzPMUJY3kjPcX4jnn1TZ
+SPCYQ9Zm/Z8XOEPFAVEL1+MjDxRdWxTnS77d9MjaAzfR1jmhIVEwg7Bt1zBOlluR
+8HAkq79FgWRDDb0hOi886Z4NyyC1QifM2m+b7mQwkDnNk2WBITG1I1AzNyLjOO34
+MTDMRf5i+dFdMnlCh99qzFYZQE3Oqrv5tXZJlPEn+JGlg+UGs2MOgNzgElWApjtm
+tDmHLcjw0NEU6eQNTQ72XVdyxTscR1ad4tX7gWGMzE2AkDRbt9cUddzYBEifwMEo
+iLTpHMqnsfFWt3tJTFnlIBWohAIp+jiUaZpJBo/NH3kUFxIMg3reH7GX7vmXeCik
+yESS6X0mBaZYcpt5E9gRX67FOGI0aLKGMI74kGGeMmz1BzbNokxu7Io27fLmmRVE
+cMN8vJw5wLTha/eDJSNX2RKA5UnwdQ/vjescm1QotCE8/HwK/+97a3X/ix2gGQWr
++vgrgULoOLq7+6r9PeDzyt9Ol5cp7fMYVumllqy9w5CYsuD5otSmR0N8bc8CAwEA
+AaOCASAwggEcMB8GA1UdIwQYMBaAFFN5v1qqK0rPVIDh2JvAnfKyA2bLMB0GA1Ud
+DgQWBBRWc1hklfmSGrASKgRieaFAFYghSTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T
+AQH/BAUwAwEB/zAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwEQYDVR0g
+BAowCDAGBgRVHSAAMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9jcmwudXNlcnRy
+dXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDA1
+BggrBgEFBQcBAQQpMCcwJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVzZXJ0cnVz
+dC5jb20wDQYJKoZIhvcNAQEMBQADggIBADpvBIlq7bMU0cFDT/9P9+BsgCkRgQs0
+S6Bf7vJSlWMHwby0VGvxCS0hrbi0K2BINZbEbsVsgpQq04431yyoVn3Hldorgq24
+RldRDOOipEZDTFB9wC9HYt1thHF00XeG2C8KC1plwoEzKAIhPvefI/C3cT0CfTXJ
+uFjUbKIgSwjNjw6YHtLgoy/hd5+JLUlLco/gzFX/qWbT7tEquOMYpsNKWZj8TLqP
+q6zMiG4Na6feEZte6YPXGrMWlTWN341vDedc+yxQqSug79HJUQcOZs7KyDWztmae
+QxsPE49UV/8XwrfZtZaYyrs4FpD94Z4Q8dzXGL8+qEJjxgcza7W6PROaClubavd1
+VKPm8+aCW77u7SxpR2TFGL6kPdxsKyFijpcunR5V79sUyROfNdzjrAcFWZXK8sbb
+9FlnwuVG677JLv+ZVTX5AxLvW5OB4zt5uS+zB62wJ/Wv+jXGAttSAcJec4iFgCWH
+Rvdi/jJoSzRLa3nEzx6pFIzclSCnh0u1xCeLcUBypSiPga8W+6PkuoyQq8U9qs9E
+oxG5NvrvlyshwUS9yvcZRGw7Ljlx4jJH/BhIPR8kIBCQj1vna9TziZOrw1Of8hDU
+bHKFG9Pm8Dp2vbjz/2JH39qvxshPKVllGfq+5klPm7yZRUYTiCMAbqwNdL/nsqF2
+Rnnyp58XRStJ
+-----END CERTIFICATE-----

+ 38 - 0
ssl_1774289502_star_natcom.com.ht (1)/star_natcom.com.ht.crt

@@ -0,0 +1,38 @@
+
+-----BEGIN CERTIFICATE-----
+MIIGhTCCBO2gAwIBAgIRAPI4pbL8hi0Skw2X0a1KXDEwDQYJKoZIhvcNAQELBQAw
+YDELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDE3MDUGA1UE
+AxMuU2VjdGlnbyBQdWJsaWMgU2VydmVyIEF1dGhlbnRpY2F0aW9uIENBIERWIFIz
+NjAeFw0yNjAzMjMwMDAwMDBaFw0yNjEwMDcyMzU5NTlaMBoxGDAWBgNVBAMMDyou
+bmF0Y29tLmNvbS5odDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMUf
+7strg1YT63xHOX0FQTK9USjhGzYSMx2wb0pSk3PsNBQDXcHK91kMGDKR951W+uTc
+PN4FSrZsL7uWbOHbYavqLXmcnv4GPVIOJ6uA7U+IV99cLU/StxKOF8pCoyxN4fj6
+c49yL4cwqZzKoSAE330e5AYQPpRM1WEbOGvciRf0PThlwLrKqwyikOoH8zg9zf6P
+TcTt8t5ZG9Joi0l7v7p4PbVxYNSmsrqbJ+ztQCs9o8jGaV+F5yvjYqjnV7ZypR7E
+P8T1Xq3Dn5A/a5vt5qK8NcR7E/2rakuDmSkaCq+kCxuJ+v9etzuulNJ3bjehQgq8
+eN2cwwZfQmY1Anbcy1ECAwEAAaOCAv4wggL6MB8GA1UdIwQYMBaAFGjAEhYYDq/O
+9oemMlejRlFdywcnMB0GA1UdDgQWBBSsatzlF6D6J6A3kJiww/Qnc8AYTTAOBgNV
+HQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDATBJ
+BgNVHSAEQjBAMDQGCysGAQQBsjEBAgIHMCUwIwYIKwYBBQUHAgEWF2h0dHBzOi8v
+c2VjdGlnby5jb20vQ1BTMAgGBmeBDAECATCBhAYIKwYBBQUHAQEEeDB2ME8GCCsG
+AQUFBzAChkNodHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNTZXJ2
+ZXJBdXRoZW50aWNhdGlvbkNBRFZSMzYuY3J0MCMGCCsGAQUFBzABhhdodHRwOi8v
+b2NzcC5zZWN0aWdvLmNvbTApBgNVHREEIjAggg8qLm5hdGNvbS5jb20uaHSCDW5h
+dGNvbS5jb20uaHQwggGGBgorBgEEAdZ5AgQCBIIBdgSCAXIBcAB1ANdtfRDRp/V3
+wsfpX9cAv/mCyTNaZeHQswFzF8DIxWl3AAABnRvk/t4AAAQDAEYwRAIgV6D4Ca45
+wfAyTrWtOabA9mEgtw0ttdNOA8kR36aFQ08CIDcXHiOGTj7WNjKuLlTrXe59bsbK
+V7pjoXdJ949C2yWQAHYAyKPEf8ezrbk1awE/anoSbeM6TkOlxkb5l605dZkdz5oA
+AAGdG+T/GgAABAMARzBFAiA5sTUfPQSUiYOfEliw6COZ+VXEYeoobPrINXIShXkg
+QgIhAIvEazlM+OFA/3Vbyz3CaZJEBp69LZA+Vqy+Tq2+E9ZzAH8AbP5QGUOoXqkW
+vFLRM+TcyR7xQRx9JYQg0XOAnhgY6zoAAAGdG+UBRwAIAAAFAAQfaU8EAwBIMEYC
+IQCgRjJBTjjlw/AlJ6E4UK/sY6KZGh/Tjw/4+TvaXGtAQgIhAOa4hQgmgIwJRlaW
+arH6xGcxBniKNdJ1FyGi56p2m51kMA0GCSqGSIb3DQEBCwUAA4IBgQBH1M1wSkzT
+Sdey6gF4LhCpplCiArtPPhZ5R/zBT+iIS+q2tek8GG4ApVDU8iesqyJYy9wHQBBU
+wFNT2Rry5GVMi3Wu1emh0rLruNdnT6Pcr5HJDJuCw0QyRL+gl53dwdU02jMX1xym
+QGIgGqRuJKg6fUmytS8St1YfHOfGEDPmZ00voJSZQe7batST3sG138vRqeNY1lZo
+TpAsVT1v/rjaoSpXs/fvrHqW3rLdty+dxgfyQfrBdWMd6HOZPgp63uBPDyu3YMp5
+WS0R4nbiMDBva/DdUaE9avwc96PeEHKO46Sxw9A/ENf2gZDdOjep2UTaEeRpfGE6
+bPd3mhETGu+B0WG946ZVxfebGiWW0TNppzKWJwNKxQO0qqY0gPPxfJQ1dk6mMfSB
+dUzkfnixMhMo4JFoE+oIosBpzdNiDx79upSwfG6JygFdVd6CvZdr3lMcqDUAn/zW
+skgPf2iaVphYt1T+w75+qP9oGqdScmPuPtSIE8ctQ2GgQ9CPdsYGpxk=
+-----END CERTIFICATE-----

+ 28 - 0
ssl_1774289502_star_natcom.com.ht (1)/star_natcom.com.ht.key

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDFH+7La4NWE+t8
+Rzl9BUEyvVEo4Rs2EjMdsG9KUpNz7DQUA13ByvdZDBgykfedVvrk3DzeBUq2bC+7
+lmzh22Gr6i15nJ7+Bj1SDiergO1PiFffXC1P0rcSjhfKQqMsTeH4+nOPci+HMKmc
+yqEgBN99HuQGED6UTNVhGzhr3IkX9D04ZcC6yqsMopDqB/M4Pc3+j03E7fLeWRvS
+aItJe7+6eD21cWDUprK6myfs7UArPaPIxmlfhecr42Ko51e2cqUexD/E9V6tw5+Q
+P2ub7eaivDXEexP9q2pLg5kpGgqvpAsbifr/Xrc7rpTSd243oUIKvHjdnMMGX0Jm
+NQJ23MtRAgMBAAECggEARNfqJdDehWlfjH+zbB4xru6/MW+seS3R/ERqGaLNLGcJ
+qROj4tJnoAnBSagAukpuRQ9FkqR2e089PF5EmHxtmASo7RftzvmO4OFgqVzVhDkx
+tygSCxakKS7G0DSFmCt7B+EwCqDuSGCOW9vIec453xCywgtaT6ClxMwk4Eac+mgM
+sATsY0xuL3A8Y1SQI/2SZ68iuOHNkDyWm4i3/Veqn8XfVfEijqKW093HnUwOuVEC
+kij7+xjWfm6vJWTx+xlQhTG6GVAkNeu82vH1z5VqlTY/h5ZkrIlR3FyLjIea1wGJ
+b5yHz5UBrhJsKKguf/++C6kPGhEJ/I3qkTSyJmWAAQKBgQDzWsgf568M1qklj1At
+uIz6eykI1eaVo0JPti7JxLLKnn2IIqWhQ0oyIFS2rxBvGldoUtJQaoDPv/fZTrVW
+f/0AEe9ybkKj1Fs04tmQM92hPGKqXQAv5nZ9jwQpGSy731Nw6YydzNlHFR/itLdm
+wUvjBZQ6beJUwWyd6pFs6VYuUQKBgQDPXi3orIh/Yv//ffZHU7FKpArLa7ZQO8fj
+uzzZKbLyKaoCTc1adXnKWcxxecXGiW5JYlFbCV4EGirqNnKGtxgCTduFXQawZuAE
+9EdWELIdX4pB90vd4kHqyzCycZpeIVWEzAGTdxkQjWmgXWknfmgBNTexYdt+IlIJ
+g8ozoMSNAQKBgQCmuXeKhEyl2xufpAQmjt3nbiG67/E+a8+ulP6RNbXYo6UVc8dO
+KK/Yj9X6Iw57T+y6iKOWfKErtDW2J/qM/Lr1JVSLbYcyfvbN0O2FokMhiCGA3p6W
+MqrTcvxCvACt5l9gaGHyarohvRNPWsicGapIKzZWoZoCv1IPDvn7SBHHQQKBgCsP
+iob7dOjG/RPn60FKftFaGSe+uUAV+d8vXWZXA2LIBhauY0s6g8ziMtMJj2k31qAE
+e5Jk8pH1gR3bqpKQ6LppwoECHUZ6RmCg/UNA+kuhMEucd7OerUN9aCJV9tE/KMwH
+tPgTTjAivWFgpFpgJGbDz0nVYUfjBpgVNuLbqpUBAoGAF/FobuxFNe2oOo7QE+7x
+bmgobgrWzLcfn5mJzewBAj9hO+uVh2ObYctnO7H8vW++TpUtapYM2e9pU6M6Ekx8
+mffWGLPAa1jspctnXocpRUNrvEyoRQcF29WhZCLk0Ic5ohSjWTEJfaCIIvBGoQlL
+0kW2mAZ9Yvv1CMASzxeIC7k=
+-----END PRIVATE KEY-----

+ 22 - 22
website/Areas/LotteryV2/Controllers/HomeController.cs

@@ -160,28 +160,28 @@ namespace LotteryWebApp.Areas.LotteryV2.Controllers
                 }
 
                 // Get Term Results
-                ResultOfTermRequest resultOfTermRequest = new ResultOfTermRequest
-                {
-                    gameId = model.termType,
-                    token = tokenGet,
-                    type = Constants.TERM_HAS_NOT_RESULT_TYPE,
-                    order = Constants.DECS,
-                    fromDate = fromDate,
-                    toDate = toDate,
-                    rowsOnPage = Constants.ROW_ON_PAGE,
-                    seqPage = "1",
-                    id = Constants.ALL_DATA
-                };
-
-                ResultOfTermResponse result = api.GetResultOfTermApi(configuration, resultOfTermRequest);
-                if (result.responseCode == Code.SESSION_EXPIRED)
-                {
-                     return RedirectToAction("Login", "Account", new { area = "" });
-                }
-                else if (result.responseCode == Code.SUCCESS)
-                {
-                    model.listTerm = result.listTerm;
-                }
+                //ResultOfTermRequest resultOfTermRequest = new ResultOfTermRequest
+                //{
+                //    gameId = model.termType,
+                //    token = tokenGet,
+                //    type = Constants.TERM_HAS_NOT_RESULT_TYPE,
+                //    order = Constants.DECS,
+                //    fromDate = fromDate,
+                //    toDate = toDate,
+                //    rowsOnPage = Constants.ROW_ON_PAGE,
+                //    seqPage = "1",
+                //    id = Constants.ALL_DATA
+                //};
+
+                //ResultOfTermResponse result = api.GetResultOfTermApi(configuration, resultOfTermRequest);
+                //if (result.responseCode == Code.SESSION_EXPIRED)
+                //{
+                //     return RedirectToAction("Login", "Account", new { area = "" });
+                //}
+                //else if (result.responseCode == Code.SUCCESS)
+                //{
+                //    model.listTerm = result.listTerm;
+                //}
 
                 if (!string.IsNullOrEmpty(termType))
                 {

+ 82 - 68
website/Areas/LotteryV2/Views/Home/BuyTicket.cshtml

@@ -16,7 +16,7 @@
     var isBigSmall = Model.termType == Constants.PIC10_BIGSMALL_CODE;
     var themeColor = isBigSmall ? "#0A9800" : "#AA3DC8";
     var gameTitle = isBigSmall ? Lang.v2_big_small : Lang.v2_odd_even;
-    var prizeAmount = isBigSmall ? "100" : "200";
+    var prizeAmount = isBigSmall ? "100.000" : "200.000";
     
     <!-- ==================== CARD SELECTION GAME UI (BIG/SMALL or ODD/EVEN) ==================== -->
     <div class="main-container animate__animated animate__fadeIn bg-[#F5F5F5] h-screen flex flex-col font-bricolage overflow-hidden max-w-[414px] mx-auto relative">
@@ -269,66 +269,65 @@ else
             <div class="w-8"></div>
         </div>
 
-        <!-- Content Area -->
-        <div class="flex-1 overflow-y-auto p-5 space-y-5 bg-gray-50 pb-72">
-            <div class="flex justify-between items-center px-1">
-                 <span class="text-[14px] font-bold text-gray-800">Selected Tickets</span>
-                 <span class="text-[14px] font-bold text-gray-800">@Lang.price</span>
-            </div>
+        <!-- Content Area: Split into scrollable list and static summary -->
+        <div class="flex-1 flex flex-col min-h-0 bg-gray-50">
+            <!-- Scrollable Ticket List -->
+            <div class="flex-1 overflow-y-auto p-5 pb-2">
+                <div class="flex justify-between items-center px-1 mb-3">
+                     <span class="text-[14px] font-bold text-gray-800">Selected Tickets</span>
+                     <span class="text-[14px] font-bold text-gray-800">@Lang.price</span>
+                </div>
 
-            <!-- Ticket List List -->
-            <div id="summaryTicketList" class="flex flex-col gap-4">
-                 <!-- Populated dynamically via JS -->
+                <!-- Ticket List -->
+                <div id="summaryTicketList" class="flex flex-col gap-4">
+                     <!-- Populated dynamically via JS -->
+                </div>
             </div>
 
-            <!-- Dates Section -->
-            <div class="grid grid-cols-2 gap-4 mt-8 pt-6 border-t border-dashed border-gray-300">
-                 <div class="space-y-1">
-                     <span class="text-[11px] font-black text-[#EE0033] block text-center uppercase tracking-tight">@Lang.date_purchase</span>
-                     <div class="bg-white border border-gray-100 rounded-xl py-2.5 px-2 text-center font-black text-[11px] text-gray-700 shadow-sm">
-                         @DateTime.Now.ToString("dddd MMM dd, yyyy", System.Globalization.CultureInfo.InvariantCulture)
-                     </div>
-                 </div>
-                 <div class="space-y-1">
-                     <span class="text-[11px] font-black text-[#EE0033] block text-center uppercase tracking-tight">@Lang.draw_date</span>
-                     <div class="bg-white border border-gray-100 rounded-xl py-2.5 px-2 text-center font-black text-[11px] text-gray-700 shadow-sm" id="summaryResultDate">
-                         @{
-                             DateTime drawDate;
-                             bool isValidDate = DateTime.TryParse(currentTerm?.date_end, out drawDate);
-                             if (isValidDate) {
-                                @drawDate.ToString("dddd MMM dd, yyyy", System.Globalization.CultureInfo.InvariantCulture)
-                             } else {
-                                @:N/A
-                             }
-                         }
-                     </div>
+            <!-- Static Summary Info (Dates & Totals) -->
+            <div class="shrink-0 bg-white p-5 space-y-4 border-t border-gray-100 shadow-[0px_-10px_20px_rgba(0,0,0,0.03)]">
+                 <!-- Dates Section -->
+                 <div class="grid grid-cols-2 gap-4">
+                      <div class="space-y-1">
+                          <span class="text-[11px] font-black text-[#EE0033] block text-center uppercase tracking-tight">@Lang.date_purchase</span>
+                          <div class="bg-white border border-gray-100 rounded-xl py-2.5 px-2 text-center font-black text-[11px] text-gray-700 shadow-sm">
+                              @DateTime.Now.ToString("dddd MMM dd, yyyy", System.Globalization.CultureInfo.InvariantCulture)
+                          </div>
+                      </div>
+                      <div class="space-y-1">
+                          <span class="text-[11px] font-black text-[#EE0033] block text-center uppercase tracking-tight">@Lang.draw_date</span>
+                          <div class="bg-white border border-gray-100 rounded-xl py-2.5 px-2 text-center font-black text-[11px] text-gray-700 shadow-sm" id="summaryResultDate">
+                              @{
+                                  DateTime drawDate;
+                                  bool isValidDate = DateTime.TryParse(currentTerm?.date_end, out drawDate);
+                                  if (isValidDate) {
+                                     @drawDate.ToString("dddd MMM dd, yyyy", System.Globalization.CultureInfo.InvariantCulture)
+                                  } else {
+                                     @:N/A
+                                  }
+                              }
+                          </div>
+                      </div>
                  </div>
-            </div>
 
-            <!-- Totals Section -->
-            <div class="mt-10 px-2 space-y-2">
-                 <div class="flex justify-between items-center">
-                     <span class="text-[14px] font-bold text-black">@Lang.total_ticket</span>
-                     <span id="summaryTotalCount" class="text-[16px] font-black text-black">0</span>
-                 </div>
-                 <div class="flex justify-between items-center">
-                     <span class="text-[14px] font-bold text-black">@Lang.total_money</span>
-                     <div class="flex items-baseline gap-1">
-                         <span id="summaryTotalAmount" class="text-[32px] font-black text-black">0</span>
-                         <span class="text-[16px] font-black text-[#EE0033]">HTG</span>
-                     </div>
+                 <!-- Totals Section -->
+                 <div class="space-y-1 px-1">
+                      <div class="flex justify-between items-center">
+                          <span class="text-[14px] font-bold text-black">@Lang.total_ticket</span>
+                          <span id="summaryTotalCount" class="text-[16px] font-black text-black">0</span>
+                      </div>
+                      <div class="flex justify-between items-center">
+                          <span class="text-[14px] font-bold text-black">@Lang.total_money</span>
+                          <div class="flex items-baseline gap-1">
+                              <span id="summaryTotalAmount" class="text-[32px] font-black text-black">0</span>
+                              <span class="text-[16px] font-black text-[#EE0033]">HTG</span>
+                          </div>
+                      </div>
                  </div>
             </div>
-            
-            <!-- Scalloped edge visual separator filler -->
-            <div class="w-full h-8 flex overflow-hidden opacity-5 mt-4">
-                 @for(int i=0; i<30; i++) {
-                     <div class="w-4 h-4 rounded-full bg-black -mt-2 shrink-0"></div>
-                 }
-            </div>
         </div>
 
-        <div class="p-4 bg-white border-t border-gray-100 grid grid-cols-2 gap-4 pb-8 shadow-[0px_-4px_20px_rgba(0,0,0,0.05)] absolute bottom-0 w-full left-0 z-[70]">
+        <div class="shrink-0 p-4 bg-white border-t border-gray-100 grid grid-cols-2 gap-4 pb-8 shadow-[0px_-4px_20px_rgba(0,0,0,0.05)]">
             <button onclick="hideOrderSummary()" class="bg-[#FFB000] text-white py-2.5 rounded-2xl font-black text-[18px] shadow-lg shadow-orange-200 active:scale-95 transition-all uppercase tracking-wide">
                 @Lang.reorder
             </button>
@@ -713,7 +712,7 @@ else
                 }
             });
             const pricePerTicket = @(Model.termType == Constants.PIC10_BASIC_CODE ? "10" : "50");
-            $("#totalPrice").text(filledTickets * pricePerTicket);
+            $("#totalPrice").text(formatMoneyV2(filledTickets * pricePerTicket));
             $("#totalTicketCount").text(filledTickets);
         }
 
@@ -831,7 +830,7 @@ else
                     if (data.responseCode === "0") {
                         showOrderSummary(data, tickets);
                     } else {
-                        showNotification(data.responseMessage || "Confirmation failed", "warning");
+                        showNotification(data.responseMessage || "Confirmation failed", data.responseCode);
                     }
                 },
                 error: function(err) {
@@ -886,7 +885,7 @@ else
                         </div>
                         <div class="w-24 shrink-0 bg-white border border-gray-200 rounded-2xl p-2.5 flex items-center justify-center shadow-sm">
                             <div class="flex items-baseline gap-0.5">
-                                <span class="text-[20px] font-black text-black">${t.money}</span>
+                                <span class="text-[20px] font-black text-black">${formatMoneyV2(t.money)}</span>
                                 <span class="text-[12px] font-black text-[#EE0033]">HTG</span>
                             </div>
                         </div>
@@ -897,7 +896,7 @@ else
 
             $("#summaryTotalCount").text(displayTickets.length);
             const totalMoney = apiData.totalMoneyPayment || apiData.totalMoney || "0";
-            $("#summaryTotalAmount").text(parseFloat(totalMoney).toLocaleString('en-US'));
+            $("#summaryTotalAmount").text(formatMoneyV2(totalMoney));
 
             summaryModal.removeClass("hidden").addClass("flex");
         }
@@ -920,7 +919,7 @@ else
                     if (data.responseCode === "0") {
                         showOtpModal();
                     } else {
-                        showNotification(data.responseMessage || "Failed to send OTP", "warning");
+                        showNotification(data.responseMessage || "Failed to send OTP", data.responseCode);
                     }
                 },
                 error: function() {
@@ -1034,7 +1033,7 @@ else
                         startOtpTimer(60);
                         showNotification("OTP has been resent.", "success");
                     } else {
-                        showNotification(data.responseMessage || "Failed to resend OTP", "warning");
+                        showNotification(data.responseMessage || "Failed to resend OTP", data.responseCode);
                     }
                 }
             });
@@ -1042,7 +1041,7 @@ else
 
         function showReceiptSuccess(transId, amount, phone, totalTickets, drawDate) {
             // Setup data dynamically
-            $("#receiptAmount").text(amount + " HTG");
+            $("#receiptAmount").text(formatMoneyV2(amount) + " HTG");
             if(phone) $("#receiptPhone").text(phone);
             if(totalTickets) $("#receiptTotalTickets").text(totalTickets);
             if(drawDate) $("#receiptDrawDate").text(drawDate);
@@ -1104,12 +1103,14 @@ else
                         // Success: Show receipt Modal
                         showReceiptSuccess(res.orderId || currentTransId, $("#summaryTotalAmount").text(), "@(Model.userStatus?.msisdn ?? "-")", $("#summaryTotalCount").text(), "@(currentTerm?.date_random ?? "-")");
                     } else {
-                        // showNotification(res.responseMessage || "Payment failed", "warning");
-                        // As requested: show error on OTP modal instead of whole page notification
-                        $("#otpError").text(res.responseMessage || "Invalid OTP").removeClass("hidden");
-                        // Clear inputs
-                        $("#otpInputs input").val("");
-                        $("#otp1").focus();
+                        if (res.responseCode === "-2" || (res.responseMessage && res.responseMessage.includes("System is upgrading"))) {
+                             hideOtpModal();
+                             showNotification(res.responseMessage || "System is upgrading", res.responseCode);
+                        } else {
+                             $("#otpError").text(res.responseMessage || "Invalid OTP").removeClass("hidden");
+                             $("#otpInputs input").val("");
+                             $("#otp1").focus();
+                        }
                     }
                 },
                 error: function() {
@@ -1119,19 +1120,29 @@ else
             });
         }
 
-        function showNotification(message, type = 'success') {
+        var systemUpgrading = false;
+        function showNotification(message, code) {
             const msgEl = $("#notificationMessage");
             const iconEl = $("#notificationModal img");
+            const btnEl = $("#notificationModal button");
             
             msgEl.text(message);
             
+            if (code === "-2" || (message && message.includes("System is upgrading"))) {
+                systemUpgrading = true;
+                btnEl.text("@Lang.login");
+            } else {
+                systemUpgrading = false;
+                btnEl.text("OK");
+            }
+
             // Toggle icon based on type (warning or success)
             const warningIcon = '/LotteryV2/img/modal/warning_icon.png';
             const successIcon = '/LotteryV2/img/modal/success_icon_v2.png';
             const fallbackWarning = 'https://cdn-icons-png.flaticon.com/512/564/564619.png';
             const fallbackSuccess = 'https://cdn-icons-png.flaticon.com/512/190/190411.png';
 
-            if (type === 'warning' || type === 'error') {
+            if (code === "-2" || code === "warning" || code === "error") {
                 iconEl.attr('src', warningIcon);
                 iconEl.attr('onerror', `this.src='${fallbackWarning}'`);
             } else {
@@ -1144,6 +1155,9 @@ else
 
         function closeNotificationModal() {
             $("#notificationModal").addClass("hidden").removeClass("flex");
+            if (systemUpgrading) {
+                window.location.href = subDomain + "/Account/Login";
+            }
         }
 
         // ==================== CARD SELECTION GAME LOGIC (BIG/SMALL / ODD/EVEN) ====================
@@ -1207,7 +1221,7 @@ else
                 }
             }
             $("#bsTotalTicketCount").text(1);
-            $("#bsTotalPrice").text(50);
+            $("#bsTotalPrice").text(formatMoneyV2(50));
         }
 
         function bsShowPayment(e) {

+ 39 - 16
website/Areas/LotteryV2/Views/Home/GameHome.cshtml

@@ -8,6 +8,17 @@
 @using LotteryWebApp.Common;
 
 
+@functions {
+    public string FormatMoney(string amount) {
+        if (string.IsNullOrEmpty(amount)) return "0";
+        var clean = new string(amount.Where(c => char.IsDigit(c)).ToArray());
+        if (long.TryParse(clean, out long val)) {
+            return val.ToString("#,##0", new System.Globalization.CultureInfo("vi-VN")).Replace(",", ".");
+        }
+        return amount;
+    }
+}
+
 <div class="main-container animate__animated animate__fadeIn bg-[#F5F5F5] min-h-screen">
     <!-- Top Account Profile Bar / Backgound Red header -->
     <div class="w-full bg-[#EE0033] p-4 text-white rounded-b-0xl shadow-md">
@@ -19,7 +30,7 @@
             <div>
                 <div class="font-bold text-sm tracking-wide opacity-90">@(Model?.profile?.users ?? "User")</div>
                 <div class="flex items-center gap-1 mt-0.5">
-                    <span class="text-3xl font-black text-[#FBF3A7]" style="text-shadow: 0 1px 2px rgba(0,0,0,0.2)">@(Model?.userStatus?.bet_coin ?? "0")</span>
+                    <span class="text-3xl font-black text-[#FBF3A7]" style="text-shadow: 0 1px 2px rgba(0,0,0,0.2)">@FormatMoney(Model?.userStatus?.bet_coin)</span>
                     <span class="text-xs font-bold text-[#FBF3A7] uppercase mt-1">@Lang.v2_htg</span>
                 </div>
             </div>
@@ -65,18 +76,18 @@
              <div class="h-10 w-px border-l border-dashed border-gray-300 mx-2"></div>
              
              <!-- Right: Timer -->
-             <div class="flex gap-3.5 shrink-0">
-                 <div class="flex flex-col items-center">
-                     <span class="text-[12px] text-black font-semibold">@Lang.hours</span>
-                     <span class="text-[26px] font-[1000] text-black leading-none font-bricolage" id="countdown-hours">82</span>
+             <div class="flex gap-4 shrink-0">
+                 <div class="flex flex-col items-center min-w-[42px]">
+                     <span class="text-[10px] text-[#A1A1A1] font-bold uppercase tracking-tighter mb-1">@Lang.hours</span>
+                     <span class="text-[28px] font-black text-black leading-none font-bricolage" id="countdown-hours">00</span>
                  </div>
-                 <div class="flex flex-col items-center">
-                    <span class="text-[12px] text-black font-semibold">@Lang.Minutes</span>
-                     <span class="text-[26px] font-[1000] text-black leading-none font-bricolage" id="countdown-minutes">50</span>
+                 <div class="flex flex-col items-center min-w-[42px]">
+                    <span class="text-[10px] text-[#A1A1A1] font-bold uppercase tracking-tighter mb-1">@Lang.Minutes</span>
+                     <span class="text-[28px] font-black text-black leading-none font-bricolage" id="countdown-minutes">00</span>
                  </div>
-                 <div class="flex flex-col items-center">
-                    <span class="text-[12px] text-black font-semibold">@Lang.Secs</span>
-                     <span class="text-[26px] font-[1000] text-black leading-none font-bricolage" id="countdown-seconds">55</span>
+                 <div class="flex flex-col items-center min-w-[42px]">
+                    <span class="text-[10px] text-[#A1A1A1] font-bold uppercase tracking-tighter mb-1">@Lang.Secs</span>
+                     <span class="text-[28px] font-black text-black leading-none font-bricolage" id="countdown-seconds">00</span>
                  </div>
              </div>
         </div>
@@ -125,7 +136,7 @@
                 <div class="col-span-4 flex flex-col items-center justify-center text-center">
                     <div class="text-[14px] font-bold text-white mb-0.5 whitespace-nowrap opacity-90">@Lang.jackpot_prize</div>
                     <div class="flex items-start gap-0.5">
-                        <span class="text-[26px] font-black text-[#FBF3A7] leading-none" style="text-shadow: 0 4px 8px rgba(0,0,0,0.3)">100.000</span>
+                        <span class="text-[22px] font-black text-[#FBF3A7] leading-none" style="text-shadow: 0 4px 8px rgba(0,0,0,0.3)">1.000.000</span>
                         <span class="text-[9px] font-bold text-white uppercase opacity-90 mt-1">@Lang.v2_htg</span>
                     </div>
                     <div class="text-[12px] text-white/90 font-medium whitespace-nowrap mt-1">@Lang.next_round <span class="font-black text-yellow-300 ml-1 countdown-timer">00:00:00</span></div>
@@ -176,7 +187,7 @@
                 <div class="col-span-4 flex flex-col items-center justify-center text-center">
                     <div class="text-[14px] font-bold text-white mb-0.5 whitespace-nowrap opacity-90">@Lang.jackpot_prize</div>
                     <div class="flex items-start gap-0.5">
-                        <span class="text-[26px] font-black text-[#FBF3A7] leading-none" style="text-shadow: 0 4px 8px rgba(0,0,0,0.3)">100</span>
+                        <span class="text-[26px] font-black text-[#FBF3A7] leading-none" style="text-shadow: 0 4px 8px rgba(0,0,0,0.3)">100.000</span>
                         <span class="text-[9px] font-bold text-white uppercase opacity-90 mt-1">@Lang.v2_htg</span>
                     </div>
                     <div class="text-[12px] text-white/90 font-medium whitespace-nowrap mt-1">@Lang.next_round <span class="font-black text-yellow-300 ml-1 countdown-timer">00:00:00</span></div>
@@ -233,7 +244,7 @@
                 <div class="col-span-4 flex flex-col items-center justify-center text-center">
                     <div class="text-[14px] font-bold text-white mb-0.5 whitespace-nowrap opacity-90">@Lang.jackpot_prize</div>
                     <div class="flex items-start gap-0.5">
-                        <span class="text-[26px] font-black text-[#FBF3A7] leading-none" style="text-shadow: 0 4px 8px rgba(0,0,0,0.3)">200</span>
+                        <span class="text-[26px] font-black text-[#FBF3A7] leading-none" style="text-shadow: 0 4px 8px rgba(0,0,0,0.3)">200.000</span>
                         <span class="text-[9px] font-bold text-white uppercase opacity-90 mt-1">@Lang.v2_htg</span>
                     </div>
                     <div class="text-[12px] text-white/90 font-medium whitespace-nowrap mt-1">@Lang.next_round <span class="font-black text-yellow-300 ml-1 countdown-timer">00:00:00</span></div>
@@ -291,13 +302,25 @@
 
 @section Scripts {
     <script>
-        function showNotification(message) {
+        var systemUpgrading = false;
+        function showNotification(message, code) {
             $("#notificationMessage").text(message);
+            const $btn = $("#notificationModal button");
+            if (code === "-2" || (message && message.includes("System is upgrading"))) {
+                systemUpgrading = true;
+                $btn.text("@Lang.login");
+            } else {
+                systemUpgrading = false;
+                $btn.text("@Lang.try_again");
+            }
             $("#notificationModal").removeClass("hidden").addClass("flex");
         }
 
         function closeNotificationModal() {
             $("#notificationModal").addClass("hidden").removeClass("flex");
+            if (systemUpgrading) {
+                window.location.href = subDomain + "/Account/Login";
+            }
         }
 
         let isCheckingTerm = false;
@@ -338,7 +361,7 @@
                         window.location.href = subDomain + "/Account/Login";
                         return;
                     } else {
-                        showNotification(res.responseMessage || "@Lang.error_happened");
+                        showNotification(res.responseMessage || "@Lang.error_happened", res.responseCode);
                     }
                     isCheckingTerm = false;
                 },

+ 57 - 3
website/Areas/LotteryV2/Views/Home/History.cshtml

@@ -56,6 +56,23 @@
 
     <!-- Shared Bottom Navbar -->
     <partial name="_BottomNavbar" />
+
+    <!-- Custom Notification Modal -->
+    <div id="notificationModal" class="fixed inset-0 z-[300] flex items-center justify-center hidden px-6 font-bricolage" style="background: linear-gradient(135deg, rgba(26, 26, 46, 0.9) 0%, rgba(22, 33, 62, 0.9) 100%);">
+        <div class="w-full max-w-[343px] min-h-[420px] bg-white rounded-[24px] overflow-hidden flex flex-col items-center p-8 animate__animated animate__zoomIn animate__faster shadow-2xl border border-white/50">
+            <div class="w-full flex justify-center mb-8 mt-4">
+                <img src="/LotteryV2/img/modal/fail_icon.png" class="w-[160px] h-auto object-contain" alt="Notificaton icon" />
+            </div>
+            <div class="px-2 text-center mb-10 flex-1 flex items-center justify-center">
+                <p id="notificationMessage" class="text-black font-[800] text-[20px] leading-snug"></p>
+            </div>
+            <div class="w-full">
+                <button onclick="closeNotificationModal()" class="w-full bg-[#EE0033] text-white font-[800] text-[18px] py-[12px] rounded-[16px] shadow-lg active:scale-95 transition-all">
+                    @Lang.login
+                </button> 
+            </div>
+        </div>
+    </div>
 </div>
 
 @section Scripts {
@@ -94,19 +111,56 @@
             loadHistory();
         }
 
+        var systemUpgrading = false;
+        function showNotification(message, code) {
+            $("#notificationMessage").text(message);
+            const $btn = $("#notificationModal button");
+            if (code === "-2" || (message && message.includes("System is upgrading"))) {
+                systemUpgrading = true;
+                $btn.text("@Lang.login");
+            } else {
+                systemUpgrading = false;
+                $btn.text("OK");
+            }
+            $("#notificationModal").removeClass("hidden").addClass("flex");
+        }
+
+        function closeNotificationModal() {
+            $("#notificationModal").addClass("hidden").removeClass("flex");
+            if (systemUpgrading) {
+                window.location.href = subDomain + "/Account/Login";
+            }
+        }
+
         function loadHistory() {
             const container = document.getElementById("history-list-container");
             container.style.opacity = "0.5";
 
             fetch(subDomain + `/LotteryV2/Home/TermUserTicketHistory?termType=${currentTermType}&status=${currentStatus}&seqPage=${currentSeqPage}`)
-                .then(response => response.text())
+                .then(response => {
+                    if (!response.ok) throw new Error('Network response was not ok');
+                    return response.text();
+                })
                 .then(html => {
+                    try {
+                        const json = JSON.parse(html);
+                        if (json.responseCode === "-2" || (json.responseMessage && json.responseMessage.includes("System is upgrading"))) {
+                            showNotification(json.responseMessage || "System is upgrading", "-2");
+                            return;
+                        }
+                    } catch (e) {
+                        // Not JSON, likely HTML partial
+                    }
                     container.innerHTML = html;
                     container.style.opacity = "1";
                     updatePaginationUI();
                 })
                 .catch(error => {
+                    console.error("Error loading history:", error);
                     container.style.opacity = "1";
+                    if (error.message && (error.message.includes("System is upgrading") || error.message.includes("-2"))) {
+                        showNotification(error.message, "-2");
+                    }
                 });
         }
 
@@ -125,8 +179,8 @@
         function showTicketDetail(billCode, money, moneyWin, date, channel, payMethod, ticketCode, gameId, drawTime, ticketId) {
             document.getElementById('detailBillCode').innerText = '#' + (billCode || '-');
             document.getElementById('detailTicketCode').innerText = '#' + (ticketId || '-');
-            document.getElementById('detailMoney').innerText = (money || '0') + ' HTG';
-            document.getElementById('detailMoneyWin').innerText = (moneyWin || '0') + ' HTG';
+            document.getElementById('detailMoney').innerText = formatMoneyV2(money || '0') + ' HTG';
+            document.getElementById('detailMoneyWin').innerText = formatMoneyV2(moneyWin || '0') + ' HTG';
             document.getElementById('detailDate').innerText = date || '-';
             document.getElementById('detailDrawTime').innerText = drawTime || '-';
             document.getElementById('detailChannel').innerText = channel || 'App';

+ 2 - 2
website/Areas/LotteryV2/Views/Home/Index.cshtml

@@ -28,7 +28,7 @@
     </div>
 
     <!-- Game List Section -->
-    <div class="px-4 mt-2">
+    <div class="px-3 -mt-24 relative z-30">
         <div class="flex flex-col gap-3">
             <!-- Game Card 1: Basic Pick 10 -->
             <div class="relative w-full h-[120px] rounded-2xl overflow-hidden shadow-2xl transform active:scale-[0.98] transition-all duration-300 cursor-pointer animate__animated animate__slideInUp card-red" onclick="changeGame()">
@@ -55,7 +55,7 @@
                     <div class="col-span-4 flex flex-col items-center justify-center text-center px-1">
                         <div class="text-[10px] font-bold text-white mb-0.5 whitespace-nowrap opacity-90 leading-none uppercase">@Lang.jackpot_prize</div>
                         <div class="flex items-start gap-0.5">
-                            <span class="text-[23px] font-black text-[#FBF3A7] leading-none" style="text-shadow: 0 4px 8px rgba(0,0,0,0.3)">100.000</span>
+                            <span class="text-[22px] font-black text-[#FBF3A7] leading-none" style="text-shadow: 0 4px 8px rgba(0,0,0,0.3)">1.000.000</span>
                             <span class="text-[8px] font-bold text-white uppercase opacity-90 mt-1">HTG</span>
                         </div>
                         <div class="text-[10px] text-white/90 font-medium whitespace-nowrap mt-1">@Lang.next : <span class="font-black text-yellow-300 countdown-timer">00:00:00</span></div>

+ 22 - 4
website/Areas/LotteryV2/Views/Home/More.cshtml

@@ -11,6 +11,17 @@
 <link rel="stylesheet" href="/LotteryV2/css/site.css" />
 <link rel="stylesheet" href="/LotteryV2/css/more.css" />
 
+@functions {
+    public string FormatMoney(string amount) {
+        if (string.IsNullOrEmpty(amount)) return "0";
+        var clean = new string(amount.Where(c => char.IsDigit(c)).ToArray());
+        if (long.TryParse(clean, out long val)) {
+            return val.ToString("#,##0", new System.Globalization.CultureInfo("vi-VN")).Replace(",", ".");
+        }
+        return amount;
+    }
+}
+
 <div class="main-container animate__animated animate__fadeIn min-h-screen relative flex flex-col pb-24 overflow-x-hidden" style="background-color: #EAEAEA !important;">
     
     <!-- User Profile Header (Center Aligned, Red Background) -->
@@ -21,20 +32,27 @@
         </div>
         <!-- Info -->
         <span class="font-bold text-lg text-white tracking-wide">@(Model?.profile?.fullName ?? "User")</span>
-        <span class="text-sm text-white font-medium tracking-wide">@(Model?.profile?.users ?? "0000000000")</span>
+        <span class="text-sm text-white font-medium tracking-wide mb-2">@(Model?.profile?.users ?? "0000000000")</span>
+
+        <!-- Coin Display (Matching GameHome aesthetic) -->
+        <div class="flex items-center gap-1.5 mt-1 bg-black/10 px-4 py-1 rounded-full border border-white/10 backdrop-blur-sm">
+            <img src="/LotteryV2/img/gold_coin.png" class="w-5 h-5 object-contain" onerror="this.style.display='none'" />
+            <span class="text-[22px] font-black text-[#FBF3A7]" style="text-shadow: 0 1px 2px rgba(0,0,0,0.2)">@FormatMoney(Model?.userStatus?.bet_coin)</span>
+            <span class="text-[10px] font-bold text-[#FBF3A7] uppercase mt-1.5">@Lang.v2_htg</span>
+        </div>
     </div>
 
     <!-- Menu List (White Full Container) -->
     <div class="w-full bg-white flex flex-col px-6 pt-2 pb-6 relative z-10 m-0 border-none">
         
-        <!-- Item: Winning Account -->
+        <!-- Item: Winning Account
         <div class="flex items-center justify-between py-[18px] border-b-2 border-dashed border-gray-100 cursor-pointer transition-colors active:bg-gray-50">
             <div class="flex items-center gap-4">
-                <i class="fa-solid fa-sack-dollar text-[#4A4A4A] text-[20px] w-6 text-center"></i>
+                <img src="/LotteryV2/img/gold_coin.png" class="w-6 h-6 object-contain" onerror="this.outerHTML='<i class=\'fa-solid fa-sack-dollar text-[#4A4A4A] text-[20px] w-6 text-center\'></i>'" />
                 <span class="text-[#212121] font-bold text-[13px]">@Lang.winning_account</span>
             </div>
             <span class="font-extrabold text-[15px] text-[#212121]">@(Model?.userStatus?.cash_coin ?? "0") HTG</span>
-        </div>
+        </div> -->
 
         <!-- Item: Profile -->
         <div class="flex items-center justify-between py-[18px] border-b-2 border-dashed border-gray-100 cursor-pointer transition-colors active:bg-gray-50" onclick="window.location.href='/LotteryV2/Home/Profile'">

+ 14 - 2
website/Areas/LotteryV2/Views/Home/Profile.cshtml

@@ -201,7 +201,7 @@
                 if (response.status == "0") {
                     showSuccessModal();
                 } else {
-                    showFailureModal(response.message || "Update failed");
+                    showFailureModal(response.message || "Update failed", response.status);
                 }
             },
             error: function (error) {
@@ -215,8 +215,17 @@
         $("#successModal").removeClass("hidden").addClass("flex");
     }
 
-    function showFailureModal(message) {
+    var systemUpgrading = false;
+    function showFailureModal(message, code) {
         $("#failErrorMessage").text(message);
+        const $btn = $("#failureModal button");
+        if (code === "-2" || (message && message.includes("System is upgrading"))) {
+            systemUpgrading = true;
+            $btn.text("@Lang.login");
+        } else {
+            systemUpgrading = false;
+            $btn.text("@Lang.try_again");
+        }
         $("#failureModal").removeClass("hidden").addClass("flex");
     }
 
@@ -227,5 +236,8 @@
 
     function closeFailureModal() {
         $("#failureModal").addClass("hidden").removeClass("flex");
+        if (systemUpgrading) {
+            window.location.href = subDomain + "/Account/Login";
+        }
     }
 </script>

+ 57 - 1
website/Areas/LotteryV2/Views/Home/Results.cshtml

@@ -85,6 +85,23 @@
              <partial name="_BottomNavbar" />
          </div>
     </div>
+
+    <!-- Custom Notification Modal -->
+    <div id="notificationModal" class="fixed inset-0 z-[300] flex items-center justify-center hidden px-6 font-bricolage" style="background: linear-gradient(135deg, rgba(26, 26, 46, 0.9) 0%, rgba(22, 33, 62, 0.9) 100%);">
+        <div class="w-full max-w-[343px] min-h-[420px] bg-white rounded-[24px] overflow-hidden flex flex-col items-center p-8 animate__animated animate__zoomIn animate__faster shadow-2xl border border-white/50">
+            <div class="w-full flex justify-center mb-8 mt-4">
+                <img src="/LotteryV2/img/modal/fail_icon.png" class="w-[160px] h-auto object-contain" alt="Notificaton icon" />
+            </div>
+            <div class="px-2 text-center mb-10 flex-1 flex items-center justify-center">
+                <p id="notificationMessage" class="text-black font-[800] text-[20px] leading-snug"></p>
+            </div>
+            <div class="w-full">
+                <button onclick="closeNotificationModal()" class="w-full bg-[#EE0033] text-white font-[800] text-[18px] py-[12px] rounded-[16px] shadow-lg active:scale-95 transition-all">
+                    @Lang.login
+                </button> 
+            </div>
+        </div>
+    </div>
 </div>
 
 @section Scripts {
@@ -138,6 +155,27 @@
             triggerSearch(); // Initial load for all games
         });
 
+        var systemUpgrading = false;
+        function showNotification(message, code) {
+            $("#notificationMessage").text(message);
+            const $btn = $("#notificationModal button");
+            if (code === "-2" || (message && message.includes("System is upgrading"))) {
+                systemUpgrading = true;
+                $btn.text("@Lang.login");
+            } else {
+                systemUpgrading = false;
+                $btn.text("OK");
+            }
+            $("#notificationModal").removeClass("hidden").addClass("flex");
+        }
+
+        function closeNotificationModal() {
+            $("#notificationModal").addClass("hidden").removeClass("flex");
+            if (systemUpgrading) {
+                window.location.href = subDomain + "/Account/Login";
+            }
+        }
+
         async function triggerSearch() {
             const fromDate = document.getElementById("fromDate").value;
             const toDate = document.getElementById("toDate").value;
@@ -151,8 +189,20 @@
             try {
                 // Call the new grouped endpoint
                 const response = await fetch(`${subDomain}/LotteryV2/Home/TermResultHistoryGrouped?fromDate=${fromDate}&toDate=${toDate}`);
+                if (!response.ok) throw new Error('Network response was not ok');
+                
                 const html = await response.text();
                 
+                try {
+                    const json = JSON.parse(html);
+                    if (json.responseCode === "-2" || (json.responseMessage && json.responseMessage.includes("System is upgrading"))) {
+                        showNotification(json.responseMessage || "System is upgrading", "-2");
+                        return;
+                    }
+                } catch (e) {
+                    // Not JSON, likely HTML partial
+                }
+
                 if (html.trim() === "") {
                     container.innerHTML = `
                         <div class="w-full py-20 flex flex-col items-center justify-center text-gray-400 opacity-60">
@@ -165,7 +215,13 @@
                 }
             } catch (error) {
                 console.error("Error loading grouped results:", error);
-                container.innerHTML = `<div class="text-center py-10 text-red-500 font-bold">Error loading results. Please try again.</div>`;
+                
+                // Check if the error response is JSON and has code -2
+                if (error.message && (error.message.includes("System is upgrading") || error.message.includes("-2"))) {
+                    showNotification(error.message, "-2");
+                } else {
+                    container.innerHTML = `<div class="text-center py-10 text-red-500 font-bold">Error loading results. Please try again.</div>`;
+                }
             }
 
             container.style.opacity = "1";

+ 44 - 24
website/Areas/LotteryV2/Views/Home/TransferWinMoney.cshtml

@@ -4,6 +4,16 @@
     Layout = "~/Areas/LotteryV2/Views/Shared/_Layout.cshtml";
 }
 @using LotteryWebApp.Languages;
+@functions {
+    public string FormatMoney(string amount) {
+        if (string.IsNullOrEmpty(amount)) return "0";
+        var clean = new string(amount.Where(c => char.IsDigit(c)).ToArray());
+        if (long.TryParse(clean, out long val)) {
+            return val.ToString("#,##0", new System.Globalization.CultureInfo("vi-VN")).Replace(",", ".");
+        }
+        return amount;
+    }
+}
 <style>
     @@keyframes float {
         0%, 100% { transform: translateY(0); }
@@ -64,7 +74,7 @@
             
             <!-- Balance Row -->
             <div class="relative z-10 flex items-end gap-2">
-                <span id="currentBetCoin" class="font-[800] text-[40px] leading-[1.2]" style="background: linear-gradient(179deg, rgba(255,255,255,1) 0%, rgba(240,201,63,1) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; font-family: 'Bricolage Grotesque', sans-serif;">@String.Format("{0:N0}", double.TryParse(Model?.userStatus?.bet_coin, out var cc) ? cc : 0)</span>
+                <span id="currentBetCoin" class="font-[800] text-[40px] leading-[1.2]" style="background: linear-gradient(179deg, rgba(255,255,255,1) 0%, rgba(240,201,63,1) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; font-family: 'Bricolage Grotesque', sans-serif;">@FormatMoney(Model?.userStatus?.bet_coin)</span>
                 <span class="text-white font-[800] text-[20px] uppercase pb-[6px]" style="font-family: 'Bricolage Grotesque', sans-serif;">htg</span>
             </div>
         </div>
@@ -161,20 +171,12 @@
     <!-- Success Modal Overlay -->
     <div id="successModal" class="fixed inset-0 z-[110] flex items-center justify-center hidden px-6" style="background: rgba(0,0,0,0.7);">
         <div class="w-full max-w-[370px] bg-white rounded-[32px] overflow-hidden flex flex-col items-center animate__animated animate__zoomIn animate__faster shadow-2xl relative">
-            
-            <!-- Confetti Background (Uses existing if available, else decorative fallback) -->
-            <img src="/LotteryV2/img/modal/otp_glitter.png" class="absolute top-0 left-0 w-full opacity-40 pointer-events-none" />
-
             <!-- Content Container -->
             <div class="relative z-10 w-full flex flex-col items-center pt-10 pb-8 px-6">
                 
                 <!-- Success Icon Group -->
-                <div class="relative w-[120px] h-[120px] mb-4">
-                    <div class="absolute inset-0 bg-[#F5F5F5] rounded-full scale-110"></div>
-                    <img src="/LotteryV2/img/modal/otp_success.png" class="relative z-20 w-full h-full object-contain drop-shadow-[0_0_8px_rgba(240,201,63,0.8)]" />
-                    <!-- Sparkles (Using existing SVG icons if possible) -->
-                    <img src="/LotteryV2/img/modal/otp_sparkle_1.svg" class="absolute -bottom-2 -left-2 w-8 z-30 drop-shadow-[0_0_4px_rgba(240,201,63,1)]" />
-                    <img src="/LotteryV2/img/modal/otp_sparkle_2.svg" class="absolute top-10 -right-6 w-10 z-30 drop-shadow-[0_0_4px_rgba(240,201,63,1)] opacity-70" />
+                <div class="relative w-full flex justify-center mb-0 mt-2 z-10 px-4">
+                    <img src="/LotteryV2/img/modal/otp_success.png" alt="Success" class="w-full max-w-[200px] h-auto object-contain">
                 </div>
 
                 <h2 class="text-[#0A9800] font-[800] text-[32px] mb-1 tracking-tight">@Lang.success</h2>
@@ -379,7 +381,7 @@
                     if(res.responseCode == "0" || res.responseCode == 0) {
                         openOtpModal();
                     } else {
-                        showFailureModal(res.message || "Failed to send OTP");
+                        showFailureModal(res.message || "Failed to send OTP", res.responseCode);
                     }
                 },
                 error: function() {
@@ -397,7 +399,7 @@
             
             // Set display amounts
             const amt = $("#transferAmount").val();
-            const formattedAmt = String(amt).replace(/\B(?=(\d{3})+(?!\d))/g, ".");
+            const formattedAmt = formatMoneyV2(amt);
             $("#displayAmountCoins").text(formattedAmt);
             $("#displayAmountHTG").text(formattedAmt);
 
@@ -479,7 +481,12 @@
                         $("#otpError").removeClass("text-[#EE0033] animate__shakeX").addClass("text-[#0A9800]").text("@Lang.v2_otp_sent_successfully").removeClass("hidden");
                         $(".otp-digit").val("").first().focus();
                     } else {
-                        $("#otpError").removeClass("text-[#0A9800]").addClass("text-[#EE0033] animate__shakeX").text(data.responseMessage || "Failed to resend OTP").removeClass("hidden");
+                        if (data.responseCode === "-2" || (data.responseMessage && data.responseMessage.includes("System is upgrading"))) {
+                             closeOtpModal();
+                             showFailureModal(data.responseMessage || "System is upgrading", data.responseCode);
+                        } else {
+                             $("#otpError").removeClass("text-[#0A9800]").addClass("text-[#EE0033] animate__shakeX").text(data.responseMessage || "Failed to resend OTP").removeClass("hidden");
+                        }
                     }
                 },
                 error: function() {
@@ -525,13 +532,12 @@
                         
                         // Update balance in UI immediately
                         if(res.userStatus && res.userStatus.bet_coin) {
-                           let balanceVal = parseFloat(res.userStatus.bet_coin);
-                           $("#currentBetCoin").text(balanceVal.toLocaleString());
+                           $("#currentBetCoin").text(formatMoneyV2(res.userStatus.bet_coin));
                         }
 
                         // Populate Success Modal Fields
                         const transferAmt = $("#transferAmount").val();
-                        $("#successAmount").text(parseFloat(transferAmt).toLocaleString() + " HTG");
+                        $("#successAmount").text(formatMoneyV2(transferAmt) + " HTG");
                         $("#successSender").text("@(Model?.userStatus?.msisdn ?? "0")");
                         $("#successReceiver").text($("#receiverPhone").val());
                         
@@ -542,12 +548,14 @@
 
                         $("#successModal").removeClass("hidden").addClass("flex");
                     } else {
-                        // showFailureModal(res.message || "Transfer failed");
-                        // As requested: show error on OTP modal instead of failing whole transaction modal
-                        $("#otpError").text(res.message || "Invalid OTP").removeClass("hidden");
-                        // Clear inputs
-                        $(".otp-digit").val("");
-                        $(".otp-digit").first().focus();
+                        if (res.responseCode === "-2" || (res.message && res.message.includes("System is upgrading"))) {
+                             closeOtpModal();
+                             showFailureModal(res.message || "System is upgrading", res.responseCode);
+                        } else {
+                             $("#otpError").text(res.message || "Invalid OTP").removeClass("hidden");
+                             $(".otp-digit").val("");
+                             $(".otp-digit").first().focus();
+                        }
                     }
                 },
                 error: function() {
@@ -558,13 +566,25 @@
             });
         });
 
-        function showFailureModal(message) {
+        var systemUpgrading = false;
+        function showFailureModal(message, code) {
             $("#failErrorMessage").html(message);
+            const $btn = $("#failureModal button");
+            if (code === "-2" || (message && message.includes("System is upgrading"))) {
+                systemUpgrading = true;
+                $btn.text("@Lang.login");
+            } else {
+                systemUpgrading = false;
+                $btn.text("@Lang.try_again");
+            }
             $("#failureModal").removeClass("hidden").addClass("flex");
         }
 
         function closeFailureModal() {
             $("#failureModal").addClass("hidden").removeClass("flex");
+            if (systemUpgrading) {
+                window.location.href = subDomain + "/Account/Login";
+            }
         }
     </script>
 }

+ 12 - 9
website/Areas/LotteryV2/Views/Home/_TermResultHistoryGrouped.cshtml

@@ -8,6 +8,9 @@
     foreach (var group in Model)
     {
         var drawDate = group.Key;
+        var filteredGames = group.Where(x => !string.Equals(x.result, "NA", StringComparison.OrdinalIgnoreCase)).ToList();
+        
+        if (filteredGames.Count == 0) continue;
         
         <div class="result-card-premium animate__animated animate__fadeInUp mb-6 overflow-hidden bg-white rounded-2xl shadow-sm border border-gray-100">
             <!-- Simplified Header -->
@@ -23,10 +26,10 @@
             </div>
 
             <!-- Games Container -->
-            <div class="p-4 space-y-4">
-                <!-- Date/Time Info Row (Consolidated for all games on this date) -->
-                <div class="flex items-center gap-3 mb-6 bg-gray-50/50 p-3 rounded-2xl border border-gray-100/80 shadow-xs">
-                    <div class="w-12 h-12 flex flex-col items-center justify-center bg-white rounded-xl shadow-xs border border-gray-100 shrink-0">
+            <div class="px-3 pt-2 pb-3 space-y-0.5">
+                <!-- Date/Time Info Row -->
+                <div class="flex items-center gap-3 mb-1.5 bg-gray-50/50 p-2 rounded-2xl border border-gray-100/80 shadow-xs">
+                    <div class="w-11 h-11 flex flex-col items-center justify-center bg-white rounded-xl shadow-xs border border-gray-100 shrink-0">
                         <span class="text-[9px] font-bold text-gray-400 uppercase leading-none">@drawDate.ToString("MMM")</span>
                         <span class="text-[18px] font-black text-[#EE0033] leading-none">@drawDate.ToString("dd")</span>
                     </div>
@@ -40,7 +43,7 @@
                 </div>
 
                 @{
-                    var games = group.OrderBy(x => x.gameId).ToList();
+                    var games = filteredGames.OrderBy(x => x.gameId).ToList();
                     for (int i = 0; i < games.Count; i++)
                     {
                         var item = games[i];
@@ -61,7 +64,7 @@
                         var gameBg = isBasic ? "bg-[#EE0033]/5" : isBigSmall ? "bg-[#26A31E]/5" : isOddEven ? "bg-[#B529E9]/5" : "bg-gray-50";
 
                         <div class="game-result-row px-1">
-                            <div class="flex items-center justify-between mb-2 px-1">
+                            <div class="flex items-center justify-between mb-0 px-1">
                                 <div class="flex items-center gap-2">
                                     <div class="w-1.5 h-4 rounded-full" style="background-color: @gameColor"></div>
                                     <span class="text-[14px] font-black uppercase tracking-widest" style="color: @gameColor">@gameName</span>
@@ -118,9 +121,9 @@
 
                         if (i < games.Count - 1)
                         {
-                            <!-- Red Separator Line as requested -->
-                            <div class="py-2">
-                                <div class="h-[1px] bg-gradient-to-r from-transparent via-[#EE0033]/40 to-transparent"></div>
+                            <!-- Red Separator Line -->
+                            <div class="py-0">
+                                <div class="h-[1px] bg-gradient-to-r from-transparent via-[#EE0033]/20 to-transparent"></div>
                             </div>
                         }
                     }

+ 2 - 0
website/Areas/LotteryV2/Views/Home/_TermResultHistoryV2.cshtml

@@ -4,6 +4,8 @@
 {
     foreach (var item in Model.listTerm)
     {
+        if (string.Equals(item.result, "NA", StringComparison.OrdinalIgnoreCase)) continue;
+        
         var gameColor = item.gameId == "30" ? "#EE0033" : item.gameId == "31" ? "#26A31E" : item.gameId == "32" ? "#B529E9" : "#EE0033";
         var gameGradient = item.gameId == "30" ? "linear-gradient(135deg, #FF3D63 0%, #E3132D 60%, #BA0F21 100%)" : 
                            item.gameId == "31" ? "linear-gradient(135deg, #4ADE80 0%, #26A31E 100%)" : 

+ 13 - 11
website/Areas/LotteryV2/Views/Home/_TermUserTicketHistory.cshtml

@@ -2,6 +2,17 @@
 @using LotteryWebApp.Languages
 @using LotteryWebApp.Common
 
+@functions {
+    public string FormatMoney(string amount) {
+        if (string.IsNullOrEmpty(amount)) return "0";
+        var clean = new string(amount.Where(c => char.IsDigit(c)).ToArray());
+        if (long.TryParse(clean, out long val)) {
+            return val.ToString("#,##0", new System.Globalization.CultureInfo("vi-VN")).Replace(",", ".");
+        }
+        return amount;
+    }
+}
+
 @if (Model != null && Model.listTicket != null && Model.listTicket.Count > 0)
 {
     foreach (var item in Model.listTicket)
@@ -10,15 +21,6 @@
             <div class="ticket-card-top">
                 <div class="ticket-header">
                     <span class="ticket-id">#@item.seq</span>
-                    <div class="ticket-status @(item.status == Constants.WIN_CODE ? "status-win" : (item.status == Constants.NOT_DRAW_CODE ? "status-waiting" : "status-notwin"))">
-                        @if (item.status == Constants.WIN_CODE) {
-                            @Lang.v2_win
-                        } else if (item.status == Constants.NOT_DRAW_CODE) {
-                            @Lang.v2_waiting
-                        } else {
-                            @Lang.v2_not_win
-                        }
-                    </div>
                 </div>
 
                 <div class="ticket-numbers flex flex-wrap gap-2">
@@ -84,12 +86,12 @@
                     </div>
                     <div class="info-row">
                         <span class="info-label">@Lang.v2_amount_played</span>
-                        <span class="info-value">@item.money HTG</span>
+                        <span class="info-value">@FormatMoney(item.money) HTG</span>
                     </div>
                     @if (item.status == Constants.WIN_CODE) {
                         <div class="info-row">
                             <span class="info-label">@Lang.v2_amount_won</span>
-                            <span class="info-value win-amount">@item.moneyWin HTG</span>
+                            <span class="info-value win-amount">@FormatMoney(item.moneyWin) HTG</span>
                         </div>
                     }
                 </div>

+ 7 - 0
website/Areas/LotteryV2/Views/Shared/_Layout.cshtml

@@ -56,6 +56,13 @@
         }).ajaxStop(function() {
             hideLoading();
         });
+
+        function formatMoneyV2(amount) {
+            if (amount === undefined || amount === null || amount === "") return "0";
+            let str = amount.toString().replace(/[^0-9]/g, '');
+            if (str === "") return "0";
+            return str.replace(/\B(?=(\d{3})+(?!\d))/g, ".");
+        }
     </script>
 
 

+ 1 - 1
website/Languages/Lang.Designer.cs

@@ -1251,7 +1251,7 @@ namespace LotteryWebApp.Languages {
         }
         
         /// <summary>
-        ///   Looks up a localized string similar to 100.000 HTG jodi a !.
+        ///   Looks up a localized string similar to 1.000.000 HTG jodi a !.
         /// </summary>
         public static string jackpot_today_htg {
             get {

+ 1 - 1
website/Languages/Lang.fr.resx

@@ -1188,7 +1188,7 @@ We’ll help you create an account in a few easy steps.</value>
     <value>Une erreur est survenue lors de la mise à jour de votre profil.</value>
   </data>
   <data name="jackpot_today_htg" xml:space="preserve">
-    <value>100.000 HTG today !</value>
+    <value>1.000.000 HTG today !</value>
   </data>
   <data name="no_results_found" xml:space="preserve">
     <value>No results found</value>

+ 1 - 1
website/Languages/Lang.resx

@@ -1188,7 +1188,7 @@ We’ll help you create an account in a few easy steps.</value>
     <value>An error occurred while updating your profile.</value>
   </data>
   <data name="jackpot_today_htg" xml:space="preserve">
-    <value>100.000 HTG jodi a !</value>
+    <value>1.000.000 HTG jodi a !</value>
   </data>
   <data name="no_results_found" xml:space="preserve">
     <value>No results found</value>