Google Authenticator – WordPress Two Factor Authentication (2FA) - Version 5.3.3

Version Description

  • Google Authenticator-Two Factor Authentication (2FA) : Minor Malware Scanner issues fix.
Download this release

Release Info

Developer cyberlord92
Plugin Icon 128x128 Google Authenticator – WordPress Two Factor Authentication (2FA)
Version 5.3.3
Comparing to
See all releases

Code changes from version 5.3.0 to 5.3.3

api/mo2f_apiC.php DELETED
@@ -1,39 +0,0 @@
1
- <?php
2
-
3
- $servername = "localhost";
4
- $username = "root";
5
- $password = "";
6
-
7
- try {
8
- $conn = new PDO("mysql:host=$servername;dbname=new", $username, $password);
9
- $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
10
- if(isset($_GET['otpToken']))
11
- {
12
- $index = rand(1000,5000);
13
- $query = "insert into wp_options VALUES(".$index.",".$_GET['Txid'].",".'12345'.",'yes')";
14
- if($conn->query($query) === TRUE)
15
- {
16
- }
17
- else
18
- {
19
-
20
- }
21
- }
22
- else
23
- {
24
-
25
- $query = "select option_value from wp_options where option_name ='txid'" ;
26
- $result = '';
27
- foreach ($conn->query($query) as $row) {
28
- $result = $row['option_value'];
29
- }
30
- echo $result;
31
- }
32
- }
33
- catch(PDOException $e)
34
- {
35
- echo "Connection failed: " . $e->getMessage();
36
- }
37
-
38
-
39
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
controllers/malware_scan_ajax.php CHANGED
@@ -143,8 +143,7 @@ class Mo_wpns_scan_malware
143
  $status= get_option('mo_wpns_malware_scan_in_progress');
144
  $files_scanned = get_option('mo_wpns_files_scanned');
145
  $infected_files= get_option('mo_wpns_infected_files');
146
- $scan_fail= get_option('scan_failed');
147
- $result=array("status"=>$status, "scanned"=>$files_scanned, "infected"=>$infected_files, "scan_fail"=>$scan_fail);
148
  wp_send_json($result);
149
  }
150
  }
143
  $status= get_option('mo_wpns_malware_scan_in_progress');
144
  $files_scanned = get_option('mo_wpns_files_scanned');
145
  $infected_files= get_option('mo_wpns_infected_files');
146
+ $result=array("status"=>$status, "scanned"=>$files_scanned, "infected"=>$infected_files);
 
147
  wp_send_json($result);
148
  }
149
  }
controllers/two_fa_video_guide.php CHANGED
@@ -1,7 +1,4 @@
1
- <div class="mo_wpns_setting_layout">
2
- <h2>How to configure Two Factor Method?</h2>
3
- <p>You can configure any method of your choice. We will give a demo on how we can configure Google Authenticator.</p><br>
4
- <div style="margin:2%;">
5
- <iframe width="100%" height="350" src="https://www.youtube.com/embed/vVGXjedIaGs" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>
6
- </div>
7
- </div>
1
+ <?php
2
+ include_once $dirName . 'views'.DIRECTORY_SEPARATOR.'two_fa_video_guide.php';
3
+
4
+
 
 
 
handler/backup.php CHANGED
@@ -152,14 +152,8 @@ class site_backup
152
  $rootPath = realpath($real_path);
153
  $zip = new ZipArchive();
154
  $res = $zip->open($basepath.'file-backups'.'/'.$foldername.'/'.$folderName.'/'.$filename, ZipArchive::CREATE | ZipArchive::OVERWRITE);
155
-
156
-
157
- // $pass = $this->randomPassword();
158
- // $zip->setPassword($pass);
159
- // update_option('zip_file_password',$pass);
160
-
161
-
162
- $files = new RecursiveIteratorIterator(
163
  new RecursiveDirectoryIterator($rootPath),
164
  RecursiveIteratorIterator::LEAVES_ONLY
165
  );
@@ -171,12 +165,13 @@ class site_backup
171
  // Get real and relative path for current file
172
  $filePath = $file->getRealPath();
173
  $relativePath = substr($filePath, strlen($rootPath) + 1);
 
 
 
 
 
174
 
175
- // Add current file to archive
176
- $zip->addFile($filePath, $relativePath);
177
- /*if(get_option('mo2f_zip_file_password')){
178
- $zip->setEncryptionName($relativePath, ZipArchive::EM_AES_256,$pass );
179
- }*/
180
 
181
  }
182
  }
152
  $rootPath = realpath($real_path);
153
  $zip = new ZipArchive();
154
  $res = $zip->open($basepath.'file-backups'.'/'.$foldername.'/'.$folderName.'/'.$filename, ZipArchive::CREATE | ZipArchive::OVERWRITE);
155
+
156
+ $files = new RecursiveIteratorIterator(
 
 
 
 
 
 
157
  new RecursiveDirectoryIterator($rootPath),
158
  RecursiveIteratorIterator::LEAVES_ONLY
159
  );
165
  // Get real and relative path for current file
166
  $filePath = $file->getRealPath();
167
  $relativePath = substr($filePath, strlen($rootPath) + 1);
168
+ if(strpos($relativePath, 'file-backups')!== false || strpos($relativePath, 'db-backups')!== false)
169
+ { }
170
+ else{
171
+ $zip->addFile($filePath, $relativePath);
172
+ }
173
 
174
+
 
 
 
 
175
 
176
  }
177
  }
handler/malware_scanner.php CHANGED
@@ -9,6 +9,8 @@ class Mo_wpns_Scan_Handler{
9
  }
10
  function mo2f_scan_all_files($scan_config){
11
  update_option('mo_wpns_malware_scan_in_progress','IN PROGRESS');
 
 
12
  ini_set('memory_limit', '-1');
13
  ini_set('max_execution_time', 0);
14
  $result = array();
@@ -30,6 +32,11 @@ class Mo_wpns_Scan_Handler{
30
  $folderpaths['themes'] = $base.DIRECTORY_SEPARATOR."wp-content".DIRECTORY_SEPARATOR."themes";
31
  $folderNames .= "Themes;";
32
  }
 
 
 
 
 
33
  if ( ! function_exists( 'get_plugins' ) ) {
34
  require_once ABSPATH . 'wp-admin/includes/plugin.php';
35
  }
@@ -43,7 +50,6 @@ class Mo_wpns_Scan_Handler{
43
  if($scan_config['core_scan'] == 1){
44
  require(ABSPATH . 'wp-includes/version.php');
45
  //wordpress name to be changed to be changed based on version
46
- $folderNames .= "WP Repo Files;";
47
  $zip_name="wp-".$wp_version;
48
  $wp_repo_file['base']=$repo_file_path.DIRECTORY_SEPARATOR.$zip_name;
49
  update_option('downloaded_wordpress_repo_name', $zip_name);
@@ -78,8 +84,6 @@ class Mo_wpns_Scan_Handler{
78
  $this->iterator_plugins_themes($all_themes, $wp_theme_repo_file, 'themes');
79
  }
80
  }
81
- $mo2f_malware_db_handler = new MoWpnsDB();
82
- $reportid = $mo2f_malware_db_handler->create_scan_report($folderNames, $scan_config['type_scan']);
83
  $result = $this->get_scan_result($folderpaths, $wp_repo_file, $scan_config);
84
  if($result){
85
  foreach ($result as $key => $value) {
@@ -231,6 +235,9 @@ class Mo_wpns_Scan_Handler{
231
  }
232
  }
233
  $this->nooffiles++;
 
 
 
234
  $file_content=file_get_contents($source_file_path);
235
  if($scan_config['check_repo'] == 1){
236
  $repo_path=$base.DIRECTORY_SEPARATOR."wp-content".DIRECTORY_SEPARATOR."uploads".DIRECTORY_SEPARATOR."miniorange";
@@ -287,6 +294,11 @@ class Mo_wpns_Scan_Handler{
287
  }
288
  if($flag_update == 0){
289
  $mo2f_malware_db_handler->insert_hash($source_file_path,$hash_of_file);
 
 
 
 
 
290
  }
291
  }
292
 
@@ -299,7 +311,7 @@ class Mo_wpns_Scan_Handler{
299
  }
300
  }
301
 
302
-
303
  return $scanresults;
304
  }else{
305
  return array('message'=>'CURL not installed on the server.');
@@ -321,6 +333,11 @@ class Mo_wpns_Scan_Handler{
321
  } else {
322
  $issues=array('exist'=>'Unwanted File Found');
323
  }
 
 
 
 
 
324
  return $issues;
325
  }
326
 
9
  }
10
  function mo2f_scan_all_files($scan_config){
11
  update_option('mo_wpns_malware_scan_in_progress','IN PROGRESS');
12
+ update_option('mo_wpns_files_scanned',0);
13
+ update_option('mo_wpns_infected_files',0);
14
  ini_set('memory_limit', '-1');
15
  ini_set('max_execution_time', 0);
16
  $result = array();
32
  $folderpaths['themes'] = $base.DIRECTORY_SEPARATOR."wp-content".DIRECTORY_SEPARATOR."themes";
33
  $folderNames .= "Themes;";
34
  }
35
+ if($scan_config['check_repo'] == 1){
36
+ $folderNames .= "WP Repo Files;";
37
+ }
38
+ $mo2f_malware_db_handler = new MoWpnsDB();
39
+ $reportid = $mo2f_malware_db_handler->create_scan_report($folderNames, $scan_config['type_scan']);
40
  if ( ! function_exists( 'get_plugins' ) ) {
41
  require_once ABSPATH . 'wp-admin/includes/plugin.php';
42
  }
50
  if($scan_config['core_scan'] == 1){
51
  require(ABSPATH . 'wp-includes/version.php');
52
  //wordpress name to be changed to be changed based on version
 
53
  $zip_name="wp-".$wp_version;
54
  $wp_repo_file['base']=$repo_file_path.DIRECTORY_SEPARATOR.$zip_name;
55
  update_option('downloaded_wordpress_repo_name', $zip_name);
84
  $this->iterator_plugins_themes($all_themes, $wp_theme_repo_file, 'themes');
85
  }
86
  }
 
 
87
  $result = $this->get_scan_result($folderpaths, $wp_repo_file, $scan_config);
88
  if($result){
89
  foreach ($result as $key => $value) {
235
  }
236
  }
237
  $this->nooffiles++;
238
+ if($this->nooffiles - get_option('mo_wpns_files_scanned') > 100){
239
+ update_option('mo_wpns_files_scanned', $this->nooffiles);
240
+ }
241
  $file_content=file_get_contents($source_file_path);
242
  if($scan_config['check_repo'] == 1){
243
  $repo_path=$base.DIRECTORY_SEPARATOR."wp-content".DIRECTORY_SEPARATOR."uploads".DIRECTORY_SEPARATOR."miniorange";
294
  }
295
  if($flag_update == 0){
296
  $mo2f_malware_db_handler->insert_hash($source_file_path,$hash_of_file);
297
+ }else{
298
+ $flag_update=0;
299
+ $infected_files=get_option('mo_wpns_infected_files');
300
+ $infected_files++;
301
+ update_option('mo_wpns_infected_files', $infected_files);
302
  }
303
  }
304
 
311
  }
312
  }
313
 
314
+ update_option('mo_wpns_files_scanned', $this->nooffiles);
315
  return $scanresults;
316
  }else{
317
  return array('message'=>'CURL not installed on the server.');
333
  } else {
334
  $issues=array('exist'=>'Unwanted File Found');
335
  }
336
+ if(!empty($issues)){
337
+ $infected_files=get_option('mo_wpns_infected_files');
338
+ $infected_files++;
339
+ update_option('mo_wpns_infected_files', $infected_files);
340
+ }
341
  return $issues;
342
  }
343
 
handler/two_fa_pass2login.php CHANGED
@@ -1067,6 +1067,7 @@ class Miniorange_Password_2Factor_Login {
1067
  return $user;
1068
  }
1069
 
 
1070
 
1071
  // if an app password is enabled, this is an XMLRPC / APP login ?
1072
  if ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) {
1067
  return $user;
1068
  }
1069
 
1070
+
1071
 
1072
  // if an app password is enabled, this is an XMLRPC / APP login ?
1073
  if ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) {
handler/two_fa_settings.php CHANGED
@@ -46,7 +46,7 @@ class Miniorange_Authentication {
46
  ), 10, 5 );
47
  add_filter( 'mo2f_gauth_service', array( $mo2f_rba_attributes, 'mo2f_google_auth_service' ), 10, 1 );
48
 
49
-
50
  if ( get_option( 'mo2f_login_option' ) ) { //password + 2nd factor enabled
51
  if ( get_option( 'mo_2factor_admin_registration_status' ) == 'MO_2_FACTOR_CUSTOMER_REGISTERED_SUCCESS' ) {
52
 
46
  ), 10, 5 );
47
  add_filter( 'mo2f_gauth_service', array( $mo2f_rba_attributes, 'mo2f_google_auth_service' ), 10, 1 );
48
 
49
+
50
  if ( get_option( 'mo2f_login_option' ) ) { //password + 2nd factor enabled
51
  if ( get_option( 'mo_2factor_admin_registration_status' ) == 'MO_2_FACTOR_CUSTOMER_REGISTERED_SUCCESS' ) {
52
 
includes/css/button_styles.css.orig ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .mo_wpns_switch {
2
+ position: relative;
3
+ display: inline-block;
4
+ width: 60px;
5
+ height: 34px;
6
+ }
7
+
8
+ .mo_wpns_switch input {
9
+ opacity: 0;
10
+ width: 0;
11
+ height: 0;
12
+ }
13
+
14
+ .mo_wpns_slider {
15
+ position: absolute;
16
+ cursor: pointer;
17
+ top: 0;
18
+ left: 0;
19
+ right: 0;
20
+ bottom: 0;
21
+ background-color: #ccc;
22
+ -webkit-transition: .4s;
23
+ transition: .4s;
24
+ }
25
+
26
+ .mo_wpns_slider:before {
27
+ position: absolute;
28
+ content: "";
29
+ height: 26px;
30
+ width: 26px;
31
+ left: 4px;
32
+ bottom: 4px;
33
+ background-color: white;
34
+ -webkit-transition: .4s;
35
+ transition: .4s;
36
+ }
37
+
38
+ input:checked + .mo_wpns_slider {
39
+ background-color: #20b2aa;
40
+ }
41
+
42
+ input:focus + .mo_wpns_slider {
43
+ box-shadow: 0 0 1px #20b2aa;
44
+ }
45
+
46
+ input:checked + .mo_wpns_slider:before {
47
+ -webkit-transform: translateX(26px);
48
+ -ms-transform: translateX(26px);
49
+ transform: translateX(26px);
50
+ }
51
+
52
+ /* Rounded sliders */
53
+ .mo_wpns_slider.mo_wpns_round {
54
+ border-radius: 34px;
55
+ }
56
+
57
+ .mo_wpns_slider.mo_wpns_round:before {
58
+ border-radius: 50%;
59
+ }
60
+ .mo_wpns_switch_small {
61
+ position: relative;
62
+ display: inline-block;
63
+ width: 44px;
64
+ height: 24px;
65
+ }
66
+ .mo_wpns_switch_small input {
67
+ opacity: 0;
68
+ width: 0;
69
+ height: 0;
70
+ }
71
+ .mo_wpns_slider_small {
72
+ position: absolute;
73
+ cursor: pointer;
74
+ top: 0;
75
+ left: 0;
76
+ right: 0;
77
+ bottom: 0;
78
+ background-color: #ccc;
79
+ -webkit-transition: .4s;
80
+ transition: .4s;
81
+ }
82
+ .mo_wpns_slider_small:before {
83
+ position: absolute;
84
+ content: "";
85
+ height: 18px;
86
+ width: 18px;
87
+ left: 3px;
88
+ bottom: 3px;
89
+ background-color: white;
90
+ -webkit-transition: .4s;
91
+ transition: .4s;
92
+ }
93
+ input:checked + .mo_wpns_slider_small {
94
+ background-color: #20b2aa;
95
+ }
96
+ input:focus + .mo_wpns_slider_small {
97
+ box-shadow: 0 0 1px #20b2aa;
98
+ }
99
+
100
+ input:checked + .mo_wpns_slider_small:before {
101
+ -webkit-transform: translateX(17px);
102
+ -ms-transform: translateX(17px);
103
+ transform: translateX(17px);
104
+ }
105
+ .mo_wpns_slider_small.mo_wpns_round_small {
106
+ border-radius: 24px;
107
+ }
108
+
109
+ .mo_wpns_slider_small.mo_wpns_round_small:before {
110
+ border-radius: 50%;
111
+ }
includes/css/twofa_style_settings.css.orig ADDED
@@ -0,0 +1,976 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .mo2f_modal-open {
2
+ overflow: hidden !important;
3
+ position: fixed !important;
4
+ width: 100% !important;
5
+
6
+ }
7
+
8
+ .mo2f_modal {
9
+ position: fixed !important;
10
+ top: 0;
11
+ right: 0;
12
+ bottom: 0;
13
+ left: 0;
14
+ z-index: 100000 !important;
15
+
16
+ overflow: hidden !important;
17
+ -webkit-overflow-scrolling: touch;
18
+ outline: 0;
19
+
20
+ }
21
+
22
+ .mo2f_modal_inner {
23
+ display: none;
24
+ }
25
+
26
+ .mo2f_modal.fade .mo2f_modal-dialog {
27
+ -webkit-transition: -webkit-transform .3s ease-out;
28
+ -o-transition: -o-transform .3s ease-out;
29
+ transition: transform .3s ease-out;
30
+ -webkit-transform: translate(0, -25%);
31
+ -ms-transform: translate(0, -25%);
32
+ -o-transform: translate(0, -25%);
33
+ transform: translate(0, -25%)
34
+ }
35
+
36
+ .mo2f_modal.in .mo2f_modal-dialog {
37
+ -webkit-transform: translate(0, 80px) !important;
38
+ -ms-transform: translate(0, 80px) !important;
39
+ -o-transform: translate(0, 80px) !important;
40
+ transform: translate(0, 80px) !important;
41
+
42
+ }
43
+
44
+ .mo2f_modal-open .mo2f_modal {
45
+ overflow-x: hidden;
46
+ overflow-y: hidden;
47
+ }
48
+
49
+ .mo2f_modal-dialog {
50
+ position: relative;
51
+ width: auto;
52
+ margin: 10px;
53
+
54
+ }
55
+
56
+ .login mo_customer_validation-modal-content {
57
+ position: relative !important;
58
+ background-color: #fff !important;
59
+ -webkit-background-clip: padding-box !important;
60
+ background-clip: padding-box !important;
61
+ border: 1px solid #999 !important;
62
+ border: 1px solid rgba(0, 0, 0, .2) !important;
63
+ border-radius: 6px !important;
64
+ outline: 0 !important;
65
+
66
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5) !important;
67
+ box-shadow: 0 3px 9px rgba(0, 0, 0, .5) !important;
68
+ }
69
+
70
+ .mo2f-modal-backdrop {
71
+ position: absolute;
72
+ top: 0;
73
+ right: 0;
74
+ left: 0;
75
+ background-color: #f1f1f1 !important;
76
+ filter: alpha(opacity=50) !important;
77
+ opacity: 0.8 !important;
78
+ height: 100% !important;
79
+ }
80
+
81
+ #smsAlertModal {
82
+ background-color: black !important;
83
+ opacity: 0.8 !important;
84
+ font-family: Roboto;
85
+ }
86
+
87
+ #twoFAtestAlertModal {
88
+ background-color: black !important;
89
+ opacity: 0.8 !important;
90
+ filter: alpha(opacity=50) !important;
91
+ }
92
+
93
+ .mo2f_modal-header {
94
+ min-height: 14px;
95
+ padding: 10px;
96
+ border-bottom: 1px solid #e5e5e5
97
+ }
98
+
99
+ .mo2f_modal-title {
100
+ margin: 0 !important;
101
+ line-height: 1.0 !important;
102
+ font-size: 1rem;
103
+ }
104
+
105
+ .mo2f_modal-body {
106
+ / / width: 96 % !important;
107
+ position: relative !important;
108
+ padding: 15px !important;
109
+ overflow-y: auto !important;
110
+ max-height: 550px !important;
111
+ }
112
+
113
+ .mo2f_modal-footer {
114
+ padding: 15px;
115
+ text-align: right;
116
+ border-top: 1px solid #e5e5e5
117
+ }
118
+
119
+ .mo2f_modal-footer .btn + .btn {
120
+ margin-bottom: 0;
121
+ margin-left: 5px
122
+ }
123
+
124
+ .mo2f_modal-footer .btn-group .btn + .btn {
125
+ margin-left: -1px
126
+ }
127
+
128
+ .mo2f_modal-footer .btn-block + .btn-block {
129
+ margin-left: 0
130
+ }
131
+
132
+ .mo2f_modal-scrollbar-measure {
133
+ position: absolute;
134
+ top: -9999px;
135
+ width: 50px;
136
+ height: 50px;
137
+ overflow: scroll
138
+ }
139
+
140
+ .mo2f_close {
141
+ float: right;
142
+ font-size: 21px;
143
+ font-weight: 700;
144
+ line-height: 1;
145
+ color: #000;
146
+ text-shadow: 0 1px 0 #fff;
147
+ filter: alpha(opacity=20);
148
+ opacity: .2
149
+ }
150
+
151
+ .mo2f_close:hover, .mo2f_close:focus {
152
+ color: #000;
153
+ text-decoration: none;
154
+ cursor: pointer;
155
+ filter: alpha(opacity=50);
156
+ opacity: .5
157
+ }
158
+
159
+ button.mo2f_close {
160
+ -webkit-appearance: none;
161
+ padding: 0;
162
+ cursor: pointer;
163
+ background: 0 0;
164
+ border: 0
165
+ }
166
+
167
+ @media ( min-width: 768px) {
168
+ .mo2f_modal-dialog {
169
+ width: 373px;
170
+ margin: 0px auto
171
+ }
172
+
173
+ .login mo_customer_validation-modal-content {
174
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
175
+ box-shadow: 0 5px 15px rgba(0, 0, 0, .5)
176
+ }
177
+
178
+ .mo2f_modal-sm {
179
+ width: 300px
180
+ }
181
+
182
+ .mo2f_modal-md {
183
+ width: 550px
184
+ }
185
+ }
186
+
187
+ @media ( min-width: 992px) {
188
+ .mo2f_modal-lg {
189
+ width: 900px;
190
+ }
191
+
192
+ .mo2f_modal-md {
193
+ width: 550px
194
+ }
195
+ }
196
+
197
+
198
+ @media ( min-width: 768px) {
199
+ .mo2f_modal-dialog {
200
+ width: 373px;
201
+ margin: 0px auto
202
+ }
203
+
204
+ .login mo_customer_validation-modal-content {
205
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
206
+ box-shadow: 0 5px 15px rgba(0, 0, 0, .5)
207
+ }
208
+
209
+ .mo2f_modal-sm {
210
+ width: 300px
211
+ }
212
+
213
+ .mo2f_modal-md {
214
+ width: 550px
215
+ }
216
+ }
217
+
218
+ @media ( min-width: 992px) {
219
+ .mo2f_modal-lg {
220
+ width: 900px;
221
+ }
222
+
223
+ .mo2f_modal-md {
224
+ width: 550px
225
+ }
226
+ }
227
+
228
+ .center{
229
+
230
+ text-align: center !important;
231
+ }
232
+
233
+ #otpMessage {
234
+ border-radius: 1px;
235
+ padding: 1px 5px;
236
+ background: #f1f1f1;
237
+ }
238
+
239
+ .mo2f_carousel-indicators {
240
+ position: absolute;
241
+ bottom: -20px;
242
+ z-index: 15;
243
+ width: 60%;
244
+ list-style: none;
245
+ text-align: center;
246
+ }
247
+
248
+ .miniorange_kba_validate:hover, .miniorange_validate_otp:hover, .miniorange_login_forgotphone:hover,
249
+ .miniorange_login_offline:hover, .miniorange_login_forgotphone:hover, .miniorange_otp_token_submit:hover {
250
+ background-color: #0073AA !important
251
+ }
252
+
253
+ .miniorange_kba_validate, .miniorange_validate_otp, .miniorange_login_forgotphone,
254
+ .miniorange_login_offline, .miniorange_login_forgotphone, .miniorange_otp_token_submit {
255
+ background: #00A0D2 !important;
256
+ border-color: #0073AA !important;
257
+ box-shadow: 0 1px 0 rgba(120, 200, 230, .5) inset, 0 1px 0 rgba(0, 0, 0, .15) !important;
258
+ color: #FFF !important;
259
+ text-decoration: none !important;
260
+ cursor: pointer !important;
261
+ border-width: 1px !important;
262
+ border-style: solid !important;
263
+ border-radius: 3px !important;
264
+ white-space: nowrap !important;
265
+ box-sizing: border-box !important;
266
+ line-height: 28px !important;
267
+ padding: 0 12px !important;
268
+ font-size: 13px !important
269
+ }
270
+
271
+ .mo_customer_validation-modal.fade .mo_customer_validation-modal-dialog {
272
+ -webkit-transition: -webkit-transform .3s ease-out;
273
+ -o-transition: -o-transform .3s ease-out;
274
+ transition: transform .3s ease-out;
275
+ -webkit-transform: translate(0, -25%);
276
+ -ms-transform: translate(0, -25%);
277
+ -o-transform: translate(0, -25%);
278
+ transform: translate(0, -25%)
279
+ }
280
+
281
+ .mo_customer_validation-modal.in .mo_customer_validation-modal-dialog {
282
+ -webkit-transform: translate(0, 80px) !important;
283
+ -ms-transform: translate(0, 80px) !important;
284
+ -o-transform: translate(0, 80px) !important;
285
+ transform: translate(0, 80px) !important
286
+ }
287
+
288
+ .mo_customer_validation-modal-open .mo_customer_validation-modal {
289
+ overflow-x: hidden;
290
+ overflow-y: hidden
291
+ }
292
+
293
+ .mo_customer_validation-modal-dialog {
294
+ position: relative;
295
+ width: auto;
296
+ margin: 10px
297
+ }
298
+
299
+ .mo_customer_validation-modal-content {
300
+ position: relative;
301
+ -webkit-background-clip: padding-box;
302
+ border: 1px solid #999;
303
+ border: 1px solid rgba(0, 0, 0, .2);
304
+ outline: 0;
305
+ margin-top: 8%;
306
+ margin-left: 0;
307
+ padding: 15px 20px 0;
308
+ font-family: "Open Sans", sans-serif;
309
+ color: #777;
310
+ font-size: 14px;
311
+ line-height: 1.4em;
312
+ background: #FFF;
313
+ box-shadow: 0 1px 3px rgba(0, 0, 0, .13)
314
+ }
315
+
316
+ .mo_customer_validation-modal-backdrop {
317
+ position: absolute;
318
+ top: 0;
319
+ right: 0;
320
+ left: 0;
321
+ background-color: #000 !important;
322
+ filter: alpha(opacity=50) !important;
323
+ opacity: .9 !important;
324
+ height: 100% !important
325
+ }
326
+
327
+ .mo_customer_validation-modal-header {
328
+ min-height: 14px;
329
+ padding: 10px 10px 20px;
330
+ border-bottom: 1px solid #e5e5e5
331
+ }
332
+
333
+ .mo_customer_validation-modal-title {
334
+ margin: 0 !important;
335
+ line-height: 1 !important
336
+ }
337
+
338
+ .mo_customer_validation-modal-body {
339
+ position: relative;
340
+ padding: 5%;
341
+ overflow: hidden !important;
342
+ max-height: 550px !important
343
+ }
344
+
345
+ .mo_customer_validation-modal-footer {
346
+ padding: 15px;
347
+ text-align: right;
348
+ border-top: 1px solid #e5e5e5
349
+ }
350
+
351
+ .mo_customer_validation-modal-footer .btn + .btn {
352
+ margin-bottom: 0;
353
+ margin-left: 5px
354
+ }
355
+
356
+ .mo_customer_validation-modal-footer .btn-group .btn + .btn {
357
+ margin-left: -1px
358
+ }
359
+
360
+ .mo_customer_validation-modal-footer .btn-block + .btn-block {
361
+ margin-left: 0
362
+ }
363
+
364
+ .mo_customer_validation-modal-scrollbar-measure {
365
+ position: absolute;
366
+ top: -9999px;
367
+ width: 50px;
368
+ height: 50px;
369
+ overflow: scroll
370
+ }
371
+
372
+ @media (min-width: 768px) {
373
+ .mo_customer_validation-modal-dialog {
374
+ width: auto;
375
+ margin: 0 auto
376
+ }
377
+
378
+ .mo_customer_validation-modal-content {
379
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
380
+ box-shadow: 0 5px 15px rgba(0, 0, 0, .5)
381
+ }
382
+
383
+ .mo_customer_validation-modal-sm {
384
+ width: 300px
385
+ }
386
+
387
+ .mo_customer_validation-modal-md {
388
+ width: 532px
389
+ }
390
+
391
+ .mo_customer_validation-modal-lg {
392
+ width: 50%
393
+ }
394
+ }
395
+
396
+ @media (min-width: 992px) {
397
+ .mo_customer_validation-modal-dialog {
398
+ width: auto;
399
+ margin: 0 auto
400
+ }
401
+
402
+ .mo_customer_validation-modal-lg {
403
+ width: 490px
404
+ }
405
+
406
+ .mo_customer_validation-modal-md {
407
+ width: 532px
408
+ }
409
+ }
410
+
411
+ .mo_customer_validation-textbox {
412
+ background: #FBFBFB;
413
+ font-family: "Open Sans", sans-serif;
414
+ font-size: 24px;
415
+ width: 100%;
416
+ border: 1px solid #DDD;
417
+ padding: 3px;
418
+ margin: 2px 6px 16px 0
419
+ }
420
+
421
+ .mo_customer_validation-textbox:focus {
422
+ border-color: #5B9DD9;
423
+ box-shadow: 0 0 2px rgba(30, 140, 190, .8)
424
+
425
+ }
426
+
427
+
428
+
429
+ /*Hode login*/
430
+
431
+ body.login-action-login div#login {
432
+ display: none;
433
+ }
434
+
435
+ body.login-action-login div#login form#loginform input#user_login {
436
+ display: none;
437
+ }
438
+
439
+ body.login-action-login div#login form#loginform p.forgetmenot {
440
+ display: none;
441
+ }
442
+
443
+ body.login-action-login div#login form#loginform p.submit input#wp-submit {
444
+ display: none;
445
+ }
446
+
447
+ body.login-action-login div#login form#loginform p label {
448
+ display: none;
449
+ }
450
+
451
+ body.login-action-login div#login p#nav {
452
+ display: none;
453
+ }
454
+
455
+ body.login-action-login div#login form#loginform input#user_pass {
456
+ display: none;
457
+ }
458
+
459
+ body.login-action-login div#login div#login_error {
460
+ display: none;
461
+ }
462
+
463
+ body.login-action-login p.message {
464
+ display: none;
465
+ }
466
+
467
+ body.login-action-login div#login #loginform {
468
+ box-shadow: inherit;
469
+ }
470
+
471
+ body.login-action-login div#login div#login_error1 {
472
+ border-left: 4px solid #dd3d36;
473
+ margin-left: 0;
474
+ padding: 12px;
475
+ background: #fff;
476
+ -webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
477
+ box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
478
+ }
479
+
480
+ .mo2f_header {
481
+ font-size: 28px;
482
+ font-family: -webkit-body;
483
+ color: #777;
484
+ }
485
+
486
+ .mo2f_powered_by_miniorange {
487
+ width: 100px;
488
+ height: 25px;
489
+ -webkit-background-size: 100px 25px;
490
+ background-size: 100px 25px;
491
+ background-repeat: no-repeat;
492
+ display: inline-block;
493
+ vertical-align: middle;
494
+ }
495
+
496
+ .mo2f_powered_by_div {
497
+ text-align: right;
498
+ font-size: 9px;
499
+ padding-right: 2%;
500
+ background-color: #FFFFFF;
501
+ }
502
+
503
+ .button-green {
504
+ color: rgb(0, 160, 210);
505
+ background: none !important;
506
+ border: none;
507
+ padding: 0 !important;
508
+ font: inherit;
509
+ border-color: transparent !important;
510
+ /*border is optional*/
511
+ border-bottom: 1px solid #444;
512
+ cursor: pointer;
513
+ }
514
+
515
+ .mo2fa_display_message {
516
+ padding: 12px;
517
+ border-left: 4px solid #00a0d2;
518
+ background-color: #fff;
519
+ -webkit-box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);
520
+ box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .1);
521
+
522
+ }
523
+
524
+ .mo2fa_messages_container {
525
+ width: 300px;
526
+ }
527
+
528
+ .mo2fa_otp_messages_container {
529
+ width: 400px;
530
+ }
531
+
532
+ .mo2fa_push_messages_container {
533
+ width: 300px;
534
+ }
535
+
536
+ .miniorange_mobile_auth, .miniorange_app_setup_page {
537
+ border: 1px none transparent;
538
+ padding: 10% 24px 10px 20px;
539
+ min-height: 360px;
540
+ background: transparent;
541
+ z-index: 99999;
542
+ }
543
+
544
+ .mo2f-textbox {
545
+ width: 160px;
546
+ margin: 15px 0px !important;
547
+ background-color: rgba(123, 110, 110, 0.06) !important;
548
+ border-radius: 4px !important;
549
+ padding: 3px !important;
550
+ }
551
+
552
+ .miniorange_kba_page {
553
+ border: 1px none transparent;
554
+ padding: 10% 24px 10px 20px;
555
+ min-height: 360px;
556
+ background: transparent;
557
+ z-index: 99999;
558
+
559
+ }
560
+
561
+ .miniorange_push_oobemail_auth, .miniorange_trust_device {
562
+ border: 1px none transparent;
563
+ padding: 10% 24px 10px 20px;
564
+ min-height: 360px;
565
+ background: transparent;
566
+ z-index: 99999;
567
+ }
568
+
569
+ .miniorange_soft_auth {
570
+ border: 1px none transparent;
571
+ padding: 10% 24px 10px 20px;
572
+ min-height: 360px;
573
+ background: transparent;
574
+ z-index: 99999;
575
+ }
576
+
577
+ .miniorange-inner-login-container {
578
+ background-color: #fff;
579
+ margin: 0px auto !important;
580
+ width: 400px;
581
+ border-radius: 5px;
582
+ border: 1px solid rgba(128, 128, 128, 0.06);
583
+ }
584
+
585
+ .miniorange-inner-kba-login-container {
586
+ background-color: #fff;
587
+ margin: 0px auto !important;
588
+ width: 500px;
589
+ border-radius: 5px;
590
+ z-index: 99999;
591
+ border: 1px solid rgba(128, 128, 128, 0.06);
592
+ }
593
+
594
+ .miniorange-inner-push-login-container {
595
+ background-color: #fff;
596
+ margin: 0px auto !important;
597
+ width: 300px;
598
+ border-radius: 5px;
599
+
600
+ z-index: 99999;
601
+ border: 1px solid rgba(128, 128, 128, 0.06);
602
+ }
603
+
604
+ .miniorange-button {
605
+ height: 30px;
606
+ display: inline-block;
607
+ font-size: 14px;
608
+ line-height: 28px;
609
+ padding: 0 12px 2px;
610
+ border-width: 1px;
611
+ vertical-align: baseline;
612
+ background: #00a0d2;
613
+ border-style: solid;
614
+ border-color: #0073aa;
615
+ -webkit-appearance: none;
616
+ -webkit-border-radius: 3px;
617
+ border-radius: 3px;
618
+ white-space: nowrap;
619
+ -webkit-box-sizing: border-box;
620
+ -moz-box-sizing: border-box;
621
+ box-sizing: border-box;
622
+ -webkit-box-shadow: inset 0 1px 0 rgba(120, 200, 230, .5), 0 1px 0 rgba(0, 0, 0, .15);
623
+ box-shadow: inset 0 1px 0 rgba(120, 200, 230, .5), 0 1px 0 rgba(0, 0, 0, .15);
624
+ color: #fff;
625
+ text-decoration: none;
626
+ cursor: pointer;
627
+ }
628
+
629
+ .mo_green {
630
+ background: #2ECC71;
631
+ border-color: #2ECC71;
632
+ width: 37%;
633
+ }
634
+
635
+ .mo_red {
636
+ background: #E74C3C;
637
+ border-color: #E74C3C;
638
+ width: 37%;
639
+ }
640
+
641
+ .showQRHelp, .showOTPHelp {
642
+ text-align: center !important;
643
+ }
644
+
645
+ .mo_email_textbox {
646
+ width: 48%;
647
+ text-align: center;
648
+ height: 40px;
649
+ font-size: 18px;
650
+ border-radius: 5px;
651
+ }
652
+
653
+ .mo_header_background {
654
+ padding: 5px !important;
655
+ background-color: beige !important;
656
+ }
657
+
658
+ .mo2f_textbox {
659
+ width: 60% !important;
660
+ border-radius: 4px !important;
661
+ height: 30px !important;
662
+ font-size: 14px !important;
663
+ }
664
+
665
+ .mo2f_kba_textbox {
666
+ width: 100% !important;
667
+ border-radius: 4px !important;
668
+ height: 30px !important;
669
+ font-size: 14px !important;
670
+ }
671
+
672
+ .mo_hr {
673
+ border-top: 1px solid rgba(220, 214, 214, 0.25) !important;
674
+ margin-top: 5px !important;
675
+ margin-right: 10px !important;
676
+ }
677
+
678
+ .mo_margin_left {
679
+ margin-left: 20px !important;
680
+ }
681
+
682
+ .miniorange-app-setup-container {
683
+ background-color: #fff;
684
+ margin: 0px auto !important;
685
+ width: 700px;
686
+ border-radius: 5px;
687
+ margin-top: -100px !important;
688
+ z-index: 99999;
689
+ border: 1px solid rgba(128, 128, 128, 0.06);
690
+
691
+ }
692
+
693
+ .miniorange-ga-setup-container {
694
+ background-color: #fff;
695
+ margin: 0px auto !important;
696
+ width: 900px;
697
+ border-radius: 5px;
698
+ margin-top: -50px !important;
699
+ z-index: 99999;
700
+ border: 1px solid rgba(128, 128, 128, 0.06);
701
+ }
702
+
703
+ .mo_app_link {
704
+ text-decoration: none !important;
705
+ color: #000 !important;
706
+ }
707
+
708
+ .mo2fa_app_setup_messages {
709
+ width: 700px;
710
+ }
711
+
712
+ .mo2f_td_show {
713
+ display: grid !important;
714
+ }
715
+
716
+ .mo2f_td_hide {
717
+ display: none !important;
718
+ }
719
+
720
+ .mo2f_kba_ques {
721
+ width: 370px !important;
722
+ border-radius: 4px !important;
723
+ height: 30px !important;
724
+ font-size: 14px !important;
725
+ }
726
+
727
+ .mo2f_kba_table {
728
+ padding: 0 10px;
729
+ width: 100%;
730
+ }
731
+
732
+ .mo2f_kba_tb_data {
733
+ padding-left: 15px;
734
+ }
735
+
736
+ .mo2f_table_textbox {
737
+ width: 150px;
738
+ height: 30px !important;
739
+ font-size: 14px !important;
740
+
741
+ }
742
+
743
+ .mo2f_kba_header {
744
+ font-weight: bold;
745
+ }
746
+
747
+ .mo2f_separator {
748
+ border-left: 1px solid #EBECEC;
749
+ padding: 5px;
750
+ }
751
+
752
+ .mo2f_inline_padding {
753
+ padding-left: 20px;
754
+ padding-right: 20px;
755
+ }
756
+
757
+
758
+
759
+
760
+
761
+
762
+
763
+ .mo2f_powered_by_miniorange {
764
+ width: 100px;
765
+ height: 30px;
766
+ -webkit-background-size: 100px 25px;
767
+ background-size: 100px 25px;
768
+ background-repeat: no-repeat;
769
+ display: inline-block;
770
+ vertical-align: middle;
771
+ }
772
+
773
+ .mo2f_powered_by_div {
774
+ text-align: right;
775
+ font-size: 9px;
776
+ padding-right: 5px;
777
+ background-color: #FFFFFF;
778
+ width: 92%;
779
+ border-radius: 6px;
780
+ }
781
+
782
+ .mo2f-login-container {
783
+ display: inline-block !important;
784
+ display: -moz-inline-stack !important;
785
+ text-align: center !important;
786
+ width: 100%;
787
+
788
+ }
789
+
790
+ .mo2f-button {
791
+ width: 100% !important;
792
+ color: #fff !important;
793
+ line-height: normal;
794
+ height: 30px !important;
795
+ margin: 0px !important;
796
+ font-size: 14px !important;
797
+ padding: 7px !important;
798
+ background-color: #f0ad4e !important;
799
+ border-color: #eea236 !important;
800
+ -webkit-appearance: none;
801
+ -webkit-border-radius: 3px !important;
802
+ border-radius: 3px !important;
803
+
804
+ }
805
+
806
+ .mo2fa_display_message_login {
807
+ text-align: left !important;
808
+ font-size: 13px !important;
809
+ }
810
+
811
+ .mo2f-link {
812
+ color: #0191BF !important;
813
+ font-size: 14px !important;
814
+ font-weight: bold !important;
815
+ cursor: pointer !important;
816
+ }
817
+
818
+ .mo_green {
819
+ background: #2ECC71 !important;
820
+ border-color: #2ECC71 !important;
821
+ width: 26% !important;
822
+ border-width: 1px;
823
+ vertical-align: middle !important;
824
+ border-radius: 3px !important;
825
+ color: white;
826
+ height: 30px;
827
+ cursor: pointer;
828
+ }
829
+
830
+ .mo_red {
831
+ background: #E74C3C !important;
832
+ border-color: #E74C3C !important;
833
+ width: 26% !important;
834
+ border-width: 1px;
835
+ vertical-align: middle !important;
836
+ border-radius: 3px !important;
837
+ color: white;
838
+ height: 30px;
839
+ cursor: pointer;
840
+ }
841
+
842
+ .mo_otp_token {
843
+ font-size: 15px;
844
+ color: #212F3C;
845
+ border: none;
846
+ display: block;
847
+ border-bottom-style: solid;
848
+ border-width: 2px;
849
+ border-color: #D0D3D4;
850
+ border-radius: 0px;
851
+ outline: none;
852
+ width: 140px;
853
+ text-align: center;
854
+ }
855
+
856
+ .showQRHelp, .showOTPHelp {
857
+ text-align: center !important;
858
+
859
+ }
860
+
861
+ .mo2f_device {
862
+ padding-left: 200px !important;
863
+ vertical-align: -webkit-baseline-middle !important;
864
+ line-height: 3 !important;
865
+ }
866
+
867
+ .miniorange-button {
868
+ height: 30px;
869
+ font-size: 14px !important;
870
+ line-height: 5px !important;
871
+ padding: 16px !important;
872
+ border-width: 1px;
873
+ vertical-align: middle !important;
874
+ background-color: #f0ad4e !important;
875
+ border-color: #eea236 !important;
876
+ -webkit-appearance: none;
877
+ border-style: solid;
878
+ -webkit-border-radius: 3px !important;
879
+ border-radius: 3px !important;
880
+ white-space: nowrap;
881
+ -webkit-box-sizing: border-box;
882
+ -moz-box-sizing: border-box;
883
+ box-sizing: border-box;
884
+ color: #fff;
885
+ text-decoration: none;
886
+ cursor: pointer;
887
+ }
888
+
889
+ .mo_hr {
890
+ border-top: 1px solid rgba(220, 214, 214, 0.25) !important;
891
+ margin-top: 5px !important;
892
+ margin-right: 10px !important;
893
+ }
894
+
895
+ .mo_margin_left {
896
+ margin-left: 20px !important;
897
+ }
898
+
899
+ .mo_app_link {
900
+ text-decoration: none !important;
901
+ color: #000 !important;
902
+ }
903
+
904
+ .mo2f_td_show {
905
+ display: grid !important;
906
+ }
907
+
908
+ .mo2f_td_hide {
909
+ display: none !important;
910
+ }
911
+
912
+ .mo2f_label {
913
+ font-weight: 100 !important;
914
+ margin-left: 10px !important;
915
+
916
+ }
917
+
918
+ .mo2f_kba_ques {
919
+ width: 394px !important;
920
+ border-radius: 4px !important;
921
+ height: 40px !important;
922
+ font-size: 14px !important;
923
+ }
924
+
925
+ .mo2f_kba_table {
926
+ padding: 0 10px;
927
+ width: 100%;
928
+ border: hidden !important;
929
+ }
930
+
931
+ .mo2f_kba_tb_data {
932
+ padding-left: 15px;
933
+ }
934
+
935
+ .mo2f_table_textbox_1 {
936
+ width: 150px;
937
+ height: 30px !important;
938
+ font-size: 14px !important;
939
+ }
940
+
941
+ .mo2f_table_textbox {
942
+ width: 200px;
943
+ height: 40px !important;
944
+ font-size: 14px !important;
945
+
946
+ }
947
+
948
+ .mo2f_kba_header {
949
+ font-weight: bold;
950
+ border: hidden !important;
951
+ }
952
+
953
+ .mo2f_kba_body {
954
+ border: hidden !important;
955
+ }
956
+
957
+ .mo2f_separator {
958
+ border-left: 1px solid #EBECEC;
959
+ padding: 5px;
960
+ }
961
+
962
+ .mo2f_authn_header {
963
+ font-size: 14px !important;
964
+ }
965
+
966
+ #mo2f_inline_table {
967
+ border: hidden !important;
968
+ }
969
+
970
+ .mo2f_ordered_list {
971
+ margin: 0 0 0 1em !important;
972
+ }
973
+
974
+ .mo2f_list {
975
+ font-size: 14px !important;
976
+ }
includes/images/normal.PNG ADDED
Binary file
includes/images/normal.png DELETED
Binary file
includes/jquery-qrcode/README.md.orig ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # jQuery.qrcode
2
+
3
+ [![license][license-img]][github] [![web][web-img]][web] [![github][github-img]][github] [![bower][bower-img]][github]
4
+
5
+ jQuery plugin to dynamically generate QR codes. Uses [QR Code Generator][qrcode] (MIT).
6
+
7
+
8
+ ## License
9
+ The MIT License (MIT)
10
+
11
+ Copyright (c) 2016 Lars Jung (https://larsjung.de)
12
+
13
+ Permission is hereby granted, free of charge, to any person obtaining a copy
14
+ of this software and agauthciated documentation files (the "Software"), to deal
15
+ in the Software without restriction, including without limitation the rights
16
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
+ copies of the Software, and to permit persons to whom the Software is
18
+ furnished to do so, subject to the following conditions:
19
+
20
+ The above copyright notice and this permission notice shall be included in
21
+ all copies or substantial portions of the Software.
22
+
23
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
29
+ THE SOFTWARE.
30
+
31
+
32
+ [web]: https://larsjung.de/qrcode/
33
+ [github]: https://github.com/lrsjng/jquery-qrcode
34
+
35
+ [license-img]: https://img.shields.io/badge/license-MIT-a0a060.svg?style=flat-square
36
+ [web-img]: https://img.shields.io/badge/web-larsjung.de/qrcode-a0a060.svg?style=flat-square
37
+ [github-img]: https://img.shields.io/badge/github-lrsjng/jquery--qrcode-a0a060.svg?style=flat-square
38
+ [bower-img]: https://img.shields.io/badge/bower-lrsjng/jquery--qrcode-a0a060.svg?style=flat-square
39
+
40
+ [qrcode]: https://github.com/kazuhikoarase/qrcode-generator
includes/jquery-qrcode/jquery-qrcode.js.orig ADDED
@@ -0,0 +1,2332 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*! jquery-qrcode v0.14.0 - https://larsjung.de/jquery-qrcode/ */
2
+ (function (vendor_qrcode) {
3
+ 'use strict';
4
+
5
+ var jq = window.jQuery;
6
+
7
+ // Check if canvas is available in the browser (as Modernizr does)
8
+ var hasCanvas = (function () {
9
+ var elem = document.createElement('canvas');
10
+ return !!(elem.getContext && elem.getContext('2d'));
11
+ }());
12
+
13
+ // Wrapper for the original QR code generator.
14
+ function createQRCode(text, level, version, quiet) {
15
+ var qr = {};
16
+
17
+ var vqr = vendor_qrcode(version, level);
18
+ vqr.addData(text);
19
+ vqr.make();
20
+
21
+ quiet = quiet || 0;
22
+
23
+ var qrModuleCount = vqr.getModuleCount();
24
+ var quietModuleCount = vqr.getModuleCount() + 2 * quiet;
25
+
26
+ function isDark(row, col) {
27
+ row -= quiet;
28
+ col -= quiet;
29
+
30
+ if (row < 0 || row >= qrModuleCount || col < 0 || col >= qrModuleCount) {
31
+ return false;
32
+ }
33
+ return vqr.isDark(row, col);
34
+ }
35
+
36
+ function addBlank(l, t, r, b) {
37
+ var prevIsDark = qr.isDark;
38
+ var moduleSize = 1 / quietModuleCount;
39
+
40
+ qr.isDark = function (row, col) {
41
+ var ml = col * moduleSize;
42
+ var mt = row * moduleSize;
43
+ var mr = ml + moduleSize;
44
+ var mb = mt + moduleSize;
45
+
46
+ return prevIsDark(row, col) && (l > mr || ml > r || t > mb || mt > b);
47
+ };
48
+ }
49
+
50
+ qr.text = text;
51
+ qr.level = level;
52
+ qr.version = version;
53
+ qr.moduleCount = quietModuleCount;
54
+ qr.isDark = isDark;
55
+ qr.addBlank = addBlank;
56
+
57
+ return qr;
58
+ }
59
+
60
+ // Returns a minimal QR code for the given text starting with version `minVersion`.
61
+ // Returns `undefined` if `text` is too long to be encoded in `maxVersion`.
62
+ function createMinQRCode(text, level, minVersion, maxVersion, quiet) {
63
+ minVersion = Math.max(1, minVersion || 1);
64
+ maxVersion = Math.min(40, maxVersion || 40);
65
+ for (var version = minVersion; version <= maxVersion; version += 1) {
66
+ try {
67
+ return createQRCode(text, level, version, quiet);
68
+ } catch (err) {/* empty */}
69
+ }
70
+ return undefined;
71
+ }
72
+
73
+ function drawBackgroundLabel(qr, context, settings) {
74
+ var size = settings.size;
75
+ var font = 'bold ' + settings.mSize * size + 'px ' + settings.fontname;
76
+ var ctx = jq('<canvas/>')[0].getContext('2d');
77
+
78
+ ctx.font = font;
79
+
80
+ var w = ctx.measureText(settings.label).width;
81
+ var sh = settings.mSize;
82
+ var sw = w / size;
83
+ var sl = (1 - sw) * settings.mPosX;
84
+ var st = (1 - sh) * settings.mPosY;
85
+ var sr = sl + sw;
86
+ var sb = st + sh;
87
+ var pad = 0.01;
88
+
89
+ if (settings.mode === 1) {
90
+ // Strip
91
+ qr.addBlank(0, st - pad, size, sb + pad);
92
+ } else {
93
+ // Box
94
+ qr.addBlank(sl - pad, st - pad, sr + pad, sb + pad);
95
+ }
96
+
97
+ context.fillStyle = settings.fontcolor;
98
+ context.font = font;
99
+ context.fillText(settings.label, sl * size, st * size + 0.75 * settings.mSize * size);
100
+ }
101
+
102
+ function drawBackgroundImage(qr, context, settings) {
103
+ var size = settings.size;
104
+ var w = settings.image.naturalWidth || 1;
105
+ var h = settings.image.naturalHeight || 1;
106
+ var sh = settings.mSize;
107
+ var sw = sh * w / h;
108
+ var sl = (1 - sw) * settings.mPosX;
109
+ var st = (1 - sh) * settings.mPosY;
110
+ var sr = sl + sw;
111
+ var sb = st + sh;
112
+ var pad = 0.01;
113
+
114
+ if (settings.mode === 3) {
115
+ // Strip
116
+ qr.addBlank(0, st - pad, size, sb + pad);
117
+ } else {
118
+ // Box
119
+ qr.addBlank(sl - pad, st - pad, sr + pad, sb + pad);
120
+ }
121
+
122
+ context.drawImage(settings.image, sl * size, st * size, sw * size, sh * size);
123
+ }
124
+
125
+ function drawBackground(qr, context, settings) {
126
+ if (jq(settings.background).is('img')) {
127
+ context.drawImage(settings.background, 0, 0, settings.size, settings.size);
128
+ } else if (settings.background) {
129
+ context.fillStyle = settings.background;
130
+ context.fillRect(settings.left, settings.top, settings.size, settings.size);
131
+ }
132
+
133
+ var mode = settings.mode;
134
+ if (mode === 1 || mode === 2) {
135
+ drawBackgroundLabel(qr, context, settings);
136
+ } else if (mode === 3 || mode === 4) {
137
+ drawBackgroundImage(qr, context, settings);
138
+ }
139
+ }
140
+
141
+ function drawModuleDefault(qr, context, settings, left, top, width, row, col) {
142
+ if (qr.isDark(row, col)) {
143
+ context.rect(left, top, width, width);
144
+ }
145
+ }
146
+
147
+ function drawModuleRoundedDark(ctx, l, t, r, b, rad, nw, ne, se, sw) {
148
+ if (nw) {
149
+ ctx.moveTo(l + rad, t);
150
+ } else {
151
+ ctx.moveTo(l, t);
152
+ }
153
+
154
+ if (ne) {
155
+ ctx.lineTo(r - rad, t);
156
+ ctx.arcTo(r, t, r, b, rad);
157
+ } else {
158
+ ctx.lineTo(r, t);
159
+ }
160
+
161
+ if (se) {
162
+ ctx.lineTo(r, b - rad);
163
+ ctx.arcTo(r, b, l, b, rad);
164
+ } else {
165
+ ctx.lineTo(r, b);
166
+ }
167
+
168
+ if (sw) {
169
+ ctx.lineTo(l + rad, b);
170
+ ctx.arcTo(l, b, l, t, rad);
171
+ } else {
172
+ ctx.lineTo(l, b);
173
+ }
174
+
175
+ if (nw) {
176
+ ctx.lineTo(l, t + rad);
177
+ ctx.arcTo(l, t, r, t, rad);
178
+ } else {
179
+ ctx.lineTo(l, t);
180
+ }
181
+ }
182
+
183
+ function drawModuleRoundendLight(ctx, l, t, r, b, rad, nw, ne, se, sw) {
184
+ if (nw) {
185
+ ctx.moveTo(l + rad, t);
186
+ ctx.lineTo(l, t);
187
+ ctx.lineTo(l, t + rad);
188
+ ctx.arcTo(l, t, l + rad, t, rad);
189
+ }
190
+
191
+ if (ne) {
192
+ ctx.moveTo(r - rad, t);
193
+ ctx.lineTo(r, t);
194
+ ctx.lineTo(r, t + rad);
195
+ ctx.arcTo(r, t, r - rad, t, rad);
196
+ }
197
+
198
+ if (se) {
199
+ ctx.moveTo(r - rad, b);
200
+ ctx.lineTo(r, b);
201
+ ctx.lineTo(r, b - rad);
202
+ ctx.arcTo(r, b, r - rad, b, rad);
203
+ }
204
+
205
+ if (sw) {
206
+ ctx.moveTo(l + rad, b);
207
+ ctx.lineTo(l, b);
208
+ ctx.lineTo(l, b - rad);
209
+ ctx.arcTo(l, b, l + rad, b, rad);
210
+ }
211
+ }
212
+
213
+ function drawModuleRounded(qr, context, settings, left, top, width, row, col) {
214
+ var isDark = qr.isDark;
215
+ var right = left + width;
216
+ var bottom = top + width;
217
+ var radius = settings.radius * width;
218
+ var rowT = row - 1;
219
+ var rowB = row + 1;
220
+ var colL = col - 1;
221
+ var colR = col + 1;
222
+ var center = isDark(row, col);
223
+ var northwest = isDark(rowT, colL);
224
+ var north = isDark(rowT, col);
225
+ var northeast = isDark(rowT, colR);
226
+ var east = isDark(row, colR);
227
+ var southeast = isDark(rowB, colR);
228
+ var south = isDark(rowB, col);
229
+ var southwest = isDark(rowB, colL);
230
+ var west = isDark(row, colL);
231
+
232
+ if (center) {
233
+ drawModuleRoundedDark(context, left, top, right, bottom, radius, !north && !west, !north && !east, !south && !east, !south && !west);
234
+ } else {
235
+ drawModuleRoundendLight(context, left, top, right, bottom, radius, north && west && northwest, north && east && northeast, south && east && southeast, south && west && southwest);
236
+ }
237
+ }
238
+
239
+ function drawModules(qr, context, settings) {
240
+ var moduleCount = qr.moduleCount;
241
+ var moduleSize = settings.size / moduleCount;
242
+ var fn = drawModuleDefault;
243
+ var row;
244
+ var col;
245
+
246
+ if (settings.radius > 0 && settings.radius <= 0.5) {
247
+ fn = drawModuleRounded;
248
+ }
249
+
250
+ context.beginPath();
251
+ for (row = 0; row < moduleCount; row += 1) {
252
+ for (col = 0; col < moduleCount; col += 1) {
253
+ var l = settings.left + col * moduleSize;
254
+ var t = settings.top + row * moduleSize;
255
+ var w = moduleSize;
256
+
257
+ fn(qr, context, settings, l, t, w, row, col);
258
+ }
259
+ }
260
+ if (jq(settings.fill).is('img')) {
261
+ context.strokeStyle = 'rgba(0,0,0,0.5)';
262
+ context.lineWidth = 2;
263
+ context.stroke();
264
+ var prev = context.globalCompositeOperation;
265
+ context.globalCompositeOperation = 'destination-out';
266
+ context.fill();
267
+ context.globalCompositeOperation = prev;
268
+
269
+ context.clip();
270
+ context.drawImage(settings.fill, 0, 0, settings.size, settings.size);
271
+ context.restore();
272
+ } else {
273
+ context.fillStyle = settings.fill;
274
+ context.fill();
275
+ }
276
+ }
277
+
278
+ // Draws QR code to the given `canvas` and returns it.
279
+ function drawOnCanvas(canvas, settings) {
280
+ var qr = createMinQRCode(settings.text, settings.ecLevel, settings.minVersion, settings.maxVersion, settings.quiet);
281
+ if (!qr) {
282
+ return null;
283
+ }
284
+
285
+ var $canvas = jq(canvas).data('qrcode', qr);
286
+ var context = $canvas[0].getContext('2d');
287
+
288
+ drawBackground(qr, context, settings);
289
+ drawModules(qr, context, settings);
290
+
291
+ return $canvas;
292
+ }
293
+
294
+ // Returns a `canvas` element representing the QR code for the given settings.
295
+ function createCanvas(settings) {
296
+ var $canvas = jq('<canvas/>').attr('width', settings.size).attr('height', settings.size);
297
+ return drawOnCanvas($canvas, settings);
298
+ }
299
+
300
+ // Returns an `image` element representing the QR code for the given settings.
301
+ function createImage(settings) {
302
+ return jq('<img/>').attr('src', createCanvas(settings)[0].toDataURL('image/png'));
303
+ }
304
+
305
+ // Returns a `div` element representing the QR code for the given settings.
306
+ function createDiv(settings) {
307
+ var qr = createMinQRCode(settings.text, settings.ecLevel, settings.minVersion, settings.maxVersion, settings.quiet);
308
+ if (!qr) {
309
+ return null;
310
+ }
311
+
312
+ // some shortcuts to improve compression
313
+ var settings_size = settings.size;
314
+ var settings_bgColor = settings.background;
315
+ var math_floor = Math.floor;
316
+
317
+ var moduleCount = qr.moduleCount;
318
+ var moduleSize = math_floor(settings_size / moduleCount);
319
+ var offset = math_floor(0.5 * (settings_size - moduleSize * moduleCount));
320
+
321
+ var row;
322
+ var col;
323
+
324
+ var containerCSS = {
325
+ position: 'relative',
326
+ left: 0,
327
+ top: 0,
328
+ padding: 0,
329
+ margin: 0,
330
+ width: settings_size,
331
+ height: settings_size
332
+ };
333
+ var darkCSS = {
334
+ position: 'absolute',
335
+ padding: 0,
336
+ margin: 0,
337
+ width: moduleSize,
338
+ height: moduleSize,
339
+ 'background-color': settings.fill
340
+ };
341
+
342
+ var $div = jq('<div/>').data('qrcode', qr).css(containerCSS);
343
+
344
+ if (settings_bgColor) {
345
+ $div.css('background-color', settings_bgColor);
346
+ }
347
+
348
+ for (row = 0; row < moduleCount; row += 1) {
349
+ for (col = 0; col < moduleCount; col += 1) {
350
+ if (qr.isDark(row, col)) {
351
+ jq('<div/>')
352
+ .css(darkCSS)
353
+ .css({
354
+ left: offset + col * moduleSize,
355
+ top: offset + row * moduleSize
356
+ })
357
+ .appendTo($div);
358
+ }
359
+ }
360
+ }
361
+
362
+ return $div;
363
+ }
364
+
365
+ function createHTML(settings) {
366
+ if (hasCanvas && settings.render === 'canvas') {
367
+ return createCanvas(settings);
368
+ } else if (hasCanvas && settings.render === 'image') {
369
+ return createImage(settings);
370
+ }
371
+
372
+ return createDiv(settings);
373
+ }
374
+
375
+ // Plugin
376
+ // ======
377
+
378
+ // Default settings
379
+ // ----------------
380
+ var defaults = {
381
+ // render method: `'canvas'`, `'image'` or `'div'`
382
+ render: 'canvas',
383
+
384
+ // version range somewhere in 1 .. 40
385
+ minVersion: 1,
386
+ maxVersion: 40,
387
+
388
+ // error correction level: `'L'`, `'M'`, `'Q'` or `'H'`
389
+ ecLevel: 'L',
390
+
391
+ // offset in pixel if drawn onto existing canvas
392
+ left: 0,
393
+ top: 0,
394
+
395
+ // size in pixel
396
+ size: 200,
397
+
398
+ // code color or image element
399
+ fill: '#000',
400
+
401
+ // background color or image element, `null` for transparent background
402
+ background: null,
403
+
404
+ // content
405
+ text: 'no text',
406
+
407
+ // corner radius relative to module width: 0.0 .. 0.5
408
+ radius: 0,
409
+
410
+ // quiet zone in modules
411
+ quiet: 0,
412
+
413
+ // modes
414
+ // 0: normal
415
+ // 1: label strip
416
+ // 2: label box
417
+ // 3: image strip
418
+ // 4: image box
419
+ mode: 0,
420
+
421
+ mSize: 0.1,
422
+ mPosX: 0.5,
423
+ mPosY: 0.5,
424
+
425
+ label: 'no label',
426
+ fontname: 'sans',
427
+ fontcolor: '#000',
428
+
429
+ image: null
430
+ };
431
+
432
+ // Register the plugin
433
+ // -------------------
434
+ jq.fn.qrcode = function (options) {
435
+ var settings = jq.extend({}, defaults, options);
436
+
437
+ return this.each(function (idx, el) {
438
+ if (el.nodeName.toLowerCase() === 'canvas') {
439
+ drawOnCanvas(el, settings);
440
+ } else {
441
+ jq(el).append(createHTML(settings));
442
+ }
443
+ });
444
+ };
445
+ }(function () {
446
+ // `qrcode` is the single public function defined by the `QR Code Generator`
447
+ //---------------------------------------------------------------------
448
+ //
449
+ // QR Code Generator for JavaScript
450
+ //
451
+ // Copyright (c) 2009 Kazuhiko Arase
452
+ //
453
+ // URL: http://www.d-project.com/
454
+ //
455
+ // Licensed under the MIT license:
456
+ // http://www.opensource.org/licenses/mit-license.php
457
+ //
458
+ // The word 'QR Code' is registered trademark of
459
+ // DENSO WAVE INCORPORATED
460
+ // http://www.denso-wave.com/qrcode/faqpatent-e.html
461
+ //
462
+ //---------------------------------------------------------------------
463
+
464
+ var qrcode = function() {
465
+
466
+ //---------------------------------------------------------------------
467
+ // qrcode
468
+ //---------------------------------------------------------------------
469
+
470
+ /**
471
+ * qrcode
472
+ * @param typeNumber 1 to 40
473
+ * @param errorCorrectLevel 'L','M','Q','H'
474
+ */
475
+ var qrcode = function(typeNumber, errorCorrectLevel) {
476
+
477
+ var PAD0 = 0xEC;
478
+ var PAD1 = 0x11;
479
+
480
+ var _typeNumber = typeNumber;
481
+ var _errorCorrectLevel = QRErrorCorrectLevel[errorCorrectLevel];
482
+ var _modules = null;
483
+ var _moduleCount = 0;
484
+ var _dataCache = null;
485
+ var _dataList = new Array();
486
+
487
+ var _this = {};
488
+
489
+ var makeImpl = function(test, maskPattern) {
490
+
491
+ _moduleCount = _typeNumber * 4 + 17;
492
+ _modules = function(moduleCount) {
493
+ var modules = new Array(moduleCount);
494
+ for (var row = 0; row < moduleCount; row += 1) {
495
+ modules[row] = new Array(moduleCount);
496
+ for (var col = 0; col < moduleCount; col += 1) {
497
+ modules[row][col] = null;
498
+ }
499
+ }
500
+ return modules;
501
+ }(_moduleCount);
502
+
503
+ setupPositionProbePattern(0, 0);
504
+ setupPositionProbePattern(_moduleCount - 7, 0);
505
+ setupPositionProbePattern(0, _moduleCount - 7);
506
+ setupPositionAdjustPattern();
507
+ setupTimingPattern();
508
+ setupTypeInfo(test, maskPattern);
509
+
510
+ if (_typeNumber >= 7) {
511
+ setupTypeNumber(test);
512
+ }
513
+
514
+ if (_dataCache == null) {
515
+ _dataCache = createData(_typeNumber, _errorCorrectLevel, _dataList);
516
+ }
517
+
518
+ mapData(_dataCache, maskPattern);
519
+ };
520
+
521
+ var setupPositionProbePattern = function(row, col) {
522
+
523
+ for (var r = -1; r <= 7; r += 1) {
524
+
525
+ if (row + r <= -1 || _moduleCount <= row + r) continue;
526
+
527
+ for (var c = -1; c <= 7; c += 1) {
528
+
529
+ if (col + c <= -1 || _moduleCount <= col + c) continue;
530
+
531
+ if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )
532
+ || (0 <= c && c <= 6 && (r == 0 || r == 6) )
533
+ || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {
534
+ _modules[row + r][col + c] = true;
535
+ } else {
536
+ _modules[row + r][col + c] = false;
537
+ }
538
+ }
539
+ }
540
+ };
541
+
542
+ var getBestMaskPattern = function() {
543
+
544
+ var minLostPoint = 0;
545
+ var pattern = 0;
546
+
547
+ for (var i = 0; i < 8; i += 1) {
548
+
549
+ makeImpl(true, i);
550
+
551
+ var lostPoint = QRUtil.getLostPoint(_this);
552
+
553
+ if (i == 0 || minLostPoint > lostPoint) {
554
+ minLostPoint = lostPoint;
555
+ pattern = i;
556
+ }
557
+ }
558
+
559
+ return pattern;
560
+ };
561
+
562
+ var setupTimingPattern = function() {
563
+
564
+ for (var r = 8; r < _moduleCount - 8; r += 1) {
565
+ if (_modules[r][6] != null) {
566
+ continue;
567
+ }
568
+ _modules[r][6] = (r % 2 == 0);
569
+ }
570
+
571
+ for (var c = 8; c < _moduleCount - 8; c += 1) {
572
+ if (_modules[6][c] != null) {
573
+ continue;
574
+ }
575
+ _modules[6][c] = (c % 2 == 0);
576
+ }
577
+ };
578
+
579
+ var setupPositionAdjustPattern = function() {
580
+
581
+ var pos = QRUtil.getPatternPosition(_typeNumber);
582
+
583
+ for (var i = 0; i < pos.length; i += 1) {
584
+
585
+ for (var j = 0; j < pos.length; j += 1) {
586
+
587
+ var row = pos[i];
588
+ var col = pos[j];
589
+
590
+ if (_modules[row][col] != null) {
591
+ continue;
592
+ }
593
+
594
+ for (var r = -2; r <= 2; r += 1) {
595
+
596
+ for (var c = -2; c <= 2; c += 1) {
597
+
598
+ if (r == -2 || r == 2 || c == -2 || c == 2
599
+ || (r == 0 && c == 0) ) {
600
+ _modules[row + r][col + c] = true;
601
+ } else {
602
+ _modules[row + r][col + c] = false;
603
+ }
604
+ }
605
+ }
606
+ }
607
+ }
608
+ };
609
+
610
+ var setupTypeNumber = function(test) {
611
+
612
+ var bits = QRUtil.getBCHTypeNumber(_typeNumber);
613
+
614
+ for (var i = 0; i < 18; i += 1) {
615
+ var mod = (!test && ( (bits >> i) & 1) == 1);
616
+ _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;
617
+ }
618
+
619
+ for (var i = 0; i < 18; i += 1) {
620
+ var mod = (!test && ( (bits >> i) & 1) == 1);
621
+ _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
622
+ }
623
+ };
624
+
625
+ var setupTypeInfo = function(test, maskPattern) {
626
+
627
+ var data = (_errorCorrectLevel << 3) | maskPattern;
628
+ var bits = QRUtil.getBCHTypeInfo(data);
629
+
630
+ // vertical
631
+ for (var i = 0; i < 15; i += 1) {
632
+
633
+ var mod = (!test && ( (bits >> i) & 1) == 1);
634
+
635
+ if (i < 6) {
636
+ _modules[i][8] = mod;
637
+ } else if (i < 8) {
638
+ _modules[i + 1][8] = mod;
639
+ } else {
640
+ _modules[_moduleCount - 15 + i][8] = mod;
641
+ }
642
+ }
643
+
644
+ // horizontal
645
+ for (var i = 0; i < 15; i += 1) {
646
+
647
+ var mod = (!test && ( (bits >> i) & 1) == 1);
648
+
649
+ if (i < 8) {
650
+ _modules[8][_moduleCount - i - 1] = mod;
651
+ } else if (i < 9) {
652
+ _modules[8][15 - i - 1 + 1] = mod;
653
+ } else {
654
+ _modules[8][15 - i - 1] = mod;
655
+ }
656
+ }
657
+
658
+ // fixed module
659
+ _modules[_moduleCount - 8][8] = (!test);
660
+ };
661
+
662
+ var mapData = function(data, maskPattern) {
663
+
664
+ var inc = -1;
665
+ var row = _moduleCount - 1;
666
+ var bitIndex = 7;
667
+ var byteIndex = 0;
668
+ var maskFunc = QRUtil.getMaskFunction(maskPattern);
669
+
670
+ for (var col = _moduleCount - 1; col > 0; col -= 2) {
671
+
672
+ if (col == 6) col -= 1;
673
+
674
+ while (true) {
675
+
676
+ for (var c = 0; c < 2; c += 1) {
677
+
678
+ if (_modules[row][col - c] == null) {
679
+
680
+ var dark = false;
681
+
682
+ if (byteIndex < data.length) {
683
+ dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);
684
+ }
685
+
686
+ var mask = maskFunc(row, col - c);
687
+
688
+ if (mask) {
689
+ dark = !dark;
690
+ }
691
+
692
+ _modules[row][col - c] = dark;
693
+ bitIndex -= 1;
694
+
695
+ if (bitIndex == -1) {
696
+ byteIndex += 1;
697
+ bitIndex = 7;
698
+ }
699
+ }
700
+ }
701
+
702
+ row += inc;
703
+
704
+ if (row < 0 || _moduleCount <= row) {
705
+ row -= inc;
706
+ inc = -inc;
707
+ break;
708
+ }
709
+ }
710
+ }
711
+ };
712
+
713
+ var createBytes = function(buffer, rsBlocks) {
714
+
715
+ var offset = 0;
716
+
717
+ var maxDcCount = 0;
718
+ var maxEcCount = 0;
719
+
720
+ var dcdata = new Array(rsBlocks.length);
721
+ var ecdata = new Array(rsBlocks.length);
722
+
723
+ for (var r = 0; r < rsBlocks.length; r += 1) {
724
+
725
+ var dcCount = rsBlocks[r].dataCount;
726
+ var ecCount = rsBlocks[r].totalCount - dcCount;
727
+
728
+ maxDcCount = Math.max(maxDcCount, dcCount);
729
+ maxEcCount = Math.max(maxEcCount, ecCount);
730
+
731
+ dcdata[r] = new Array(dcCount);
732
+
733
+ for (var i = 0; i < dcdata[r].length; i += 1) {
734
+ dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];
735
+ }
736
+ offset += dcCount;
737
+
738
+ var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
739
+ var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);
740
+
741
+ var modPoly = rawPoly.mod(rsPoly);
742
+ ecdata[r] = new Array(rsPoly.getLength() - 1);
743
+ for (var i = 0; i < ecdata[r].length; i += 1) {
744
+ var modIndex = i + modPoly.getLength() - ecdata[r].length;
745
+ ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;
746
+ }
747
+ }
748
+
749
+ var totalCodeCount = 0;
750
+ for (var i = 0; i < rsBlocks.length; i += 1) {
751
+ totalCodeCount += rsBlocks[i].totalCount;
752
+ }
753
+
754
+ var data = new Array(totalCodeCount);
755
+ var index = 0;
756
+
757
+ for (var i = 0; i < maxDcCount; i += 1) {
758
+ for (var r = 0; r < rsBlocks.length; r += 1) {
759
+ if (i < dcdata[r].length) {
760
+ data[index] = dcdata[r][i];
761
+ index += 1;
762
+ }
763
+ }
764
+ }
765
+
766
+ for (var i = 0; i < maxEcCount; i += 1) {
767
+ for (var r = 0; r < rsBlocks.length; r += 1) {
768
+ if (i < ecdata[r].length) {
769
+ data[index] = ecdata[r][i];
770
+ index += 1;
771
+ }
772
+ }
773
+ }
774
+
775
+ return data;
776
+ };
777
+
778
+ var createData = function(typeNumber, errorCorrectLevel, dataList) {
779
+
780
+ var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
781
+
782
+ var buffer = qrBitBuffer();
783
+
784
+ for (var i = 0; i < dataList.length; i += 1) {
785
+ var data = dataList[i];
786
+ buffer.put(data.getMode(), 4);
787
+ buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );
788
+ data.write(buffer);
789
+ }
790
+
791
+ // calc num max data.
792
+ var totalDataCount = 0;
793
+ for (var i = 0; i < rsBlocks.length; i += 1) {
794
+ totalDataCount += rsBlocks[i].dataCount;
795
+ }
796
+
797
+ if (buffer.getLengthInBits() > totalDataCount * 8) {
798
+ throw new Error('code length overflow. ('
799
+ + buffer.getLengthInBits()
800
+ + '>'
801
+ + totalDataCount * 8
802
+ + ')');
803
+ }
804
+
805
+ // end code
806
+ if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
807
+ buffer.put(0, 4);
808
+ }
809
+
810
+ // padding
811
+ while (buffer.getLengthInBits() % 8 != 0) {
812
+ buffer.putBit(false);
813
+ }
814
+
815
+ // padding
816
+ while (true) {
817
+
818
+ if (buffer.getLengthInBits() >= totalDataCount * 8) {
819
+ break;
820
+ }
821
+ buffer.put(PAD0, 8);
822
+
823
+ if (buffer.getLengthInBits() >= totalDataCount * 8) {
824
+ break;
825
+ }
826
+ buffer.put(PAD1, 8);
827
+ }
828
+
829
+ return createBytes(buffer, rsBlocks);
830
+ };
831
+
832
+ _this.addData = function(data) {
833
+ var newData = qr8BitByte(data);
834
+ _dataList.push(newData);
835
+ _dataCache = null;
836
+ };
837
+
838
+ _this.isDark = function(row, col) {
839
+ if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {
840
+ throw new Error(row + ',' + col);
841
+ }
842
+ return _modules[row][col];
843
+ };
844
+
845
+ _this.getModuleCount = function() {
846
+ return _moduleCount;
847
+ };
848
+
849
+ _this.make = function() {
850
+ makeImpl(false, getBestMaskPattern() );
851
+ };
852
+
853
+ _this.createTableTag = function(cellSize, margin) {
854
+
855
+ cellSize = cellSize || 2;
856
+ margin = (typeof margin == 'undefined')? cellSize * 4 : margin;
857
+
858
+ var qrHtml = '';
859
+
860
+ qrHtml += '<table style="';
861
+ qrHtml += ' border-width: 0px; border-style: none;';
862
+ qrHtml += ' border-collapse: collapse;';
863
+ qrHtml += ' padding: 0px; margin: ' + margin + 'px;';
864
+ qrHtml += '">';
865
+ qrHtml += '<tbody>';
866
+
867
+ for (var r = 0; r < _this.getModuleCount(); r += 1) {
868
+
869
+ qrHtml += '<tr>';
870
+
871
+ for (var c = 0; c < _this.getModuleCount(); c += 1) {
872
+ qrHtml += '<td style="';
873
+ qrHtml += ' border-width: 0px; border-style: none;';
874
+ qrHtml += ' border-collapse: collapse;';
875
+ qrHtml += ' padding: 0px; margin: 0px;';
876
+ qrHtml += ' width: ' + cellSize + 'px;';
877
+ qrHtml += ' height: ' + cellSize + 'px;';
878
+ qrHtml += ' background-color: ';
879
+ qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';
880
+ qrHtml += ';';
881
+ qrHtml += '"/>';
882
+ }
883
+
884
+ qrHtml += '</tr>';
885
+ }
886
+
887
+ qrHtml += '</tbody>';
888
+ qrHtml += '</table>';
889
+
890
+ return qrHtml;
891
+ };
892
+
893
+ _this.createImgTag = function(cellSize, margin) {
894
+
895
+ cellSize = cellSize || 2;
896
+ margin = (typeof margin == 'undefined')? cellSize * 4 : margin;
897
+
898
+ var size = _this.getModuleCount() * cellSize + margin * 2;
899
+ var min = margin;
900
+ var max = size - margin;
901
+
902
+ return createImgTag(size, size, function(x, y) {
903
+ if (min <= x && x < max && min <= y && y < max) {
904
+ var c = Math.floor( (x - min) / cellSize);
905
+ var r = Math.floor( (y - min) / cellSize);
906
+ return _this.isDark(r, c)? 0 : 1;
907
+ } else {
908
+ return 1;
909
+ }
910
+ } );
911
+ };
912
+
913
+ return _this;
914
+ };
915
+
916
+ //---------------------------------------------------------------------
917
+ // qrcode.stringToBytes
918
+ //---------------------------------------------------------------------
919
+
920
+ qrcode.stringToBytes = function(s) {
921
+ var bytes = new Array();
922
+ for (var i = 0; i < s.length; i += 1) {
923
+ var c = s.charCodeAt(i);
924
+ bytes.push(c & 0xff);
925
+ }
926
+ return bytes;
927
+ };
928
+
929
+ //---------------------------------------------------------------------
930
+ // qrcode.createStringToBytes
931
+ //---------------------------------------------------------------------
932
+
933
+ /**
934
+ * @param unicodeData base64 string of byte array.
935
+ * [16bit Unicode],[16bit Bytes], ...
936
+ * @param numChars
937
+ */
938
+ qrcode.createStringToBytes = function(unicodeData, numChars) {
939
+
940
+ // create conversion map.
941
+
942
+ var unicodeMap = function() {
943
+
944
+ var bin = base64DecodeInputStream(unicodeData);
945
+ var read = function() {
946
+ var b = bin.read();
947
+ if (b == -1) throw new Error();
948
+ return b;
949
+ };
950
+
951
+ var count = 0;
952
+ var unicodeMap = {};
953
+ while (true) {
954
+ var b0 = bin.read();
955
+ if (b0 == -1) break;
956
+ var b1 = read();
957
+ var b2 = read();
958
+ var b3 = read();
959
+ var k = String.fromCharCode( (b0 << 8) | b1);
960
+ var v = (b2 << 8) | b3;
961
+ unicodeMap[k] = v;
962
+ count += 1;
963
+ }
964
+ if (count != numChars) {
965
+ throw new Error(count + ' != ' + numChars);
966
+ }
967
+
968
+ return unicodeMap;
969
+ }();
970
+
971
+ var unknownChar = '?'.charCodeAt(0);
972
+
973
+ return function(s) {
974
+ var bytes = new Array();
975
+ for (var i = 0; i < s.length; i += 1) {
976
+ var c = s.charCodeAt(i);
977
+ if (c < 128) {
978
+ bytes.push(c);
979
+ } else {
980
+ var b = unicodeMap[s.charAt(i)];
981
+ if (typeof b == 'number') {
982
+ if ( (b & 0xff) == b) {
983
+ // 1byte
984
+ bytes.push(b);
985
+ } else {
986
+ // 2bytes
987
+ bytes.push(b >>> 8);
988
+ bytes.push(b & 0xff);
989
+ }
990
+ } else {
991
+ bytes.push(unknownChar);
992
+ }
993
+ }
994
+ }
995
+ return bytes;
996
+ };
997
+ };
998
+
999
+ //---------------------------------------------------------------------
1000
+ // QRMode
1001
+ //---------------------------------------------------------------------
1002
+
1003
+ var QRMode = {
1004
+ MODE_NUMBER : 1 << 0,
1005
+ MODE_ALPHA_NUM : 1 << 1,
1006
+ MODE_8BIT_BYTE : 1 << 2,
1007
+ MODE_KANJI : 1 << 3
1008
+ };
1009
+
1010
+ //---------------------------------------------------------------------
1011
+ // QRErrorCorrectLevel
1012
+ //---------------------------------------------------------------------
1013
+
1014
+ var QRErrorCorrectLevel = {
1015
+ L : 1,
1016
+ M : 0,
1017
+ Q : 3,
1018
+ H : 2
1019
+ };
1020
+
1021
+ //---------------------------------------------------------------------
1022
+ // QRMaskPattern
1023
+ //---------------------------------------------------------------------
1024
+
1025
+ var QRMaskPattern = {
1026
+ PATTERN000 : 0,
1027
+ PATTERN001 : 1,
1028
+ PATTERN010 : 2,
1029
+ PATTERN011 : 3,
1030
+ PATTERN100 : 4,
1031
+ PATTERN101 : 5,
1032
+ PATTERN110 : 6,
1033
+ PATTERN111 : 7
1034
+ };
1035
+
1036
+ //---------------------------------------------------------------------
1037
+ // QRUtil
1038
+ //---------------------------------------------------------------------
1039
+
1040
+ var QRUtil = function() {
1041
+
1042
+ var PATTERN_POSITION_TABLE = [
1043
+ [],
1044
+ [6, 18],
1045
+ [6, 22],
1046
+ [6, 26],
1047
+ [6, 30],
1048
+ [6, 34],
1049
+ [6, 22, 38],
1050
+ [6, 24, 42],
1051
+ [6, 26, 46],
1052
+ [6, 28, 50],
1053
+ [6, 30, 54],
1054
+ [6, 32, 58],
1055
+ [6, 34, 62],
1056
+ [6, 26, 46, 66],
1057
+ [6, 26, 48, 70],
1058
+ [6, 26, 50, 74],
1059
+ [6, 30, 54, 78],
1060
+ [6, 30, 56, 82],
1061
+ [6, 30, 58, 86],
1062
+ [6, 34, 62, 90],
1063
+ [6, 28, 50, 72, 94],
1064
+ [6, 26, 50, 74, 98],
1065
+ [6, 30, 54, 78, 102],
1066
+ [6, 28, 54, 80, 106],
1067
+ [6, 32, 58, 84, 110],
1068
+ [6, 30, 58, 86, 114],
1069
+ [6, 34, 62, 90, 118],
1070
+ [6, 26, 50, 74, 98, 122],
1071
+ [6, 30, 54, 78, 102, 126],
1072
+ [6, 26, 52, 78, 104, 130],
1073
+ [6, 30, 56, 82, 108, 134],
1074
+ [6, 34, 60, 86, 112, 138],
1075
+ [6, 30, 58, 86, 114, 142],
1076
+ [6, 34, 62, 90, 118, 146],
1077
+ [6, 30, 54, 78, 102, 126, 150],
1078
+ [6, 24, 50, 76, 102, 128, 154],
1079
+ [6, 28, 54, 80, 106, 132, 158],
1080
+ [6, 32, 58, 84, 110, 136, 162],
1081
+ [6, 26, 54, 82, 110, 138, 166],
1082
+ [6, 30, 58, 86, 114, 142, 170]
1083
+ ];
1084
+ var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);
1085
+ var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);
1086
+ var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);
1087
+
1088
+ var _this = {};
1089
+
1090
+ var getBCHDigit = function(data) {
1091
+ var digit = 0;
1092
+ while (data != 0) {
1093
+ digit += 1;
1094
+ data >>>= 1;
1095
+ }
1096
+ return digit;
1097
+ };
1098
+
1099
+ _this.getBCHTypeInfo = function(data) {
1100
+ var d = data << 10;
1101
+ while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {
1102
+ d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );
1103
+ }
1104
+ return ( (data << 10) | d) ^ G15_MASK;
1105
+ };
1106
+
1107
+ _this.getBCHTypeNumber = function(data) {
1108
+ var d = data << 12;
1109
+ while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {
1110
+ d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );
1111
+ }
1112
+ return (data << 12) | d;
1113
+ };
1114
+
1115
+ _this.getPatternPosition = function(typeNumber) {
1116
+ return PATTERN_POSITION_TABLE[typeNumber - 1];
1117
+ };
1118
+
1119
+ _this.getMaskFunction = function(maskPattern) {
1120
+
1121
+ switch (maskPattern) {
1122
+
1123
+ case QRMaskPattern.PATTERN000 :
1124
+ return function(i, j) { return (i + j) % 2 == 0; };
1125
+ case QRMaskPattern.PATTERN001 :
1126
+ return function(i, j) { return i % 2 == 0; };
1127
+ case QRMaskPattern.PATTERN010 :
1128
+ return function(i, j) { return j % 3 == 0; };
1129
+ case QRMaskPattern.PATTERN011 :
1130
+ return function(i, j) { return (i + j) % 3 == 0; };
1131
+ case QRMaskPattern.PATTERN100 :
1132
+ return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };
1133
+ case QRMaskPattern.PATTERN101 :
1134
+ return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };
1135
+ case QRMaskPattern.PATTERN110 :
1136
+ return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };
1137
+ case QRMaskPattern.PATTERN111 :
1138
+ return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };
1139
+
1140
+ default :
1141
+ throw new Error('bad maskPattern:' + maskPattern);
1142
+ }
1143
+ };
1144
+
1145
+ _this.getErrorCorrectPolynomial = function(errorCorrectLength) {
1146
+ var a = qrPolynomial([1], 0);
1147
+ for (var i = 0; i < errorCorrectLength; i += 1) {
1148
+ a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );
1149
+ }
1150
+ return a;
1151
+ };
1152
+
1153
+ _this.getLengthInBits = function(mode, type) {
1154
+
1155
+ if (1 <= type && type < 10) {
1156
+
1157
+ // 1 - 9
1158
+
1159
+ switch(mode) {
1160
+ case QRMode.MODE_NUMBER : return 10;
1161
+ case QRMode.MODE_ALPHA_NUM : return 9;
1162
+ case QRMode.MODE_8BIT_BYTE : return 8;
1163
+ case QRMode.MODE_KANJI : return 8;
1164
+ default :
1165
+ throw new Error('mode:' + mode);
1166
+ }
1167
+
1168
+ } else if (type < 27) {
1169
+
1170
+ // 10 - 26
1171
+
1172
+ switch(mode) {
1173
+ case QRMode.MODE_NUMBER : return 12;
1174
+ case QRMode.MODE_ALPHA_NUM : return 11;
1175
+ case QRMode.MODE_8BIT_BYTE : return 16;
1176
+ case QRMode.MODE_KANJI : return 10;
1177
+ default :
1178
+ throw new Error('mode:' + mode);
1179
+ }
1180
+
1181
+ } else if (type < 41) {
1182
+
1183
+ // 27 - 40
1184
+
1185
+ switch(mode) {
1186
+ case QRMode.MODE_NUMBER : return 14;
1187
+ case QRMode.MODE_ALPHA_NUM : return 13;
1188
+ case QRMode.MODE_8BIT_BYTE : return 16;
1189
+ case QRMode.MODE_KANJI : return 12;
1190
+ default :
1191
+ throw new Error('mode:' + mode);
1192
+ }
1193
+
1194
+ } else {
1195
+ throw new Error('type:' + type);
1196
+ }
1197
+ };
1198
+
1199
+ _this.getLostPoint = function(qrcode) {
1200
+
1201
+ var moduleCount = qrcode.getModuleCount();
1202
+
1203
+ var lostPoint = 0;
1204
+
1205
+ // LEVEL1
1206
+
1207
+ for (var row = 0; row < moduleCount; row += 1) {
1208
+ for (var col = 0; col < moduleCount; col += 1) {
1209
+
1210
+ var sameCount = 0;
1211
+ var dark = qrcode.isDark(row, col);
1212
+
1213
+ for (var r = -1; r <= 1; r += 1) {
1214
+
1215
+ if (row + r < 0 || moduleCount <= row + r) {
1216
+ continue;
1217
+ }
1218
+
1219
+ for (var c = -1; c <= 1; c += 1) {
1220
+
1221
+ if (col + c < 0 || moduleCount <= col + c) {
1222
+ continue;
1223
+ }
1224
+
1225
+ if (r == 0 && c == 0) {
1226
+ continue;
1227
+ }
1228
+
1229
+ if (dark == qrcode.isDark(row + r, col + c) ) {
1230
+ sameCount += 1;
1231
+ }
1232
+ }
1233
+ }
1234
+
1235
+ if (sameCount > 5) {
1236
+ lostPoint += (3 + sameCount - 5);
1237
+ }
1238
+ }
1239
+ };
1240
+
1241
+ // LEVEL2
1242
+
1243
+ for (var row = 0; row < moduleCount - 1; row += 1) {
1244
+ for (var col = 0; col < moduleCount - 1; col += 1) {
1245
+ var count = 0;
1246
+ if (qrcode.isDark(row, col) ) count += 1;
1247
+ if (qrcode.isDark(row + 1, col) ) count += 1;
1248
+ if (qrcode.isDark(row, col + 1) ) count += 1;
1249
+ if (qrcode.isDark(row + 1, col + 1) ) count += 1;
1250
+ if (count == 0 || count == 4) {
1251
+ lostPoint += 3;
1252
+ }
1253
+ }
1254
+ }
1255
+
1256
+ // LEVEL3
1257
+
1258
+ for (var row = 0; row < moduleCount; row += 1) {
1259
+ for (var col = 0; col < moduleCount - 6; col += 1) {
1260
+ if (qrcode.isDark(row, col)
1261
+ && !qrcode.isDark(row, col + 1)
1262
+ && qrcode.isDark(row, col + 2)
1263
+ && qrcode.isDark(row, col + 3)
1264
+ && qrcode.isDark(row, col + 4)
1265
+ && !qrcode.isDark(row, col + 5)
1266
+ && qrcode.isDark(row, col + 6) ) {
1267
+ lostPoint += 40;
1268
+ }
1269
+ }
1270
+ }
1271
+
1272
+ for (var col = 0; col < moduleCount; col += 1) {
1273
+ for (var row = 0; row < moduleCount - 6; row += 1) {
1274
+ if (qrcode.isDark(row, col)
1275
+ && !qrcode.isDark(row + 1, col)
1276
+ && qrcode.isDark(row + 2, col)
1277
+ && qrcode.isDark(row + 3, col)
1278
+ && qrcode.isDark(row + 4, col)
1279
+ && !qrcode.isDark(row + 5, col)
1280
+ && qrcode.isDark(row + 6, col) ) {
1281
+ lostPoint += 40;
1282
+ }
1283
+ }
1284
+ }
1285
+
1286
+ // LEVEL4
1287
+
1288
+ var darkCount = 0;
1289
+
1290
+ for (var col = 0; col < moduleCount; col += 1) {
1291
+ for (var row = 0; row < moduleCount; row += 1) {
1292
+ if (qrcode.isDark(row, col) ) {
1293
+ darkCount += 1;
1294
+ }
1295
+ }
1296
+ }
1297
+
1298
+ var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
1299
+ lostPoint += ratio * 10;
1300
+
1301
+ return lostPoint;
1302
+ };
1303
+
1304
+ return _this;
1305
+ }();
1306
+
1307
+ //---------------------------------------------------------------------
1308
+ // QRMath
1309
+ //---------------------------------------------------------------------
1310
+
1311
+ var QRMath = function() {
1312
+
1313
+ var EXP_TABLE = new Array(256);
1314
+ var LOG_TABLE = new Array(256);
1315
+
1316
+ // initialize tables
1317
+ for (var i = 0; i < 8; i += 1) {
1318
+ EXP_TABLE[i] = 1 << i;
1319
+ }
1320
+ for (var i = 8; i < 256; i += 1) {
1321
+ EXP_TABLE[i] = EXP_TABLE[i - 4]
1322
+ ^ EXP_TABLE[i - 5]
1323
+ ^ EXP_TABLE[i - 6]
1324
+ ^ EXP_TABLE[i - 8];
1325
+ }
1326
+ for (var i = 0; i < 255; i += 1) {
1327
+ LOG_TABLE[EXP_TABLE[i] ] = i;
1328
+ }
1329
+
1330
+ var _this = {};
1331
+
1332
+ _this.glog = function(n) {
1333
+
1334
+ if (n < 1) {
1335
+ throw new Error('glog(' + n + ')');
1336
+ }
1337
+
1338
+ return LOG_TABLE[n];
1339
+ };
1340
+
1341
+ _this.gexp = function(n) {
1342
+
1343
+ while (n < 0) {
1344
+ n += 255;
1345
+ }
1346
+
1347
+ while (n >= 256) {
1348
+ n -= 255;
1349
+ }
1350
+
1351
+ return EXP_TABLE[n];
1352
+ };
1353
+
1354
+ return _this;
1355
+ }();
1356
+
1357
+ //---------------------------------------------------------------------
1358
+ // qrPolynomial
1359
+ //---------------------------------------------------------------------
1360
+
1361
+ function qrPolynomial(num, shift) {
1362
+
1363
+ if (typeof num.length == 'undefined') {
1364
+ throw new Error(num.length + '/' + shift);
1365
+ }
1366
+
1367
+ var _num = function() {
1368
+ var offset = 0;
1369
+ while (offset < num.length && num[offset] == 0) {
1370
+ offset += 1;
1371
+ }
1372
+ var _num = new Array(num.length - offset + shift);
1373
+ for (var i = 0; i < num.length - offset; i += 1) {
1374
+ _num[i] = num[i + offset];
1375
+ }
1376
+ return _num;
1377
+ }();
1378
+
1379
+ var _this = {};
1380
+
1381
+ _this.getAt = function(index) {
1382
+ return _num[index];
1383
+ };
1384
+
1385
+ _this.getLength = function() {
1386
+ return _num.length;
1387
+ };
1388
+
1389
+ _this.multiply = function(e) {
1390
+
1391
+ var num = new Array(_this.getLength() + e.getLength() - 1);
1392
+
1393
+ for (var i = 0; i < _this.getLength(); i += 1) {
1394
+ for (var j = 0; j < e.getLength(); j += 1) {
1395
+ num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );
1396
+ }
1397
+ }
1398
+
1399
+ return qrPolynomial(num, 0);
1400
+ };
1401
+
1402
+ _this.mod = function(e) {
1403
+
1404
+ if (_this.getLength() - e.getLength() < 0) {
1405
+ return _this;
1406
+ }
1407
+
1408
+ var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );
1409
+
1410
+ var num = new Array(_this.getLength() );
1411
+ for (var i = 0; i < _this.getLength(); i += 1) {
1412
+ num[i] = _this.getAt(i);
1413
+ }
1414
+
1415
+ for (var i = 0; i < e.getLength(); i += 1) {
1416
+ num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);
1417
+ }
1418
+
1419
+ // recursive call
1420
+ return qrPolynomial(num, 0).mod(e);
1421
+ };
1422
+
1423
+ return _this;
1424
+ };
1425
+
1426
+ //---------------------------------------------------------------------
1427
+ // QRRSBlock
1428
+ //---------------------------------------------------------------------
1429
+
1430
+ var QRRSBlock = function() {
1431
+
1432
+ var RS_BLOCK_TABLE = [
1433
+
1434
+ // L
1435
+ // M
1436
+ // Q
1437
+ // H
1438
+
1439
+ // 1
1440
+ [1, 26, 19],
1441
+ [1, 26, 16],
1442
+ [1, 26, 13],
1443
+ [1, 26, 9],
1444
+
1445
+ // 2
1446
+ [1, 44, 34],
1447
+ [1, 44, 28],
1448
+ [1, 44, 22],
1449
+ [1, 44, 16],
1450
+
1451
+ // 3
1452
+ [1, 70, 55],
1453
+ [1, 70, 44],
1454
+ [2, 35, 17],
1455
+ [2, 35, 13],
1456
+
1457
+ // 4
1458
+ [1, 100, 80],
1459
+ [2, 50, 32],
1460
+ [2, 50, 24],
1461
+ [4, 25, 9],
1462
+
1463
+ // 5
1464
+ [1, 134, 108],
1465
+ [2, 67, 43],
1466
+ [2, 33, 15, 2, 34, 16],
1467
+ [2, 33, 11, 2, 34, 12],
1468
+
1469
+ // 6
1470
+ [2, 86, 68],
1471
+ [4, 43, 27],
1472
+ [4, 43, 19],
1473
+ [4, 43, 15],
1474
+
1475
+ // 7
1476
+ [2, 98, 78],
1477
+ [4, 49, 31],
1478
+ [2, 32, 14, 4, 33, 15],
1479
+ [4, 39, 13, 1, 40, 14],
1480
+
1481
+ // 8
1482
+ [2, 121, 97],
1483
+ [2, 60, 38, 2, 61, 39],
1484
+ [4, 40, 18, 2, 41, 19],
1485
+ [4, 40, 14, 2, 41, 15],
1486
+
1487
+ // 9
1488
+ [2, 146, 116],
1489
+ [3, 58, 36, 2, 59, 37],
1490
+ [4, 36, 16, 4, 37, 17],
1491
+ [4, 36, 12, 4, 37, 13],
1492
+
1493
+ // 10
1494
+ [2, 86, 68, 2, 87, 69],
1495
+ [4, 69, 43, 1, 70, 44],
1496
+ [6, 43, 19, 2, 44, 20],
1497
+ [6, 43, 15, 2, 44, 16],
1498
+
1499
+ // 11
1500
+ [4, 101, 81],
1501
+ [1, 80, 50, 4, 81, 51],
1502
+ [4, 50, 22, 4, 51, 23],
1503
+ [3, 36, 12, 8, 37, 13],
1504
+
1505
+ // 12
1506
+ [2, 116, 92, 2, 117, 93],
1507
+ [6, 58, 36, 2, 59, 37],
1508
+ [4, 46, 20, 6, 47, 21],
1509
+ [7, 42, 14, 4, 43, 15],
1510
+
1511
+ // 13
1512
+ [4, 133, 107],
1513
+ [8, 59, 37, 1, 60, 38],
1514
+ [8, 44, 20, 4, 45, 21],
1515
+ [12, 33, 11, 4, 34, 12],
1516
+
1517
+ // 14
1518
+ [3, 145, 115, 1, 146, 116],
1519
+ [4, 64, 40, 5, 65, 41],
1520
+ [11, 36, 16, 5, 37, 17],
1521
+ [11, 36, 12, 5, 37, 13],
1522
+
1523
+ // 15
1524
+ [5, 109, 87, 1, 110, 88],
1525
+ [5, 65, 41, 5, 66, 42],
1526
+ [5, 54, 24, 7, 55, 25],
1527
+ [11, 36, 12, 7, 37, 13],
1528
+
1529
+ // 16
1530
+ [5, 122, 98, 1, 123, 99],
1531
+ [7, 73, 45, 3, 74, 46],
1532
+ [15, 43, 19, 2, 44, 20],
1533
+ [3, 45, 15, 13, 46, 16],
1534
+
1535
+ // 17
1536
+ [1, 135, 107, 5, 136, 108],
1537
+ [10, 74, 46, 1, 75, 47],
1538
+ [1, 50, 22, 15, 51, 23],
1539
+ [2, 42, 14, 17, 43, 15],
1540
+
1541
+ // 18
1542
+ [5, 150, 120, 1, 151, 121],
1543
+ [9, 69, 43, 4, 70, 44],
1544
+ [17, 50, 22, 1, 51, 23],
1545
+ [2, 42, 14, 19, 43, 15],
1546
+
1547
+ // 19
1548
+ [3, 141, 113, 4, 142, 114],
1549
+ [3, 70, 44, 11, 71, 45],
1550
+ [17, 47, 21, 4, 48, 22],
1551
+ [9, 39, 13, 16, 40, 14],
1552
+
1553
+ // 20
1554
+ [3, 135, 107, 5, 136, 108],
1555
+ [3, 67, 41, 13, 68, 42],
1556
+ [15, 54, 24, 5, 55, 25],
1557
+ [15, 43, 15, 10, 44, 16],
1558
+
1559
+ // 21
1560
+ [4, 144, 116, 4, 145, 117],
1561
+ [17, 68, 42],
1562
+ [17, 50, 22, 6, 51, 23],
1563
+ [19, 46, 16, 6, 47, 17],
1564
+
1565
+ // 22
1566
+ [2, 139, 111, 7, 140, 112],
1567
+ [17, 74, 46],
1568
+ [7, 54, 24, 16, 55, 25],
1569
+ [34, 37, 13],
1570
+
1571
+ // 23
1572
+ [4, 151, 121, 5, 152, 122],
1573
+ [4, 75, 47, 14, 76, 48],
1574
+ [11, 54, 24, 14, 55, 25],
1575
+ [16, 45, 15, 14, 46, 16],
1576
+
1577
+ // 24
1578
+ [6, 147, 117, 4, 148, 118],
1579
+ [6, 73, 45, 14, 74, 46],
1580
+ [11, 54, 24, 16, 55, 25],
1581
+ [30, 46, 16, 2, 47, 17],
1582
+
1583
+ // 25
1584
+ [8, 132, 106, 4, 133, 107],
1585
+ [8, 75, 47, 13, 76, 48],
1586
+ [7, 54, 24, 22, 55, 25],
1587
+ [22, 45, 15, 13, 46, 16],
1588
+
1589
+ // 26
1590
+ [10, 142, 114, 2, 143, 115],
1591
+ [19, 74, 46, 4, 75, 47],
1592
+ [28, 50, 22, 6, 51, 23],
1593
+ [33, 46, 16, 4, 47, 17],
1594
+
1595
+ // 27
1596
+ [8, 152, 122, 4, 153, 123],
1597
+ [22, 73, 45, 3, 74, 46],
1598
+ [8, 53, 23, 26, 54, 24],
1599
+ [12, 45, 15, 28, 46, 16],
1600
+
1601
+ // 28
1602
+ [3, 147, 117, 10, 148, 118],
1603
+ [3, 73, 45, 23, 74, 46],
1604
+ [4, 54, 24, 31, 55, 25],
1605
+ [11, 45, 15, 31, 46, 16],
1606
+
1607
+ // 29
1608
+ [7, 146, 116, 7, 147, 117],
1609
+ [21, 73, 45, 7, 74, 46],
1610
+ [1, 53, 23, 37, 54, 24],
1611
+ [19, 45, 15, 26, 46, 16],
1612
+
1613
+ // 30
1614
+ [5, 145, 115, 10, 146, 116],
1615
+ [19, 75, 47, 10, 76, 48],
1616
+ [15, 54, 24, 25, 55, 25],
1617
+ [23, 45, 15, 25, 46, 16],
1618
+
1619
+ // 31
1620
+ [13, 145, 115, 3, 146, 116],
1621
+ [2, 74, 46, 29, 75, 47],
1622
+ [42, 54, 24, 1, 55, 25],
1623
+ [23, 45, 15, 28, 46, 16],
1624
+
1625
+ // 32
1626
+ [17, 145, 115],
1627
+ [10, 74, 46, 23, 75, 47],
1628
+ [10, 54, 24, 35, 55, 25],
1629
+ [19, 45, 15, 35, 46, 16],
1630
+
1631
+ // 33
1632
+ [17, 145, 115, 1, 146, 116],
1633
+ [14, 74, 46, 21, 75, 47],
1634
+ [29, 54, 24, 19, 55, 25],
1635
+ [11, 45, 15, 46, 46, 16],
1636
+
1637
+ // 34
1638
+ [13, 145, 115, 6, 146, 116],
1639
+ [14, 74, 46, 23, 75, 47],
1640
+ [44, 54, 24, 7, 55, 25],
1641
+ [59, 46, 16, 1, 47, 17],
1642
+
1643
+ // 35
1644
+ [12, 151, 121, 7, 152, 122],
1645
+ [12, 75, 47, 26, 76, 48],
1646
+ [39, 54, 24, 14, 55, 25],
1647
+ [22, 45, 15, 41, 46, 16],
1648
+
1649
+ // 36
1650
+ [6, 151, 121, 14, 152, 122],
1651
+ [6, 75, 47, 34, 76, 48],
1652
+ [46, 54, 24, 10, 55, 25],
1653
+ [2, 45, 15, 64, 46, 16],
1654
+
1655
+ // 37
1656
+ [17, 152, 122, 4, 153, 123],
1657
+ [29, 74, 46, 14, 75, 47],
1658
+ [49, 54, 24, 10, 55, 25],
1659
+ [24, 45, 15, 46, 46, 16],
1660
+
1661
+ // 38
1662
+ [4, 152, 122, 18, 153, 123],
1663
+ [13, 74, 46, 32, 75, 47],
1664
+ [48, 54, 24, 14, 55, 25],
1665
+ [42, 45, 15, 32, 46, 16],
1666
+
1667
+ // 39
1668
+ [20, 147, 117, 4, 148, 118],
1669
+ [40, 75, 47, 7, 76, 48],
1670
+ [43, 54, 24, 22, 55, 25],
1671
+ [10, 45, 15, 67, 46, 16],
1672
+
1673
+ // 40
1674
+ [19, 148, 118, 6, 149, 119],
1675
+ [18, 75, 47, 31, 76, 48],
1676
+ [34, 54, 24, 34, 55, 25],
1677
+ [20, 45, 15, 61, 46, 16]
1678
+ ];
1679
+
1680
+ var qrRSBlock = function(totalCount, dataCount) {
1681
+ var _this = {};
1682
+ _this.totalCount = totalCount;
1683
+ _this.dataCount = dataCount;
1684
+ return _this;
1685
+ };
1686
+
1687
+ var _this = {};
1688
+
1689
+ var getRsBlockTable = function(typeNumber, errorCorrectLevel) {
1690
+
1691
+ switch(errorCorrectLevel) {
1692
+ case QRErrorCorrectLevel.L :
1693
+ return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
1694
+ case QRErrorCorrectLevel.M :
1695
+ return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
1696
+ case QRErrorCorrectLevel.Q :
1697
+ return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
1698
+ case QRErrorCorrectLevel.H :
1699
+ return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
1700
+ default :
1701
+ return undefined;
1702
+ }
1703
+ };
1704
+
1705
+ _this.getRSBlocks = function(typeNumber, errorCorrectLevel) {
1706
+
1707
+ var rsBlock = getRsBlockTable(typeNumber, errorCorrectLevel);
1708
+
1709
+ if (typeof rsBlock == 'undefined') {
1710
+ throw new Error('bad rs block @ typeNumber:' + typeNumber +
1711
+ '/errorCorrectLevel:' + errorCorrectLevel);
1712
+ }
1713
+
1714
+ var length = rsBlock.length / 3;
1715
+
1716
+ var list = new Array();
1717
+
1718
+ for (var i = 0; i < length; i += 1) {
1719
+
1720
+ var count = rsBlock[i * 3 + 0];
1721
+ var totalCount = rsBlock[i * 3 + 1];
1722
+ var dataCount = rsBlock[i * 3 + 2];
1723
+
1724
+ for (var j = 0; j < count; j += 1) {
1725
+ list.push(qrRSBlock(totalCount, dataCount) );
1726
+ }
1727
+ }
1728
+
1729
+ return list;
1730
+ };
1731
+
1732
+ return _this;
1733
+ }();
1734
+
1735
+ //---------------------------------------------------------------------
1736
+ // qrBitBuffer
1737
+ //---------------------------------------------------------------------
1738
+
1739
+ var qrBitBuffer = function() {
1740
+
1741
+ var _buffer = new Array();
1742
+ var _length = 0;
1743
+
1744
+ var _this = {};
1745
+
1746
+ _this.getBuffer = function() {
1747
+ return _buffer;
1748
+ };
1749
+
1750
+ _this.getAt = function(index) {
1751
+ var bufIndex = Math.floor(index / 8);
1752
+ return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;
1753
+ };
1754
+
1755
+ _this.put = function(num, length) {
1756
+ for (var i = 0; i < length; i += 1) {
1757
+ _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);
1758
+ }
1759
+ };
1760
+
1761
+ _this.getLengthInBits = function() {
1762
+ return _length;
1763
+ };
1764
+
1765
+ _this.putBit = function(bit) {
1766
+
1767
+ var bufIndex = Math.floor(_length / 8);
1768
+ if (_buffer.length <= bufIndex) {
1769
+ _buffer.push(0);
1770
+ }
1771
+
1772
+ if (bit) {
1773
+ _buffer[bufIndex] |= (0x80 >>> (_length % 8) );
1774
+ }
1775
+
1776
+ _length += 1;
1777
+ };
1778
+
1779
+ return _this;
1780
+ };
1781
+
1782
+ //---------------------------------------------------------------------
1783
+ // qr8BitByte
1784
+ //---------------------------------------------------------------------
1785
+
1786
+ var qr8BitByte = function(data) {
1787
+
1788
+ var _mode = QRMode.MODE_8BIT_BYTE;
1789
+ var _data = data;
1790
+ var _bytes = qrcode.stringToBytes(data);
1791
+
1792
+ var _this = {};
1793
+
1794
+ _this.getMode = function() {
1795
+ return _mode;
1796
+ };
1797
+
1798
+ _this.getLength = function(buffer) {
1799
+ return _bytes.length;
1800
+ };
1801
+
1802
+ _this.write = function(buffer) {
1803
+ for (var i = 0; i < _bytes.length; i += 1) {
1804
+ buffer.put(_bytes[i], 8);
1805
+ }
1806
+ };
1807
+
1808
+ return _this;
1809
+ };
1810
+
1811
+ //=====================================================================
1812
+ // GIF Support etc.
1813
+ //
1814
+
1815
+ //---------------------------------------------------------------------
1816
+ // byteArrayOutputStream
1817
+ //---------------------------------------------------------------------
1818
+
1819
+ var byteArrayOutputStream = function() {
1820
+
1821
+ var _bytes = new Array();
1822
+
1823
+ var _this = {};
1824
+
1825
+ _this.writeByte = function(b) {
1826
+ _bytes.push(b & 0xff);
1827
+ };
1828
+
1829
+ _this.writeShort = function(i) {
1830
+ _this.writeByte(i);
1831
+ _this.writeByte(i >>> 8);
1832
+ };
1833
+
1834
+ _this.writeBytes = function(b, off, len) {
1835
+ off = off || 0;
1836
+ len = len || b.length;
1837
+ for (var i = 0; i < len; i += 1) {
1838
+ _this.writeByte(b[i + off]);
1839
+ }
1840
+ };
1841
+
1842
+ _this.writeString = function(s) {
1843
+ for (var i = 0; i < s.length; i += 1) {
1844
+ _this.writeByte(s.charCodeAt(i) );
1845
+ }
1846
+ };
1847
+
1848
+ _this.toByteArray = function() {
1849
+ return _bytes;
1850
+ };
1851
+
1852
+ _this.toString = function() {
1853
+ var s = '';
1854
+ s += '[';
1855
+ for (var i = 0; i < _bytes.length; i += 1) {
1856
+ if (i > 0) {
1857
+ s += ',';
1858
+ }
1859
+ s += _bytes[i];
1860
+ }
1861
+ s += ']';
1862
+ return s;
1863
+ };
1864
+
1865
+ return _this;
1866
+ };
1867
+
1868
+ //---------------------------------------------------------------------
1869
+ // base64EncodeOutputStream
1870
+ //---------------------------------------------------------------------
1871
+
1872
+ var base64EncodeOutputStream = function() {
1873
+
1874
+ var _buffer = 0;
1875
+ var _buflen = 0;
1876
+ var _length = 0;
1877
+ var _base64 = '';
1878
+
1879
+ var _this = {};
1880
+
1881
+ var writeEncoded = function(b) {
1882
+ _base64 += String.fromCharCode(encode(b & 0x3f) );
1883
+ };
1884
+
1885
+ var encode = function(n) {
1886
+ if (n < 0) {
1887
+ // error.
1888
+ } else if (n < 26) {
1889
+ return 0x41 + n;
1890
+ } else if (n < 52) {
1891
+ return 0x61 + (n - 26);
1892
+ } else if (n < 62) {
1893
+ return 0x30 + (n - 52);
1894
+ } else if (n == 62) {
1895
+ return 0x2b;
1896
+ } else if (n == 63) {
1897
+ return 0x2f;
1898
+ }
1899
+ throw new Error('n:' + n);
1900
+ };
1901
+
1902
+ _this.writeByte = function(n) {
1903
+
1904
+ _buffer = (_buffer << 8) | (n & 0xff);
1905
+ _buflen += 8;
1906
+ _length += 1;
1907
+
1908
+ while (_buflen >= 6) {
1909
+ writeEncoded(_buffer >>> (_buflen - 6) );
1910
+ _buflen -= 6;
1911
+ }
1912
+ };
1913
+
1914
+ _this.flush = function() {
1915
+
1916
+ if (_buflen > 0) {
1917
+ writeEncoded(_buffer << (6 - _buflen) );
1918
+ _buffer = 0;
1919
+ _buflen = 0;
1920
+ }
1921
+
1922
+ if (_length % 3 != 0) {
1923
+ // padding
1924
+ var padlen = 3 - _length % 3;
1925
+ for (var i = 0; i < padlen; i += 1) {
1926
+ _base64 += '=';
1927
+ }
1928
+ }
1929
+ };
1930
+
1931
+ _this.toString = function() {
1932
+ return _base64;
1933
+ };
1934
+
1935
+ return _this;
1936
+ };
1937
+
1938
+ //---------------------------------------------------------------------
1939
+ // base64DecodeInputStream
1940
+ //---------------------------------------------------------------------
1941
+
1942
+ var base64DecodeInputStream = function(str) {
1943
+
1944
+ var _str = str;
1945
+ var _pos = 0;
1946
+ var _buffer = 0;
1947
+ var _buflen = 0;
1948
+
1949
+ var _this = {};
1950
+
1951
+ _this.read = function() {
1952
+
1953
+ while (_buflen < 8) {
1954
+
1955
+ if (_pos >= _str.length) {
1956
+ if (_buflen == 0) {
1957
+ return -1;
1958
+ }
1959
+ throw new Error('unexpected end of file./' + _buflen);
1960
+ }
1961
+
1962
+ var c = _str.charAt(_pos);
1963
+ _pos += 1;
1964
+
1965
+ if (c == '=') {
1966
+ _buflen = 0;
1967
+ return -1;
1968
+ } else if (c.match(/^\s$/) ) {
1969
+ // ignore if whitespace.
1970
+ continue;
1971
+ }
1972
+
1973
+ _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );
1974
+ _buflen += 6;
1975
+ }
1976
+
1977
+ var n = (_buffer >>> (_buflen - 8) ) & 0xff;
1978
+ _buflen -= 8;
1979
+ return n;
1980
+ };
1981
+
1982
+ var decode = function(c) {
1983
+ if (0x41 <= c && c <= 0x5a) {
1984
+ return c - 0x41;
1985
+ } else if (0x61 <= c && c <= 0x7a) {
1986
+ return c - 0x61 + 26;
1987
+ } else if (0x30 <= c && c <= 0x39) {
1988
+ return c - 0x30 + 52;
1989
+ } else if (c == 0x2b) {
1990
+ return 62;
1991
+ } else if (c == 0x2f) {
1992
+ return 63;
1993
+ } else {
1994
+ throw new Error('c:' + c);
1995
+ }
1996
+ };
1997
+
1998
+ return _this;
1999
+ };
2000
+
2001
+ //---------------------------------------------------------------------
2002
+ // gifImage (B/W)
2003
+ //---------------------------------------------------------------------
2004
+
2005
+ var gifImage = function(width, height) {
2006
+
2007
+ var _width = width;
2008
+ var _height = height;
2009
+ var _data = new Array(width * height);
2010
+
2011
+ var _this = {};
2012
+
2013
+ _this.setPixel = function(x, y, pixel) {
2014
+ _data[y * _width + x] = pixel;
2015
+ };
2016
+
2017
+ _this.write = function(out) {
2018
+
2019
+ //---------------------------------
2020
+ // GIF Signature
2021
+
2022
+ out.writeString('GIF87a');
2023
+
2024
+ //---------------------------------
2025
+ // Screen Descriptor
2026
+
2027
+ out.writeShort(_width);
2028
+ out.writeShort(_height);
2029
+
2030
+ out.writeByte(0x80); // 2bit
2031
+ out.writeByte(0);
2032
+ out.writeByte(0);
2033
+
2034
+ //---------------------------------
2035
+ // Global Color Map
2036
+
2037
+ // black
2038
+ out.writeByte(0x00);
2039
+ out.writeByte(0x00);
2040
+ out.writeByte(0x00);
2041
+
2042
+ // white
2043
+ out.writeByte(0xff);
2044
+ out.writeByte(0xff);
2045
+ out.writeByte(0xff);
2046
+
2047
+ //---------------------------------
2048
+ // Image Descriptor
2049
+
2050
+ out.writeString(',');
2051
+ out.writeShort(0);
2052
+ out.writeShort(0);
2053
+ out.writeShort(_width);
2054
+ out.writeShort(_height);
2055
+ out.writeByte(0);
2056
+
2057
+ //---------------------------------
2058
+ // Local Color Map
2059
+
2060
+ //---------------------------------
2061
+ // Raster Data
2062
+
2063
+ var lzwMinCodeSize = 2;
2064
+ var raster = getLZWRaster(lzwMinCodeSize);
2065
+
2066
+ out.writeByte(lzwMinCodeSize);
2067
+
2068
+ var offset = 0;
2069
+
2070
+ while (raster.length - offset > 255) {
2071
+ out.writeByte(255);
2072
+ out.writeBytes(raster, offset, 255);
2073
+ offset += 255;
2074
+ }
2075
+
2076
+ out.writeByte(raster.length - offset);
2077
+ out.writeBytes(raster, offset, raster.length - offset);
2078
+ out.writeByte(0x00);
2079
+
2080
+ //---------------------------------
2081
+ // GIF Terminator
2082
+ out.writeString(';');
2083
+ };
2084
+
2085
+ var bitOutputStream = function(out) {
2086
+
2087
+ var _out = out;
2088
+ var _bitLength = 0;
2089
+ var _bitBuffer = 0;
2090
+
2091
+ var _this = {};
2092
+
2093
+ _this.write = function(data, length) {
2094
+
2095
+ if ( (data >>> length) != 0) {
2096
+ throw new Error('length over');
2097
+ }
2098
+
2099
+ while (_bitLength + length >= 8) {
2100
+ _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );
2101
+ length -= (8 - _bitLength);
2102
+ data >>>= (8 - _bitLength);
2103
+ _bitBuffer = 0;
2104
+ _bitLength = 0;
2105
+ }
2106
+
2107
+ _bitBuffer = (data << _bitLength) | _bitBuffer;
2108
+ _bitLength = _bitLength + length;
2109
+ };
2110
+
2111
+ _this.flush = function() {
2112
+ if (_bitLength > 0) {
2113
+ _out.writeByte(_bitBuffer);
2114
+ }
2115
+ };
2116
+
2117
+ return _this;
2118
+ };
2119
+
2120
+ var getLZWRaster = function(lzwMinCodeSize) {
2121
+
2122
+ var clearCode = 1 << lzwMinCodeSize;
2123
+ var endCode = (1 << lzwMinCodeSize) + 1;
2124
+ var bitLength = lzwMinCodeSize + 1;
2125
+
2126
+ // Setup LZWTable
2127
+ var table = lzwTable();
2128
+
2129
+ for (var i = 0; i < clearCode; i += 1) {
2130
+ table.add(String.fromCharCode(i) );
2131
+ }
2132
+ table.add(String.fromCharCode(clearCode) );
2133
+ table.add(String.fromCharCode(endCode) );
2134
+
2135
+ var byteOut = byteArrayOutputStream();
2136
+ var bitOut = bitOutputStream(byteOut);
2137
+
2138
+ // clear code
2139
+ bitOut.write(clearCode, bitLength);
2140
+
2141
+ var dataIndex = 0;
2142
+
2143
+ var s = String.fromCharCode(_data[dataIndex]);
2144
+ dataIndex += 1;
2145
+
2146
+ while (dataIndex < _data.length) {
2147
+
2148
+ var c = String.fromCharCode(_data[dataIndex]);
2149
+ dataIndex += 1;
2150
+
2151
+ if (table.contains(s + c) ) {
2152
+
2153
+ s = s + c;
2154
+
2155
+ } else {
2156
+
2157
+ bitOut.write(table.indexOf(s), bitLength);
2158
+
2159
+ if (table.size() < 0xfff) {
2160
+
2161
+ if (table.size() == (1 << bitLength) ) {
2162
+ bitLength += 1;
2163
+ }
2164
+
2165
+ table.add(s + c);
2166
+ }
2167
+
2168
+ s = c;
2169
+ }
2170
+ }
2171
+
2172
+ bitOut.write(table.indexOf(s), bitLength);
2173
+
2174
+ // end code
2175
+ bitOut.write(endCode, bitLength);
2176
+
2177
+ bitOut.flush();
2178
+
2179
+ return byteOut.toByteArray();
2180
+ };
2181
+
2182
+ var lzwTable = function() {
2183
+
2184
+ var _map = {};
2185
+ var _size = 0;
2186
+
2187
+ var _this = {};
2188
+
2189
+ _this.add = function(key) {
2190
+ if (_this.contains(key) ) {
2191
+ throw new Error('dup key:' + key);
2192
+ }
2193
+ _map[key] = _size;
2194
+ _size += 1;
2195
+ };
2196
+
2197
+ _this.size = function() {
2198
+ return _size;
2199
+ };
2200
+
2201
+ _this.indexOf = function(key) {
2202
+ return _map[key];
2203
+ };
2204
+
2205
+ _this.contains = function(key) {
2206
+ return typeof _map[key] != 'undefined';
2207
+ };
2208
+
2209
+ return _this;
2210
+ };
2211
+
2212
+ return _this;
2213
+ };
2214
+
2215
+ var createImgTag = function(width, height, getPixel, alt) {
2216
+
2217
+ var gif = gifImage(width, height);
2218
+ for (var y = 0; y < height; y += 1) {
2219
+ for (var x = 0; x < width; x += 1) {
2220
+ gif.setPixel(x, y, getPixel(x, y) );
2221
+ }
2222
+ }
2223
+
2224
+ var b = byteArrayOutputStream();
2225
+ gif.write(b);
2226
+
2227
+ var base64 = base64EncodeOutputStream();
2228
+ var bytes = b.toByteArray();
2229
+ for (var i = 0; i < bytes.length; i += 1) {
2230
+ base64.writeByte(bytes[i]);
2231
+ }
2232
+ base64.flush();
2233
+
2234
+ var img = '';
2235
+ img += '<img';
2236
+ img += '\u0020src="';
2237
+ img += 'data:image/gif;base64,';
2238
+ img += base64;
2239
+ img += '"';
2240
+ img += '\u0020width="';
2241
+ img += width;
2242
+ img += '"';
2243
+ img += '\u0020height="';
2244
+ img += height;
2245
+ img += '"';
2246
+ if (alt) {
2247
+ img += '\u0020alt="';
2248
+ img += alt;
2249
+ img += '"';
2250
+ }
2251
+ img += '/>';
2252
+
2253
+ return img;
2254
+ };
2255
+
2256
+ //---------------------------------------------------------------------
2257
+ // returns qrcode function.
2258
+
2259
+ return qrcode;
2260
+ }();
2261
+
2262
+ (function (factory) {
2263
+ if (typeof define === 'function' && define.amd) {
2264
+ define([], factory);
2265
+ } else if (typeof exports === 'object') {
2266
+ module.exports = factory();
2267
+ }
2268
+ }(function () {
2269
+ return qrcode;
2270
+ }));
2271
+ //---------------------------------------------------------------------
2272
+ //
2273
+ // QR Code Generator for JavaScript UTF8 Support (optional)
2274
+ //
2275
+ // Copyright (c) 2011 Kazuhiko Arase
2276
+ //
2277
+ // URL: http://www.d-project.com/
2278
+ //
2279
+ // Licensed under the MIT license:
2280
+ // http://www.opensource.org/licenses/mit-license.php
2281
+ //
2282
+ // The word 'QR Code' is registered trademark of
2283
+ // DENSO WAVE INCORPORATED
2284
+ // http://www.denso-wave.com/qrcode/faqpatent-e.html
2285
+ //
2286
+ //---------------------------------------------------------------------
2287
+
2288
+ !function(qrcode) {
2289
+
2290
+ //---------------------------------------------------------------------
2291
+ // overwrite qrcode.stringToBytes
2292
+ //---------------------------------------------------------------------
2293
+
2294
+ qrcode.stringToBytes = function(s) {
2295
+ // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array
2296
+ function toUTF8Array(str) {
2297
+ var utf8 = [];
2298
+ for (var i=0; i < str.length; i++) {
2299
+ var charcode = str.charCodeAt(i);
2300
+ if (charcode < 0x80) utf8.push(charcode);
2301
+ else if (charcode < 0x800) {
2302
+ utf8.push(0xc0 | (charcode >> 6),
2303
+ 0x80 | (charcode & 0x3f));
2304
+ }
2305
+ else if (charcode < 0xd800 || charcode >= 0xe000) {
2306
+ utf8.push(0xe0 | (charcode >> 12),
2307
+ 0x80 | ((charcode>>6) & 0x3f),
2308
+ 0x80 | (charcode & 0x3f));
2309
+ }
2310
+ // surrogate pair
2311
+ else {
2312
+ i++;
2313
+ // UTF-16 encodes 0x10000-0x10FFFF by
2314
+ // subtracting 0x10000 and splitting the
2315
+ // 20 bits of 0x0-0xFFFFF into two halves
2316
+ charcode = 0x10000 + (((charcode & 0x3ff)<<10)
2317
+ | (str.charCodeAt(i) & 0x3ff));
2318
+ utf8.push(0xf0 | (charcode >>18),
2319
+ 0x80 | ((charcode>>12) & 0x3f),
2320
+ 0x80 | ((charcode>>6) & 0x3f),
2321
+ 0x80 | (charcode & 0x3f));
2322
+ }
2323
+ }
2324
+ return utf8;
2325
+ }
2326
+ return toUTF8Array(s);
2327
+ };
2328
+
2329
+ }(qrcode);
2330
+
2331
+ return qrcode; // eslint-disable-line no-undef
2332
+ }()));
includes/jquery-qrcode/jquery-qrcode.min.js.orig ADDED
@@ -0,0 +1,2 @@
 
 
1
+ /*! jquery-qrcode v0.14.0 - https://larsjung.de/jquery-qrcode/ */
2
+ !function(r){"use strict";function t(t,e,n,o){function a(r,t){return r-=o,t-=o,0>r||r>=c||0>t||t>=c?!1:f.isDark(r,t)}function i(r,t,e,n){var o=u.isDark,a=1/l;u.isDark=function(i,u){var f=u*a,c=i*a,l=f+a,g=c+a;return o(i,u)&&(r>l||f>e||t>g||c>n)}}var u={},f=r(n,e);f.addData(t),f.make(),o=o||0;var c=f.getModuleCount(),l=f.getModuleCount()+2*o;return u.text=t,u.level=e,u.version=n,u.moduleCount=l,u.isDark=a,u.addBlank=i,u}function e(r,e,n,o,a){n=Math.max(1,n||1),o=Math.min(40,o||40);for(var i=n;o>=i;i+=1)try{return t(r,e,i,a)}catch(u){}}function n(r,t,e){var n=e.size,o="bold "+e.mSize*n+"px "+e.fontname,a=w("<canvas/>")[0].getContext("2d");a.font=o;var i=a.measureText(e.label).width,u=e.mSize,f=i/n,c=(1-f)*e.mPosX,l=(1-u)*e.mPosY,g=c+f,s=l+u,v=.01;1===e.mode?r.addBlank(0,l-v,n,s+v):r.addBlank(c-v,l-v,g+v,s+v),t.fillStyle=e.fontcolor,t.font=o,t.fillText(e.label,c*n,l*n+.75*e.mSize*n)}function o(r,t,e){var n=e.size,o=e.image.naturalWidth||1,a=e.image.naturalHeight||1,i=e.mSize,u=i*o/a,f=(1-u)*e.mPosX,c=(1-i)*e.mPosY,l=f+u,g=c+i,s=.01;3===e.mode?r.addBlank(0,c-s,n,g+s):r.addBlank(f-s,c-s,l+s,g+s),t.drawImage(e.image,f*n,c*n,u*n,i*n)}function a(r,t,e){w(e.background).is("img")?t.drawImage(e.background,0,0,e.size,e.size):e.background&&(t.fillStyle=e.background,t.fillRect(e.left,e.top,e.size,e.size));var a=e.mode;1===a||2===a?n(r,t,e):(3===a||4===a)&&o(r,t,e)}function i(r,t,e,n,o,a,i,u){r.isDark(i,u)&&t.rect(n,o,a,a)}function u(r,t,e,n,o,a,i,u,f,c){i?r.moveTo(t+a,e):r.moveTo(t,e),u?(r.lineTo(n-a,e),r.arcTo(n,e,n,o,a)):r.lineTo(n,e),f?(r.lineTo(n,o-a),r.arcTo(n,o,t,o,a)):r.lineTo(n,o),c?(r.lineTo(t+a,o),r.arcTo(t,o,t,e,a)):r.lineTo(t,o),i?(r.lineTo(t,e+a),r.arcTo(t,e,n,e,a)):r.lineTo(t,e)}function f(r,t,e,n,o,a,i,u,f,c){i&&(r.moveTo(t+a,e),r.lineTo(t,e),r.lineTo(t,e+a),r.arcTo(t,e,t+a,e,a)),u&&(r.moveTo(n-a,e),r.lineTo(n,e),r.lineTo(n,e+a),r.arcTo(n,e,n-a,e,a)),f&&(r.moveTo(n-a,o),r.lineTo(n,o),r.lineTo(n,o-a),r.arcTo(n,o,n-a,o,a)),c&&(r.moveTo(t+a,o),r.lineTo(t,o),r.lineTo(t,o-a),r.arcTo(t,o,t+a,o,a))}function c(r,t,e,n,o,a,i,c){var l=r.isDark,g=n+a,s=o+a,v=e.radius*a,h=i-1,d=i+1,w=c-1,m=c+1,y=l(i,c),T=l(h,w),p=l(h,c),B=l(h,m),A=l(i,m),E=l(d,m),k=l(d,c),M=l(d,w),C=l(i,w);y?u(t,n,o,g,s,v,!p&&!C,!p&&!A,!k&&!A,!k&&!C):f(t,n,o,g,s,v,p&&C&&T,p&&A&&B,k&&A&&E,k&&C&&M)}function l(r,t,e){var n,o,a=r.moduleCount,u=e.size/a,f=i;for(e.radius>0&&e.radius<=.5&&(f=c),t.beginPath(),n=0;a>n;n+=1)for(o=0;a>o;o+=1){var l=e.left+o*u,g=e.top+n*u,s=u;f(r,t,e,l,g,s,n,o)}if(w(e.fill).is("img")){t.strokeStyle="rgba(0,0,0,0.5)",t.lineWidth=2,t.stroke();var v=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",t.fill(),t.globalCompositeOperation=v,t.clip(),t.drawImage(e.fill,0,0,e.size,e.size),t.restore()}else t.fillStyle=e.fill,t.fill()}function g(r,t){var n=e(t.text,t.ecLevel,t.minVersion,t.maxVersion,t.quiet);if(!n)return null;var o=w(r).data("qrcode",n),i=o[0].getContext("2d");return a(n,i,t),l(n,i,t),o}function s(r){var t=w("<canvas/>").attr("width",r.size).attr("height",r.size);return g(t,r)}function v(r){return w("<img/>").attr("src",s(r)[0].toDataURL("image/png"))}function h(r){var t=e(r.text,r.ecLevel,r.minVersion,r.maxVersion,r.quiet);if(!t)return null;var n,o,a=r.size,i=r.background,u=Math.floor,f=t.moduleCount,c=u(a/f),l=u(.5*(a-c*f)),g={position:"relative",left:0,top:0,padding:0,margin:0,width:a,height:a},s={position:"absolute",padding:0,margin:0,width:c,height:c,"background-color":r.fill},v=w("<div/>").data("qrcode",t).css(g);for(i&&v.css("background-color",i),n=0;f>n;n+=1)for(o=0;f>o;o+=1)t.isDark(n,o)&&w("<div/>").css(s).css({left:l+o*c,top:l+n*c}).appendTo(v);return v}function d(r){return m&&"canvas"===r.render?s(r):m&&"image"===r.render?v(r):h(r)}var w=window.jQuery,m=function(){var r=document.createElement("canvas");return!(!r.getContext||!r.getContext("2d"))}(),y={render:"canvas",minVersion:1,maxVersion:40,ecLevel:"L",left:0,top:0,size:200,fill:"#000",background:null,text:"no text",radius:0,quiet:0,mode:0,mSize:.1,mPosX:.5,mPosY:.5,label:"no label",fontname:"sans",fontcolor:"#000",image:null};w.fn.qrcode=function(r){var t=w.extend({},y,r);return this.each(function(r,e){"canvas"===e.nodeName.toLowerCase()?g(e,t):w(e).append(d(t))})}}(function(){var r=function(){function r(t,e){if("undefined"==typeof t.length)throw new Error(t.length+"/"+e);var n=function(){for(var r=0;r<t.length&&0==t[r];)r+=1;for(var n=new Array(t.length-r+e),o=0;o<t.length-r;o+=1)n[o]=t[o+r];return n}(),o={};return o.getAt=function(r){return n[r]},o.getLength=function(){return n.length},o.multiply=function(t){for(var e=new Array(o.getLength()+t.getLength()-1),n=0;n<o.getLength();n+=1)for(var a=0;a<t.getLength();a+=1)e[n+a]^=i.gexp(i.glog(o.getAt(n))+i.glog(t.getAt(a)));return r(e,0)},o.mod=function(t){if(o.getLength()-t.getLength()<0)return o;for(var e=i.glog(o.getAt(0))-i.glog(t.getAt(0)),n=new Array(o.getLength()),a=0;a<o.getLength();a+=1)n[a]=o.getAt(a);for(var a=0;a<t.getLength();a+=1)n[a]^=i.gexp(i.glog(t.getAt(a))+e);return r(n,0).mod(t)},o}var t=function(t,e){var o=236,i=17,l=t,g=n[e],s=null,v=0,d=null,w=new Array,m={},y=function(r,t){v=4*l+17,s=function(r){for(var t=new Array(r),e=0;r>e;e+=1){t[e]=new Array(r);for(var n=0;r>n;n+=1)t[e][n]=null}return t}(v),T(0,0),T(v-7,0),T(0,v-7),A(),B(),k(r,t),l>=7&&E(r),null==d&&(d=D(l,g,w)),M(d,t)},T=function(r,t){for(var e=-1;7>=e;e+=1)if(!(-1>=r+e||r+e>=v))for(var n=-1;7>=n;n+=1)-1>=t+n||t+n>=v||(e>=0&&6>=e&&(0==n||6==n)||n>=0&&6>=n&&(0==e||6==e)||e>=2&&4>=e&&n>=2&&4>=n?s[r+e][t+n]=!0:s[r+e][t+n]=!1)},p=function(){for(var r=0,t=0,e=0;8>e;e+=1){y(!0,e);var n=a.getLostPoint(m);(0==e||r>n)&&(r=n,t=e)}return t},B=function(){for(var r=8;v-8>r;r+=1)null==s[r][6]&&(s[r][6]=r%2==0);for(var t=8;v-8>t;t+=1)null==s[6][t]&&(s[6][t]=t%2==0)},A=function(){for(var r=a.getPatternPosition(l),t=0;t<r.length;t+=1)for(var e=0;e<r.length;e+=1){var n=r[t],o=r[e];if(null==s[n][o])for(var i=-2;2>=i;i+=1)for(var u=-2;2>=u;u+=1)-2==i||2==i||-2==u||2==u||0==i&&0==u?s[n+i][o+u]=!0:s[n+i][o+u]=!1}},E=function(r){for(var t=a.getBCHTypeNumber(l),e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);s[Math.floor(e/3)][e%3+v-8-3]=n}for(var e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);s[e%3+v-8-3][Math.floor(e/3)]=n}},k=function(r,t){for(var e=g<<3|t,n=a.getBCHTypeInfo(e),o=0;15>o;o+=1){var i=!r&&1==(n>>o&1);6>o?s[o][8]=i:8>o?s[o+1][8]=i:s[v-15+o][8]=i}for(var o=0;15>o;o+=1){var i=!r&&1==(n>>o&1);8>o?s[8][v-o-1]=i:9>o?s[8][15-o-1+1]=i:s[8][15-o-1]=i}s[v-8][8]=!r},M=function(r,t){for(var e=-1,n=v-1,o=7,i=0,u=a.getMaskFunction(t),f=v-1;f>0;f-=2)for(6==f&&(f-=1);;){for(var c=0;2>c;c+=1)if(null==s[n][f-c]){var l=!1;i<r.length&&(l=1==(r[i]>>>o&1));var g=u(n,f-c);g&&(l=!l),s[n][f-c]=l,o-=1,-1==o&&(i+=1,o=7)}if(n+=e,0>n||n>=v){n-=e,e=-e;break}}},C=function(t,e){for(var n=0,o=0,i=0,u=new Array(e.length),f=new Array(e.length),c=0;c<e.length;c+=1){var l=e[c].dataCount,g=e[c].totalCount-l;o=Math.max(o,l),i=Math.max(i,g),u[c]=new Array(l);for(var s=0;s<u[c].length;s+=1)u[c][s]=255&t.getBuffer()[s+n];n+=l;var v=a.getErrorCorrectPolynomial(g),h=r(u[c],v.getLength()-1),d=h.mod(v);f[c]=new Array(v.getLength()-1);for(var s=0;s<f[c].length;s+=1){var w=s+d.getLength()-f[c].length;f[c][s]=w>=0?d.getAt(w):0}}for(var m=0,s=0;s<e.length;s+=1)m+=e[s].totalCount;for(var y=new Array(m),T=0,s=0;o>s;s+=1)for(var c=0;c<e.length;c+=1)s<u[c].length&&(y[T]=u[c][s],T+=1);for(var s=0;i>s;s+=1)for(var c=0;c<e.length;c+=1)s<f[c].length&&(y[T]=f[c][s],T+=1);return y},D=function(r,t,e){for(var n=u.getRSBlocks(r,t),c=f(),l=0;l<e.length;l+=1){var g=e[l];c.put(g.getMode(),4),c.put(g.getLength(),a.getLengthInBits(g.getMode(),r)),g.write(c)}for(var s=0,l=0;l<n.length;l+=1)s+=n[l].dataCount;if(c.getLengthInBits()>8*s)throw new Error("code length overflow. ("+c.getLengthInBits()+">"+8*s+")");for(c.getLengthInBits()+4<=8*s&&c.put(0,4);c.getLengthInBits()%8!=0;)c.putBit(!1);for(;;){if(c.getLengthInBits()>=8*s)break;if(c.put(o,8),c.getLengthInBits()>=8*s)break;c.put(i,8)}return C(c,n)};return m.addData=function(r){var t=c(r);w.push(t),d=null},m.isDark=function(r,t){if(0>r||r>=v||0>t||t>=v)throw new Error(r+","+t);return s[r][t]},m.getModuleCount=function(){return v},m.make=function(){y(!1,p())},m.createTableTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e="";e+='<table style="',e+=" border-width: 0px; border-style: none;",e+=" border-collapse: collapse;",e+=" padding: 0px; margin: "+t+"px;",e+='">',e+="<tbody>";for(var n=0;n<m.getModuleCount();n+=1){e+="<tr>";for(var o=0;o<m.getModuleCount();o+=1)e+='<td style="',e+=" border-width: 0px; border-style: none;",e+=" border-collapse: collapse;",e+=" padding: 0px; margin: 0px;",e+=" width: "+r+"px;",e+=" height: "+r+"px;",e+=" background-color: ",e+=m.isDark(n,o)?"#000000":"#ffffff",e+=";",e+='"/>';e+="</tr>"}return e+="</tbody>",e+="</table>"},m.createImgTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e=m.getModuleCount()*r+2*t,n=t,o=e-t;return h(e,e,function(t,e){if(t>=n&&o>t&&e>=n&&o>e){var a=Math.floor((t-n)/r),i=Math.floor((e-n)/r);return m.isDark(i,a)?0:1}return 1})},m};t.stringToBytes=function(r){for(var t=new Array,e=0;e<r.length;e+=1){var n=r.charCodeAt(e);t.push(255&n)}return t},t.createStringToBytes=function(r,t){var e=function(){for(var e=s(r),n=function(){var r=e.read();if(-1==r)throw new Error;return r},o=0,a={};;){var i=e.read();if(-1==i)break;var u=n(),f=n(),c=n(),l=String.fromCharCode(i<<8|u),g=f<<8|c;a[l]=g,o+=1}if(o!=t)throw new Error(o+" != "+t);return a}(),n="?".charCodeAt(0);return function(r){for(var t=new Array,o=0;o<r.length;o+=1){var a=r.charCodeAt(o);if(128>a)t.push(a);else{var i=e[r.charAt(o)];"number"==typeof i?(255&i)==i?t.push(i):(t.push(i>>>8),t.push(255&i)):t.push(n)}}return t}};var e={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},n={L:1,M:0,Q:3,H:2},o={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},a=function(){var t=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],n=1335,a=7973,u=21522,f={},c=function(r){for(var t=0;0!=r;)t+=1,r>>>=1;return t};return f.getBCHTypeInfo=function(r){for(var t=r<<10;c(t)-c(n)>=0;)t^=n<<c(t)-c(n);return(r<<10|t)^u},f.getBCHTypeNumber=function(r){for(var t=r<<12;c(t)-c(a)>=0;)t^=a<<c(t)-c(a);return r<<12|t},f.getPatternPosition=function(r){return t[r-1]},f.getMaskFunction=function(r){switch(r){case o.PATTERN000:return function(r,t){return(r+t)%2==0};case o.PATTERN001:return function(r,t){return r%2==0};case o.PATTERN010:return function(r,t){return t%3==0};case o.PATTERN011:return function(r,t){return(r+t)%3==0};case o.PATTERN100:return function(r,t){return(Math.floor(r/2)+Math.floor(t/3))%2==0};case o.PATTERN101:return function(r,t){return r*t%2+r*t%3==0};case o.PATTERN110:return function(r,t){return(r*t%2+r*t%3)%2==0};case o.PATTERN111:return function(r,t){return(r*t%3+(r+t)%2)%2==0};default:throw new Error("bad maskPattern:"+r)}},f.getErrorCorrectPolynomial=function(t){for(var e=r([1],0),n=0;t>n;n+=1)e=e.multiply(r([1,i.gexp(n)],0));return e},f.getLengthInBits=function(r,t){if(t>=1&&10>t)switch(r){case e.MODE_NUMBER:return 10;case e.MODE_ALPHA_NUM:return 9;case e.MODE_8BIT_BYTE:return 8;case e.MODE_KANJI:return 8;default:throw new Error("mode:"+r)}else if(27>t)switch(r){case e.MODE_NUMBER:return 12;case e.MODE_ALPHA_NUM:return 11;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 10;default:throw new Error("mode:"+r)}else{if(!(41>t))throw new Error("type:"+t);switch(r){case e.MODE_NUMBER:return 14;case e.MODE_ALPHA_NUM:return 13;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 12;default:throw new Error("mode:"+r)}}},f.getLostPoint=function(r){for(var t=r.getModuleCount(),e=0,n=0;t>n;n+=1)for(var o=0;t>o;o+=1){for(var a=0,i=r.isDark(n,o),u=-1;1>=u;u+=1)if(!(0>n+u||n+u>=t))for(var f=-1;1>=f;f+=1)0>o+f||o+f>=t||(0!=u||0!=f)&&i==r.isDark(n+u,o+f)&&(a+=1);a>5&&(e+=3+a-5)}for(var n=0;t-1>n;n+=1)for(var o=0;t-1>o;o+=1){var c=0;r.isDark(n,o)&&(c+=1),r.isDark(n+1,o)&&(c+=1),r.isDark(n,o+1)&&(c+=1),r.isDark(n+1,o+1)&&(c+=1),(0==c||4==c)&&(e+=3)}for(var n=0;t>n;n+=1)for(var o=0;t-6>o;o+=1)r.isDark(n,o)&&!r.isDark(n,o+1)&&r.isDark(n,o+2)&&r.isDark(n,o+3)&&r.isDark(n,o+4)&&!r.isDark(n,o+5)&&r.isDark(n,o+6)&&(e+=40);for(var o=0;t>o;o+=1)for(var n=0;t-6>n;n+=1)r.isDark(n,o)&&!r.isDark(n+1,o)&&r.isDark(n+2,o)&&r.isDark(n+3,o)&&r.isDark(n+4,o)&&!r.isDark(n+5,o)&&r.isDark(n+6,o)&&(e+=40);for(var l=0,o=0;t>o;o+=1)for(var n=0;t>n;n+=1)r.isDark(n,o)&&(l+=1);var g=Math.abs(100*l/t/t-50)/5;return e+=10*g},f}(),i=function(){for(var r=new Array(256),t=new Array(256),e=0;8>e;e+=1)r[e]=1<<e;for(var e=8;256>e;e+=1)r[e]=r[e-4]^r[e-5]^r[e-6]^r[e-8];for(var e=0;255>e;e+=1)t[r[e]]=e;var n={};return n.glog=function(r){if(1>r)throw new Error("glog("+r+")");return t[r]},n.gexp=function(t){for(;0>t;)t+=255;for(;t>=256;)t-=255;return r[t]},n}(),u=function(){var r=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],t=function(r,t){var e={};return e.totalCount=r,e.dataCount=t,e},e={},o=function(t,e){switch(e){case n.L:return r[4*(t-1)+0];case n.M:return r[4*(t-1)+1];case n.Q:return r[4*(t-1)+2];case n.H:return r[4*(t-1)+3];default:return}};return e.getRSBlocks=function(r,e){var n=o(r,e);if("undefined"==typeof n)throw new Error("bad rs block @ typeNumber:"+r+"/errorCorrectLevel:"+e);for(var a=n.length/3,i=new Array,u=0;a>u;u+=1)for(var f=n[3*u+0],c=n[3*u+1],l=n[3*u+2],g=0;f>g;g+=1)i.push(t(c,l));return i},e}(),f=function(){var r=new Array,t=0,e={};return e.getBuffer=function(){return r},e.getAt=function(t){var e=Math.floor(t/8);return 1==(r[e]>>>7-t%8&1)},e.put=function(r,t){for(var n=0;t>n;n+=1)e.putBit(1==(r>>>t-n-1&1))},e.getLengthInBits=function(){return t},e.putBit=function(e){var n=Math.floor(t/8);r.length<=n&&r.push(0),e&&(r[n]|=128>>>t%8),t+=1},e},c=function(r){var n=e.MODE_8BIT_BYTE,o=t.stringToBytes(r),a={};return a.getMode=function(){return n},a.getLength=function(r){return o.length},a.write=function(r){for(var t=0;t<o.length;t+=1)r.put(o[t],8)},a},l=function(){var r=new Array,t={};return t.writeByte=function(t){r.push(255&t)},t.writeShort=function(r){t.writeByte(r),t.writeByte(r>>>8)},t.writeBytes=function(r,e,n){e=e||0,n=n||r.length;for(var o=0;n>o;o+=1)t.writeByte(r[o+e])},t.writeString=function(r){for(var e=0;e<r.length;e+=1)t.writeByte(r.charCodeAt(e))},t.toByteArray=function(){return r},t.toString=function(){var t="";t+="[";for(var e=0;e<r.length;e+=1)e>0&&(t+=","),t+=r[e];return t+="]"},t},g=function(){var r=0,t=0,e=0,n="",o={},a=function(r){n+=String.fromCharCode(i(63&r))},i=function(r){if(0>r);else{if(26>r)return 65+r;if(52>r)return 97+(r-26);if(62>r)return 48+(r-52);if(62==r)return 43;if(63==r)return 47}throw new Error("n:"+r)};return o.writeByte=function(n){for(r=r<<8|255&n,t+=8,e+=1;t>=6;)a(r>>>t-6),t-=6},o.flush=function(){if(t>0&&(a(r<<6-t),r=0,t=0),e%3!=0)for(var o=3-e%3,i=0;o>i;i+=1)n+="="},o.toString=function(){return n},o},s=function(r){var t=r,e=0,n=0,o=0,a={};a.read=function(){for(;8>o;){if(e>=t.length){if(0==o)return-1;throw new Error("unexpected end of file./"+o)}var r=t.charAt(e);if(e+=1,"="==r)return o=0,-1;r.match(/^\s$/)||(n=n<<6|i(r.charCodeAt(0)),o+=6)}var a=n>>>o-8&255;return o-=8,a};var i=function(r){if(r>=65&&90>=r)return r-65;if(r>=97&&122>=r)return r-97+26;if(r>=48&&57>=r)return r-48+52;if(43==r)return 62;if(47==r)return 63;throw new Error("c:"+r)};return a},v=function(r,t){var e=r,n=t,o=new Array(r*t),a={};a.setPixel=function(r,t,n){o[t*e+r]=n},a.write=function(r){r.writeString("GIF87a"),r.writeShort(e),r.writeShort(n),r.writeByte(128),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(255),r.writeByte(255),r.writeByte(255),r.writeString(","),r.writeShort(0),r.writeShort(0),r.writeShort(e),r.writeShort(n),r.writeByte(0);var t=2,o=u(t);r.writeByte(t);for(var a=0;o.length-a>255;)r.writeByte(255),r.writeBytes(o,a,255),a+=255;r.writeByte(o.length-a),r.writeBytes(o,a,o.length-a),r.writeByte(0),r.writeString(";")};var i=function(r){var t=r,e=0,n=0,o={};return o.write=function(r,o){if(r>>>o!=0)throw new Error("length over");for(;e+o>=8;)t.writeByte(255&(r<<e|n)),o-=8-e,r>>>=8-e,n=0,e=0;n=r<<e|n,e+=o},o.flush=function(){e>0&&t.writeByte(n)},o},u=function(r){for(var t=1<<r,e=(1<<r)+1,n=r+1,a=f(),u=0;t>u;u+=1)a.add(String.fromCharCode(u));a.add(String.fromCharCode(t)),a.add(String.fromCharCode(e));var c=l(),g=i(c);g.write(t,n);var s=0,v=String.fromCharCode(o[s]);for(s+=1;s<o.length;){var h=String.fromCharCode(o[s]);s+=1,a.contains(v+h)?v+=h:(g.write(a.indexOf(v),n),a.size()<4095&&(a.size()==1<<n&&(n+=1),a.add(v+h)),v=h)}return g.write(a.indexOf(v),n),g.write(e,n),g.flush(),c.toByteArray()},f=function(){var r={},t=0,e={};return e.add=function(n){if(e.contains(n))throw new Error("dup key:"+n);r[n]=t,t+=1},e.size=function(){return t},e.indexOf=function(t){return r[t]},e.contains=function(t){return"undefined"!=typeof r[t]},e};return a},h=function(r,t,e,n){for(var o=v(r,t),a=0;t>a;a+=1)for(var i=0;r>i;i+=1)o.setPixel(i,a,e(i,a));var u=l();o.write(u);for(var f=g(),c=u.toByteArray(),s=0;s<c.length;s+=1)f.writeByte(c[s]);f.flush();var h="";return h+="<img",h+=' src="',h+="data:image/gif;base64,",h+=f,h+='"',h+=' width="',h+=r,h+='"',h+=' height="',h+=t,h+='"',n&&(h+=' alt="',h+=n,h+='"'),h+="/>"};return t}();return function(r){"function"==typeof define&&define.amd?define([],r):"object"==typeof exports&&(module.exports=r())}(function(){return r}),!function(r){r.stringToBytes=function(r){function t(r){for(var t=[],e=0;e<r.length;e++){var n=r.charCodeAt(e);128>n?t.push(n):2048>n?t.push(192|n>>6,128|63&n):55296>n||n>=57344?t.push(224|n>>12,128|n>>6&63,128|63&n):(e++,n=65536+((1023&n)<<10|1023&r.charCodeAt(e)),t.push(240|n>>18,128|n>>12&63,128|n>>6&63,128|63&n))}return t}return t(r)}}(r),r}());
lang/miniorange-2-factor-authentication.pot ADDED
@@ -0,0 +1,1766 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #, fuzzy
2
+ msgid ""
3
+ msgstr ""
4
+ "Project-Id-Version: miniOrange 2 Factor Authentication\n"
5
+ "POT-Creation-Date: 2018-05-04 15:14+0530\n"
6
+ "PO-Revision-Date: 2017-11-08 17:27+0530\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: miniOrange\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 2.0.4\n"
13
+ "X-Poedit-Basepath: ..\n"
14
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
+ "Language: de\n"
16
+ "X-Poedit-SourceCharset: UTF-8\n"
17
+ "X-Poedit-KeywordsList: __;mo2f_lt\n"
18
+ "X-Poedit-SearchPath-0: .\n"
19
+
20
+ #: class-miniorange-2-factor-login.php:49
21
+ #: class-miniorange-2-factor-pass2fa-login.php:39
22
+ #: class-miniorange-2-factor-pass2fa-login.php:164
23
+ #: class-miniorange-2-factor-pass2fa-login.php:178
24
+ #: class-miniorange-2-factor-pass2fa-login.php:350
25
+ #: class-miniorange-2-factor-pass2fa-login.php:1032
26
+ msgid "ERROR"
27
+ msgstr ""
28
+
29
+ #: class-miniorange-2-factor-login.php:49
30
+ msgid "Login with password is disabled for you. Please Login using your phone."
31
+ msgstr ""
32
+
33
+ #: class-miniorange-2-factor-login.php:250
34
+ msgid "or"
35
+ msgstr ""
36
+
37
+ #: class-miniorange-2-factor-login.php:255
38
+ msgid "Username"
39
+ msgstr ""
40
+
41
+ #: class-miniorange-2-factor-login.php:260
42
+ msgid "Login with 2nd factor"
43
+ msgstr ""
44
+
45
+ #: class-miniorange-2-factor-pass2fa-login.php:39
46
+ #: class-miniorange-2-factor-pass2fa-login.php:137
47
+ #: class-miniorange-2-factor-pass2fa-login.php:164
48
+ #: class-miniorange-2-factor-pass2fa-login.php:178
49
+ #: class-miniorange-2-factor-pass2fa-login.php:350
50
+ msgid "Invalid Request."
51
+ msgstr ""
52
+
53
+ #: class-miniorange-2-factor-pass2fa-login.php:98
54
+ msgid "Please try again or contact your admin."
55
+ msgstr ""
56
+
57
+ #: class-miniorange-2-factor-pass2fa-login.php:106
58
+ #: class-miniorange-2-factor-pass2fa-login.php:114
59
+ msgid "Please login into your account using password."
60
+ msgstr ""
61
+
62
+ #: class-miniorange-2-factor-pass2fa-login.php:122
63
+ msgid "Invalid Username."
64
+ msgstr ""
65
+
66
+ #: class-miniorange-2-factor-pass2fa-login.php:137
67
+ msgid "ERROR "
68
+ msgstr ""
69
+
70
+ #: class-miniorange-2-factor-pass2fa-login.php:230
71
+ #: class-miniorange-2-factor-pass2fa-login.php:247
72
+ #: class-miniorange-2-factor-pass2fa-login.php:312
73
+ #: class-miniorange-2-factor-pass2fa-login.php:363
74
+ #: class-miniorange-2-factor-pass2fa-login.php:417
75
+ #: class-miniorange-2-factor-pass2fa-login.php:440
76
+ #: class-miniorange-2-factor-pass2fa-login.php:511
77
+ #: class-miniorange-2-factor-pass2fa-login.php:525
78
+ msgid "<strong>ERROR</strong>: Invalid Request."
79
+ msgstr ""
80
+
81
+ #: class-miniorange-2-factor-pass2fa-login.php:303
82
+ #: class-miniorange-2-factor-pass2fa-login.php:502
83
+ msgid "<strong>ERROR</strong>: Please try again.."
84
+ msgstr ""
85
+
86
+ #: class-miniorange-2-factor-pass2fa-login.php:336
87
+ #: class-miniorange-2-factor-pass2fa-login.php:341
88
+ msgid "<strong>ERROR</strong>: Please try again."
89
+ msgstr ""
90
+
91
+ #: class-miniorange-2-factor-pass2fa-login.php:482
92
+ msgid "<strong>ERROR</strong>: Invalid Request. Please try again."
93
+ msgstr ""
94
+
95
+ #: class-miniorange-2-factor-pass2fa-login.php:615
96
+ #: class-miniorange-2-factor-pass2fa-login.php:622
97
+ #: class-miniorange-2-factor-pass2fa-login.php:793
98
+ #: class-miniorange-2-factor-pass2fa-login.php:800
99
+ #: class-miniorange-2-factor-pass2fa-login.php:837
100
+ #: class-miniorange-2-factor-pass2fa-login.php:886
101
+ msgid "<strong>ERROR</strong>: An error occured while processing your request. Please Try again."
102
+ msgstr ""
103
+
104
+ #: class-miniorange-2-factor-pass2fa-login.php:976
105
+ msgid "<strong>ERROR</strong>: Two Factor method has not been configured."
106
+ msgstr ""
107
+
108
+ #: class-miniorange-2-factor-pass2fa-login.php:1022
109
+ msgid "Bad login/pass combination."
110
+ msgstr ""
111
+
112
+ #: class-miniorange-2-factor-pass2fa-login.php:1032
113
+ msgid "Invalid Username or password."
114
+ msgstr ""
115
+
116
+ #: class-miniorange-2-factor-user-registration.php:87
117
+ msgid "Warning: "
118
+ msgstr ""
119
+
120
+ #: class-miniorange-2-factor-user-registration.php:89
121
+ #: miniorange_2_factor_configuration.php:7
122
+ msgid "PHP CURL extension"
123
+ msgstr ""
124
+
125
+ #: class-miniorange-2-factor-user-registration.php:89
126
+ #: miniorange_2_factor_configuration.php:7
127
+ msgid "is not installed or disabled"
128
+ msgstr ""
129
+
130
+ #: class-miniorange-2-factor-user-registration.php:104
131
+ #: miniorange_2_factor_configuration.php:35
132
+ msgid "FAQ"
133
+ msgstr ""
134
+
135
+ #: class-miniorange-2-factor-user-registration.php:114
136
+ msgid "User Profile "
137
+ msgstr ""
138
+
139
+ #: class-miniorange-2-factor-user-registration.php:114
140
+ msgid "Account Setup "
141
+ msgstr ""
142
+
143
+ #: class-miniorange-2-factor-user-registration.php:117
144
+ #: miniorange_2_factor_configuration.php:59
145
+ msgid "Setup Two-Factor"
146
+ msgstr ""
147
+
148
+ #: class-mo2f-constants.php:10
149
+ msgid "Successfully validated."
150
+ msgstr ""
151
+
152
+ #: class-mo2f-constants.php:13
153
+ msgid "Please scan the QR Code now."
154
+ msgstr ""
155
+
156
+ #: class-mo2f-constants.php:16
157
+ msgid "miniOrange QR Code Authentication"
158
+ msgstr ""
159
+
160
+ #: class-mo2f-constants.php:19
161
+ msgid "miniOrange Push Notification"
162
+ msgstr ""
163
+
164
+ #: class-mo2f-constants.php:22
165
+ msgid "miniOrange Soft Token"
166
+ msgstr ""
167
+
168
+ #: class-mo2f-constants.php:25
169
+ msgid "Security Questions"
170
+ msgstr ""
171
+
172
+ #: class-mo2f-constants.php:28 class-mo2f-constants.php:118
173
+ msgid "Google Authenticator"
174
+ msgstr ""
175
+
176
+ #: class-mo2f-constants.php:31
177
+ msgid "Authy Authenticator"
178
+ msgstr ""
179
+
180
+ #: class-mo2f-constants.php:34
181
+ msgid "Email Verification"
182
+ msgstr ""
183
+
184
+ #: class-mo2f-constants.php:37
185
+ msgid "OTP Over SMS"
186
+ msgstr ""
187
+
188
+ #: class-mo2f-constants.php:40
189
+ msgid "OTP Over SMS And Email"
190
+ msgstr ""
191
+
192
+ #: class-mo2f-constants.php:43
193
+ msgid "Your license has expired. Please renew your license to continue using our service."
194
+ msgstr ""
195
+
196
+ #: class-mo2f-constants.php:46
197
+ msgid "The total transaction limit has been exceeded. Please upgrade your premium plan."
198
+ msgstr ""
199
+
200
+ #: class-mo2f-constants.php:49
201
+ msgid "The transaction limit has exceeded."
202
+ msgstr ""
203
+
204
+ #: class-mo2f-constants.php:52
205
+ msgid "GenerateOtpRequest is null"
206
+ msgstr ""
207
+
208
+ #: class-mo2f-constants.php:55
209
+ msgid "The sms transaction limit has been exceeded. Please refer to the Licensing Plans tab for purchasing your SMS transactions."
210
+ msgstr ""
211
+
212
+ #: class-mo2f-constants.php:58
213
+ msgid "The email transaction limit has been exceeded. Please refer to the Licensing Plans tab for purchasing your SMS transactions."
214
+ msgstr ""
215
+
216
+ #: class-mo2f-constants.php:61
217
+ msgid "Transaction limit exceeded. Please contact your administrator"
218
+ msgstr ""
219
+
220
+ #: class-mo2f-constants.php:64
221
+ msgid "Free Trial has already been taken or expired for this plugin. Please upgrade to a premium plan."
222
+ msgstr ""
223
+
224
+ #: class-mo2f-constants.php:67
225
+ msgid "Invalid format."
226
+ msgstr ""
227
+
228
+ #: class-mo2f-constants.php:70
229
+ msgid "Mobile registration failed."
230
+ msgstr ""
231
+
232
+ #: class-mo2f-constants.php:73
233
+ msgid "Invalid mobile authentication request."
234
+ msgstr ""
235
+
236
+ #: class-mo2f-constants.php:76
237
+ msgid "Exception during SMS sending"
238
+ msgstr ""
239
+
240
+ #: class-mo2f-constants.php:79
241
+ msgid "There was an error during sending an SMS."
242
+ msgstr ""
243
+
244
+ #: class-mo2f-constants.php:82
245
+ msgid "Exception during logUserTransaction"
246
+ msgstr ""
247
+
248
+ #: class-mo2f-constants.php:85
249
+ msgid "There was an error processing the challenge user request."
250
+ msgstr ""
251
+
252
+ #: class-mo2f-constants.php:88
253
+ msgid "What is your first company name?"
254
+ msgstr ""
255
+
256
+ #: class-mo2f-constants.php:91
257
+ msgid "What was your childhood nickname?"
258
+ msgstr ""
259
+
260
+ #: class-mo2f-constants.php:94
261
+ msgid "In what city did you meet your spouse/significant other?"
262
+ msgstr ""
263
+
264
+ #: class-mo2f-constants.php:97
265
+ msgid "What is the name of your favorite childhood friend?"
266
+ msgstr ""
267
+
268
+ #: class-mo2f-constants.php:100
269
+ msgid "What was your first vehicle's registration number?"
270
+ msgstr ""
271
+
272
+ #: class-mo2f-constants.php:103
273
+ msgid "What is your grandmother's maiden name?"
274
+ msgstr ""
275
+
276
+ #: class-mo2f-constants.php:106
277
+ msgid "Who is your favourite sports player?"
278
+ msgstr ""
279
+
280
+ #: class-mo2f-constants.php:109
281
+ msgid "What is your favourite sport?"
282
+ msgstr ""
283
+
284
+ #: class-mo2f-constants.php:112
285
+ msgid "In what city or town was your first job"
286
+ msgstr ""
287
+
288
+ #: class-mo2f-constants.php:115
289
+ msgid "What school did you attend for sixth grade?"
290
+ msgstr ""
291
+
292
+ #: class-mo2f-constants.php:121
293
+ msgid "Authy 2-Factor Authentication"
294
+ msgstr ""
295
+
296
+ #: class-mo2f-constants.php:124
297
+ msgid "An unknown error occurred while creating the end user."
298
+ msgstr ""
299
+
300
+ #: class-mo2f-constants.php:127
301
+ msgid "An unknown error occurred while challenging the user."
302
+ msgstr ""
303
+
304
+ #: class-mo2f-constants.php:130
305
+ msgid "An unknown error occurred while generating QR Code for registering mobile."
306
+ msgstr ""
307
+
308
+ #: class-mo2f-constants.php:133
309
+ msgid "An unknown error occurred while validating the user's identity."
310
+ msgstr ""
311
+
312
+ #: class-mo2f-constants.php:136
313
+ msgid "Customer not found."
314
+ msgstr ""
315
+
316
+ #: class-mo2f-constants.php:139
317
+ msgid "The customer is not valid"
318
+ msgstr ""
319
+
320
+ #: class-mo2f-constants.php:142
321
+ msgid "The user is not valid "
322
+ msgstr ""
323
+
324
+ #: class-mo2f-constants.php:145
325
+ msgid "Customer already exists."
326
+ msgstr ""
327
+
328
+ #: class-mo2f-constants.php:148
329
+ msgid "Customer Name is null"
330
+ msgstr ""
331
+
332
+ #: class-mo2f-constants.php:151
333
+ msgid "Customer check request failed."
334
+ msgstr ""
335
+
336
+ #: class-mo2f-constants.php:154
337
+ msgid "Invalid username or password. Please try again."
338
+ msgstr ""
339
+
340
+ #: class-mo2f-constants.php:157
341
+ msgid "You are not authorized to perform this operation."
342
+ msgstr ""
343
+
344
+ #: class-mo2f-constants.php:160
345
+ msgid "Invalid request. No such challenge request was initiated."
346
+ msgstr ""
347
+
348
+ #: class-mo2f-constants.php:163
349
+ msgid "No OTP Token for the given request was found."
350
+ msgstr ""
351
+
352
+ #: class-mo2f-constants.php:166
353
+ msgid "Query submitted."
354
+ msgstr ""
355
+
356
+ #: class-mo2f-constants.php:169
357
+ msgid "Invalid parameters."
358
+ msgstr ""
359
+
360
+ #: class-mo2f-constants.php:172
361
+ msgid "Alternate email cannot be same as primary email."
362
+ msgstr ""
363
+
364
+ #: class-mo2f-constants.php:175
365
+ msgid "CustomerId is null."
366
+ msgstr ""
367
+
368
+ #: class-mo2f-constants.php:178
369
+ msgid "You are not authorized to create users. Please upgrade to premium plan. "
370
+ msgstr ""
371
+
372
+ #: class-mo2f-constants.php:181
373
+ msgid "Your user creation limit has been completed. Please upgrade your license to add more users."
374
+ msgstr ""
375
+
376
+ #: class-mo2f-constants.php:184
377
+ msgid "Username cannot be blank."
378
+ msgstr ""
379
+
380
+ #: class-mo2f-constants.php:187
381
+ msgid "End user created successfully."
382
+ msgstr ""
383
+
384
+ #: class-mo2f-constants.php:190
385
+ msgid "There was an exception processing the update user request."
386
+ msgstr ""
387
+
388
+ #: class-mo2f-constants.php:193
389
+ msgid "End user found."
390
+ msgstr ""
391
+
392
+ #: class-mo2f-constants.php:196
393
+ msgid "End user found under different customer. "
394
+ msgstr ""
395
+
396
+ #: class-mo2f-constants.php:199
397
+ msgid "End user not found."
398
+ msgstr ""
399
+
400
+ #: class-mo2f-constants.php:202
401
+ msgid "Customer successfully registered."
402
+ msgstr ""
403
+
404
+ #: class-mo2f-constants.php:205
405
+ msgid "Customer registration failed."
406
+ msgstr ""
407
+
408
+ #: class-mo2f-constants.php:208
409
+ msgid "There was an error processing the register mobile request."
410
+ msgstr ""
411
+
412
+ #: class-mo2f-constants.php:211
413
+ msgid "There was an exception processing the get user request."
414
+ msgstr ""
415
+
416
+ #: class-mo2f-constants.php:214
417
+ msgid "End User retrieved successfully."
418
+ msgstr ""
419
+
420
+ #: class-mo2f-constants.php:217
421
+ msgid "You have successfully completed the test."
422
+ msgstr ""
423
+
424
+ #: class-mo2f-constants.php:220
425
+ msgid "All the fields are required. Please enter valid entries."
426
+ msgstr ""
427
+
428
+ #: class-mo2f-constants.php:223
429
+ msgid "You already have an account with miniOrange. Please enter a valid password."
430
+ msgstr ""
431
+
432
+ #: class-mo2f-constants.php:226
433
+ msgid "Invalid request. Please try again"
434
+ msgstr ""
435
+
436
+ #: class-mo2f-constants.php:229
437
+ msgid "Invalid OTP. Please try again."
438
+ msgstr ""
439
+
440
+ #: class-mo2f-constants.php:232
441
+ msgid "Invalid email or password. Please try again."
442
+ msgstr ""
443
+
444
+ #: class-mo2f-constants.php:235
445
+ msgid "Password and Confirm password do not match."
446
+ msgstr ""
447
+
448
+ #: class-mo2f-constants.php:238
449
+ msgid "Please enter your registered email and password."
450
+ msgstr ""
451
+
452
+ #: class-mo2f-constants.php:241
453
+ msgid "One Time Passcode has been sent for verification to "
454
+ msgstr ""
455
+
456
+ #: class-mo2f-constants.php:244
457
+ msgid "There was an error in sending OTP over email. Please click on Resend OTP to try again."
458
+ msgstr ""
459
+
460
+ #: class-mo2f-constants.php:247
461
+ msgid "Error occured while registration. Please try again."
462
+ msgstr ""
463
+
464
+ #: class-mo2f-constants.php:250
465
+ msgid "An error occured while processing your request. Please Try again."
466
+ msgstr ""
467
+
468
+ #: class-mo2f-constants.php:253
469
+ msgid "There was an error in sending sms. Please click on Resend OTP to try again."
470
+ msgstr ""
471
+
472
+ #: class-mo2f-constants.php:256
473
+ msgid "Error occurred while registering the user. Please try again."
474
+ msgstr ""
475
+
476
+ #: class-mo2f-constants.php:259
477
+ msgid "is set as your 2 factor authentication method."
478
+ msgstr ""
479
+
480
+ #: class-mo2f-constants.php:262
481
+ msgid "Error occured while saving your kba details. Please try again."
482
+ msgstr ""
483
+
484
+ #: class-mo2f-constants.php:265
485
+ msgid "Please answer the following security questions."
486
+ msgstr ""
487
+
488
+ #: class-mo2f-constants.php:268
489
+ msgid "There was an error fetching security questions. Please try again."
490
+ msgstr ""
491
+
492
+ #: class-mo2f-constants.php:271
493
+ msgid "Invalid Answers. Please try again."
494
+ msgstr ""
495
+
496
+ #: class-mo2f-constants.php:274
497
+ msgid "Choose a password with minimum length 8."
498
+ msgstr ""
499
+
500
+ #: class-mo2f-constants.php:277
501
+ msgid "Your account has been retrieved successfully."
502
+ msgstr ""
503
+
504
+ #: class-mo2f-constants.php:280
505
+ msgid "has been set as your default 2nd factor method"
506
+ msgstr ""
507
+
508
+ #: class-mo2f-constants.php:283
509
+ msgid "Another One Time Passcode has been sent"
510
+ msgstr ""
511
+
512
+ #: class-mo2f-constants.php:286
513
+ msgid "for verification to"
514
+ msgstr ""
515
+
516
+ #: class-mo2f-constants.php:289
517
+ msgid "There was an error in sending email. Please click on Resend OTP to try again."
518
+ msgstr ""
519
+
520
+ #: class-mo2f-constants.php:292
521
+ msgid "The email is already used by other user. Please register with other email."
522
+ msgstr ""
523
+
524
+ #: class-mo2f-constants.php:295
525
+ msgid "Please submit your query with email"
526
+ msgstr ""
527
+
528
+ #: class-mo2f-constants.php:298
529
+ msgid "Your query could not be submitted. Please try again."
530
+ msgstr ""
531
+
532
+ #: class-mo2f-constants.php:301
533
+ msgid "Thanks for getting in touch! We shall get back to you shortly."
534
+ msgstr ""
535
+
536
+ #: class-mo2f-constants.php:304
537
+ msgid "Your settings are saved successfully."
538
+ msgstr ""
539
+
540
+ #: class-mo2f-constants.php:307
541
+ msgid "Authentication failed. Please try again to test the configuration."
542
+ msgstr ""
543
+
544
+ #: class-mo2f-constants.php:310
545
+ msgid "Invalid request. Please register with miniOrange before configuring your mobile."
546
+ msgstr ""
547
+
548
+ #: class-mo2f-constants.php:313
549
+ msgid "Please enter email-id to register."
550
+ msgstr ""
551
+
552
+ #: class-mo2f-constants.php:316
553
+ msgid "Please enter a value to test your authentication."
554
+ msgstr ""
555
+
556
+ #: class-mo2f-constants.php:319
557
+ msgid "Please enter the one time passcode below."
558
+ msgstr ""
559
+
560
+ #: class-mo2f-constants.php:322
561
+ msgid "There was an error in sending one time passcode. Please click on Resend OTP to try again."
562
+ msgstr ""
563
+
564
+ #: class-mo2f-constants.php:325
565
+ msgid "A Push notification has been sent to your miniOrange Authenticator App."
566
+ msgstr ""
567
+
568
+ #: class-mo2f-constants.php:328
569
+ msgid "Error occurred while validating the OTP. Please try again."
570
+ msgstr ""
571
+
572
+ #: class-mo2f-constants.php:331
573
+ msgid "to test Google Authenticator method."
574
+ msgstr ""
575
+
576
+ #: class-mo2f-constants.php:334
577
+ msgid "Error occurred while validating the OTP. Please try again. Possible causes:"
578
+ msgstr ""
579
+
580
+ #: class-mo2f-constants.php:337
581
+ msgid "Your App Time is not in sync.Go to settings and tap on tap on Sync Time now ."
582
+ msgstr ""
583
+
584
+ #: class-mo2f-constants.php:340
585
+ msgid "Error occurred while validating the user. Please try again."
586
+ msgstr ""
587
+
588
+ #: class-mo2f-constants.php:343
589
+ msgid "Only digits are allowed. Please enter again."
590
+ msgstr ""
591
+
592
+ #: class-mo2f-constants.php:346
593
+ msgid "to test Authy 2-Factor Authentication method."
594
+ msgstr ""
595
+
596
+ #: class-mo2f-constants.php:349
597
+ msgid "method."
598
+ msgstr ""
599
+
600
+ #: class-mo2f-constants.php:352
601
+ msgid "to test"
602
+ msgstr ""
603
+
604
+ #: class-mo2f-constants.php:355
605
+ msgid "is set as your Two-Factor method."
606
+ msgstr ""
607
+
608
+ #: class-mo2f-constants.php:358
609
+ msgid "A verification email is sent to"
610
+ msgstr ""
611
+
612
+ #: class-mo2f-constants.php:361
613
+ msgid "Please click on accept link to verify your email."
614
+ msgstr ""
615
+
616
+ #: class-mo2f-constants.php:364
617
+ msgid "Your account has been created successfully."
618
+ msgstr ""
619
+
620
+ #: class-mo2f-constants.php:367
621
+ msgid "Your account has been removed. Please contact your administrator."
622
+ msgstr ""
623
+
624
+ #: class-mo2f-constants.php:370
625
+ msgid "You are registered successfully."
626
+ msgstr ""
627
+
628
+ #: class-mo2f-constants.php:373
629
+ msgid "You have denied the request."
630
+ msgstr ""
631
+
632
+ #: class-mo2f-constants.php:376
633
+ msgid "Two-Factor plugin has been disabled."
634
+ msgstr ""
635
+
636
+ #: class-mo2f-constants.php:379
637
+ msgid "Error occurred while saving the settings.Please try again."
638
+ msgstr ""
639
+
640
+ #: class-mo2f-constants.php:382
641
+ msgid "Invalid request. Please register with miniOrange and configure 2-Factor to save your login settings."
642
+ msgstr ""
643
+
644
+ #: class-mo2f-constants.php:385
645
+ msgid "You already have an account with miniOrange, please sign in."
646
+ msgstr ""
647
+
648
+ #: class-mo2f-constants.php:388
649
+ msgid "to configure another 2 Factor authentication method."
650
+ msgstr ""
651
+
652
+ #: class-mo2f-constants.php:391
653
+ msgid "Your phone number is not configured. Please configure it before selecting OTP Over SMS as your 2-factor method."
654
+ msgstr ""
655
+
656
+ #: class-mo2f-constants.php:394
657
+ #: miniorange_2_factor_mobile_configuration.php:315
658
+ msgid "Click Here"
659
+ msgstr ""
660
+
661
+ #: class-mo2f-constants.php:397
662
+ msgid "An error occured while creating your account. Please try again by sending OTP again."
663
+ msgstr ""
664
+
665
+ #: class-rba-attributes.php:43 class-two-factor-setup.php:46
666
+ msgid "Please enable curl extension."
667
+ msgstr ""
668
+
669
+ #: class-rba-attributes.php:45 class-two-factor-setup.php:48
670
+ #: miniorange_2_factor_mobile_configuration.php:681
671
+ msgid "Click here"
672
+ msgstr ""
673
+
674
+ #: class-rba-attributes.php:47 class-two-factor-setup.php:50
675
+ msgid "for the steps to enable curl or check Help & Troubleshooting."
676
+ msgstr ""
677
+
678
+ #: miniorange_2_factor_common_login.php:15
679
+ msgid "Please wait"
680
+ msgstr ""
681
+
682
+ #: miniorange_2_factor_common_login.php:184
683
+ #: miniorange_2_factor_common_login.php:266
684
+ #: miniorange_2_factor_common_login.php:359
685
+ #: miniorange_2_factor_common_login.php:508
686
+ #: miniorange_2_factor_common_login.php:646
687
+ #: miniorange_2_factor_common_login.php:742
688
+ msgid "Back to login"
689
+ msgstr ""
690
+
691
+ #: miniorange_2_factor_common_login.php:186
692
+ msgid "How would you like to authenticate yourself?"
693
+ msgstr ""
694
+
695
+ #: miniorange_2_factor_common_login.php:196
696
+ msgid "Please choose the options from below:"
697
+ msgstr ""
698
+
699
+ #: miniorange_2_factor_common_login.php:201
700
+ msgid "Send a one time passcode to my registered email"
701
+ msgstr ""
702
+
703
+ #: miniorange_2_factor_common_login.php:206
704
+ msgid "Answer your Security Questions (KBA)"
705
+ msgstr ""
706
+
707
+ #: miniorange_2_factor_common_login.php:210
708
+ #: miniorange_2_factor_mobile_configuration.php:367
709
+ #: miniorange_2_factor_mobile_configuration.php:400
710
+ msgid "Continue"
711
+ msgstr ""
712
+
713
+ #: miniorange_2_factor_common_login.php:269
714
+ msgid "Validate Security Questions"
715
+ msgstr ""
716
+
717
+ #: miniorange_2_factor_common_login.php:276
718
+ msgid "Please answer the following questions:"
719
+ msgstr ""
720
+
721
+ #: miniorange_2_factor_common_login.php:300
722
+ msgid "Remember this device."
723
+ msgstr ""
724
+
725
+ #: miniorange_2_factor_common_login.php:309
726
+ #: miniorange_2_factor_common_login.php:671
727
+ msgid "Validate"
728
+ msgstr ""
729
+
730
+ #: miniorange_2_factor_common_login.php:361
731
+ msgid "Accept Your Transaction"
732
+ msgstr ""
733
+
734
+ #: miniorange_2_factor_common_login.php:373
735
+ msgid "Waiting for your approval..."
736
+ msgstr ""
737
+
738
+ #: miniorange_2_factor_common_login.php:390
739
+ #: miniorange_2_factor_common_login.php:535
740
+ msgid "Forgot Phone?"
741
+ msgstr ""
742
+
743
+ #: miniorange_2_factor_common_login.php:395
744
+ #: miniorange_2_factor_common_login.php:541
745
+ msgid "Phone is Offline?"
746
+ msgstr ""
747
+
748
+ #: miniorange_2_factor_common_login.php:400
749
+ msgid "Didn't receive mail?"
750
+ msgstr ""
751
+
752
+ #: miniorange_2_factor_common_login.php:510
753
+ msgid "Scan QR Code"
754
+ msgstr ""
755
+
756
+ #: miniorange_2_factor_common_login.php:522
757
+ msgid "Identify yourself by scanning the QR code with miniOrange Authenticator app."
758
+ msgstr ""
759
+
760
+ #: miniorange_2_factor_common_login.php:648
761
+ #: miniorange_2_factor_configuration.php:257
762
+ #: miniorange_2_factor_configuration.php:274
763
+ #: miniorange_2_factor_mobile_configuration.php:184
764
+ #: miniorange_2_factor_mobile_configuration.php:207
765
+ msgid "Validate OTP"
766
+ msgstr ""
767
+
768
+ #: miniorange_2_factor_common_login.php:663
769
+ msgid "Enter code"
770
+ msgstr ""
771
+
772
+ #: miniorange_2_factor_common_login.php:666
773
+ msgid "Only digits within range 4-8 are allowed."
774
+ msgstr ""
775
+
776
+ #: miniorange_2_factor_common_login.php:682
777
+ msgid "Forgot Phone ?"
778
+ msgstr ""
779
+
780
+ #: miniorange_2_factor_common_login.php:745
781
+ #: miniorange_2_factor_configuration.php:368
782
+ msgid "Remember Device"
783
+ msgstr ""
784
+
785
+ #: miniorange_2_factor_common_login.php:750
786
+ msgid "Do you want to remember this device?"
787
+ msgstr ""
788
+
789
+ #: miniorange_2_factor_common_login.php:753
790
+ #: miniorange_2_factor_common_login.php:765
791
+ msgid "Yes"
792
+ msgstr ""
793
+
794
+ #: miniorange_2_factor_common_login.php:756
795
+ msgid "No"
796
+ msgstr ""
797
+
798
+ #: miniorange_2_factor_common_login.php:759
799
+ msgid "Please wait...We are taking you into your account."
800
+ msgstr ""
801
+
802
+ #: miniorange_2_factor_common_login.php:764
803
+ #: miniorange_2_factor_common_login.php:767
804
+ msgid "Click on "
805
+ msgstr ""
806
+
807
+ #: miniorange_2_factor_common_login.php:765
808
+ msgid "if this is your personal device."
809
+ msgstr ""
810
+
811
+ #: miniorange_2_factor_common_login.php:768
812
+ msgid "No "
813
+ msgstr ""
814
+
815
+ #: miniorange_2_factor_common_login.php:768
816
+ msgid "if this is a public device."
817
+ msgstr ""
818
+
819
+ #: miniorange_2_factor_configuration.php:5
820
+ #: miniorange_2_factor_configuration.php:15
821
+ msgid "Warning:"
822
+ msgstr ""
823
+
824
+ #: miniorange_2_factor_configuration.php:15
825
+ msgid "Your current PHP version is "
826
+ msgstr ""
827
+
828
+ #: miniorange_2_factor_configuration.php:16
829
+ msgid "Some of the functionality of the plugin may not work in this version of PHP. Please upgrade your PHP version to 5.3.0 or above."
830
+ msgstr ""
831
+
832
+ #: miniorange_2_factor_configuration.php:17
833
+ msgid "You can also write us by submitting a query on the right hand side in our "
834
+ msgstr ""
835
+
836
+ #: miniorange_2_factor_configuration.php:18
837
+ msgid "Support Section"
838
+ msgstr ""
839
+
840
+ #: miniorange_2_factor_configuration.php:39
841
+ msgid "Upgrade to Standard/Premium"
842
+ msgstr ""
843
+
844
+ #: miniorange_2_factor_configuration.php:53
845
+ msgid "User Profile"
846
+ msgstr ""
847
+
848
+ #: miniorange_2_factor_configuration.php:55
849
+ msgid "Account Setup"
850
+ msgstr ""
851
+
852
+ #: miniorange_2_factor_configuration.php:64
853
+ msgid "Add-ons"
854
+ msgstr ""
855
+
856
+ #: miniorange_2_factor_configuration.php:67
857
+ msgid "Standard/Premium Features"
858
+ msgstr ""
859
+
860
+ #: miniorange_2_factor_configuration.php:67
861
+ msgid "Login Options"
862
+ msgstr ""
863
+
864
+ #: miniorange_2_factor_configuration.php:169
865
+ #: miniorange_2_factor_mobile_configuration.php:29
866
+ msgid "Register with miniOrange"
867
+ msgstr ""
868
+
869
+ #: miniorange_2_factor_configuration.php:173
870
+ msgid "Already have an account?"
871
+ msgstr ""
872
+
873
+ #: miniorange_2_factor_configuration.php:173
874
+ msgid "SIGN IN"
875
+ msgstr ""
876
+
877
+ #: miniorange_2_factor_configuration.php:178
878
+ msgid "Email :"
879
+ msgstr ""
880
+
881
+ #: miniorange_2_factor_configuration.php:187
882
+ msgid "Company/Organisation:"
883
+ msgstr ""
884
+
885
+ #: miniorange_2_factor_configuration.php:193
886
+ msgid "First Name:"
887
+ msgstr ""
888
+
889
+ #: miniorange_2_factor_configuration.php:199
890
+ msgid "Last Name:"
891
+ msgstr ""
892
+
893
+ #: miniorange_2_factor_configuration.php:200
894
+ msgid "last_name"
895
+ msgstr ""
896
+
897
+ #: miniorange_2_factor_configuration.php:206
898
+ msgid "Phone number :"
899
+ msgstr ""
900
+
901
+ #: miniorange_2_factor_configuration.php:215
902
+ msgid "Password :"
903
+ msgstr ""
904
+
905
+ #: miniorange_2_factor_configuration.php:219
906
+ msgid "Confirm Password :"
907
+ msgstr ""
908
+
909
+ #: miniorange_2_factor_configuration.php:227
910
+ msgid "Create Account"
911
+ msgstr ""
912
+
913
+ #: miniorange_2_factor_configuration.php:264
914
+ #: miniorange_2_factor_mobile_configuration.php:192
915
+ msgid "Enter OTP:"
916
+ msgstr ""
917
+
918
+ #: miniorange_2_factor_configuration.php:266
919
+ #: miniorange_2_factor_mobile_configuration.php:196
920
+ msgid "Enter OTP"
921
+ msgstr ""
922
+
923
+ #: miniorange_2_factor_configuration.php:268
924
+ #: miniorange_2_factor_configuration.php:313
925
+ #: miniorange_2_factor_mobile_configuration.php:199
926
+ msgid "Resend OTP ?"
927
+ msgstr ""
928
+
929
+ #: miniorange_2_factor_configuration.php:282
930
+ #: miniorange_2_factor_configuration.php:896
931
+ #: miniorange_2_factor_mobile_configuration.php:215
932
+ msgid "Back"
933
+ msgstr ""
934
+
935
+ #: miniorange_2_factor_configuration.php:295
936
+ msgid "I did not receive any email with OTP . What should I do ?"
937
+ msgstr ""
938
+
939
+ #: miniorange_2_factor_configuration.php:298
940
+ msgid "If you can't see the email from miniOrange in your mails, please check your "
941
+ msgstr ""
942
+
943
+ #: miniorange_2_factor_configuration.php:299
944
+ msgid "SPAM Folder"
945
+ msgstr ""
946
+
947
+ #: miniorange_2_factor_configuration.php:299
948
+ msgid "If you don't see an email even in SPAM folder, verify your identity with our alternate method."
949
+ msgstr ""
950
+
951
+ #: miniorange_2_factor_configuration.php:301
952
+ msgid "Enter your valid phone number here and verify your identity using one time passcode sent to your phone."
953
+ msgstr ""
954
+
955
+ #: miniorange_2_factor_configuration.php:307
956
+ msgid "Enter Phone Number"
957
+ msgstr ""
958
+
959
+ #: miniorange_2_factor_configuration.php:310
960
+ msgid "Enter phone number without any space or dashes."
961
+ msgstr ""
962
+
963
+ #: miniorange_2_factor_configuration.php:317
964
+ msgid "Send OTP"
965
+ msgstr ""
966
+
967
+ #: miniorange_2_factor_configuration.php:322
968
+ msgid "What is an OTP ?"
969
+ msgstr ""
970
+
971
+ #: miniorange_2_factor_configuration.php:323
972
+ msgid "OTP is a one time passcode ( a series of numbers) that is sent to your email or phone number to verify that you have access to your email account or phone. "
973
+ msgstr ""
974
+
975
+ #: miniorange_2_factor_configuration.php:351
976
+ #: miniorange_2_factor_configuration.php:426
977
+ msgid "Activate Plugin"
978
+ msgstr ""
979
+
980
+ #: miniorange_2_factor_configuration.php:356
981
+ #: miniorange_2_factor_configuration.php:431
982
+ #: miniorange_2_factor_configuration.php:455
983
+ msgid "Purchase"
984
+ msgstr ""
985
+
986
+ #: miniorange_2_factor_configuration.php:359
987
+ #: miniorange_2_factor_configuration.php:459
988
+ msgid "Description"
989
+ msgstr ""
990
+
991
+ #: miniorange_2_factor_configuration.php:361
992
+ msgid ""
993
+ "This Add-On helps you in remembering the device, in which case you will not be prompted for the 2-factor authentication\n"
994
+ "\t\t\tif you login from the remembered device again. You can also decide the nu,ber of devices that can be remembered. Users can also be restricted access to the site based on the IP address they are logging in from."
995
+ msgstr ""
996
+
997
+ #: miniorange_2_factor_configuration.php:370
998
+ msgid "With this feature, User would get an option to remember the personal device where Two Factor is not required. Every time the user logs in with the same device it detects the saved device so he will directly login without being prompted for the 2nd factor. If user logs in from new device he will be prompted with 2nd Factor."
999
+ msgstr ""
1000
+
1001
+ #: miniorange_2_factor_configuration.php:376
1002
+ msgid "Limit Number Of Device"
1003
+ msgstr ""
1004
+
1005
+ #: miniorange_2_factor_configuration.php:378
1006
+ msgid "With this feature, the admin can restrict the number of devices from which the user can access the website. If the device limit is exceeded the admin can set three actions where it can allow the users to login, deny the access or challenge the user for authentication."
1007
+ msgstr ""
1008
+
1009
+ #: miniorange_2_factor_configuration.php:384
1010
+ msgid "IP Restriction: Limit users to login from specific IPs"
1011
+ msgstr ""
1012
+
1013
+ #: miniorange_2_factor_configuration.php:386
1014
+ msgid "The Admin can enable IP restrictions for the users. It will provide additional security to the accounts and perform different action to the accounts only from the listed IP Ranges. If user tries to access with a restricted IP, Admin can set three action: Allow, challenge or deny. Depending upon the action it will allow the user to login, challenge(prompt) for authentication or deny the access."
1015
+ msgstr ""
1016
+
1017
+ #: miniorange_2_factor_configuration.php:409
1018
+ msgid "Risk Based Access"
1019
+ msgstr ""
1020
+
1021
+ #: miniorange_2_factor_configuration.php:411
1022
+ msgid "Personalization"
1023
+ msgstr ""
1024
+
1025
+ #: miniorange_2_factor_configuration.php:414
1026
+ msgid "Shortcode"
1027
+ msgstr ""
1028
+
1029
+ #: miniorange_2_factor_configuration.php:436
1030
+ msgid "Description "
1031
+ msgstr ""
1032
+
1033
+ #: miniorange_2_factor_configuration.php:448
1034
+ msgid ""
1035
+ "Activate\n"
1036
+ " Plugin"
1037
+ msgstr ""
1038
+
1039
+ #: miniorange_2_factor_configuration.php:492
1040
+ msgid ""
1041
+ "This Add-On helps you modify and redesign the login screen's UI, and various customizations in the plugin dashboard.\n"
1042
+ "\t\tAlong with customizing the plugin Icon and name, you can also customize the email and sms templates you and your users receive during authentication."
1043
+ msgstr ""
1044
+
1045
+ #: miniorange_2_factor_configuration.php:498
1046
+ msgid "Customize Plugin Icon"
1047
+ msgstr ""
1048
+
1049
+ #: miniorange_2_factor_configuration.php:501
1050
+ msgid "With this feature, you can customize the plugin icon in the dashboard which is useful when you want your custom logo to be displayed to the users."
1051
+ msgstr ""
1052
+
1053
+ #: miniorange_2_factor_configuration.php:504
1054
+ msgid "Customize Plugin Name"
1055
+ msgstr ""
1056
+
1057
+ #: miniorange_2_factor_configuration.php:507
1058
+ msgid "With this feature, you can customize the name of the plugin in the dashboard."
1059
+ msgstr ""
1060
+
1061
+ #: miniorange_2_factor_configuration.php:513
1062
+ msgid "Customize UI of Login Pop up's"
1063
+ msgstr ""
1064
+
1065
+ #: miniorange_2_factor_configuration.php:516
1066
+ msgid "With this feature, you can customize the login pop-ups during two factor authentication according to the theme of your website."
1067
+ msgstr ""
1068
+
1069
+ #: miniorange_2_factor_configuration.php:522
1070
+ msgid "Custom Email and SMS Templates"
1071
+ msgstr ""
1072
+
1073
+ #: miniorange_2_factor_configuration.php:525
1074
+ msgid "You can change the templates for Email and SMS which user receives during authentication."
1075
+ msgstr ""
1076
+
1077
+ #: miniorange_2_factor_configuration.php:535
1078
+ msgid ""
1079
+ "A shortcode is a WordPress-specific code that lets you do things with very little effort. Shortcodes can embed\n"
1080
+ " ugly code in just one line. You can use these shortcodes on any custom page. Just include the shortcode on your page and boom!"
1081
+ msgstr ""
1082
+
1083
+ #: miniorange_2_factor_configuration.php:542
1084
+ msgid "List of Shortcodes"
1085
+ msgstr ""
1086
+
1087
+ #: miniorange_2_factor_configuration.php:546
1088
+ msgid "Enable Two Factor: "
1089
+ msgstr ""
1090
+
1091
+ #: miniorange_2_factor_configuration.php:546
1092
+ msgid ""
1093
+ "This shortcode provides\n"
1094
+ " an option to turn on/off 2-factor by user."
1095
+ msgstr ""
1096
+
1097
+ #: miniorange_2_factor_configuration.php:549
1098
+ msgid "Enable Reconfiguration: "
1099
+ msgstr ""
1100
+
1101
+ #: miniorange_2_factor_configuration.php:549
1102
+ msgid "This shortcode provides an option to configure the Google Authenticator and Security Questions by user."
1103
+ msgstr ""
1104
+
1105
+ #: miniorange_2_factor_configuration.php:552
1106
+ msgid "Enable Remember Device: "
1107
+ msgstr ""
1108
+
1109
+ #: miniorange_2_factor_configuration.php:552
1110
+ msgid ""
1111
+ " This shortcode provides\n"
1112
+ " 'Enable Remember Device' from your custom login form."
1113
+ msgstr ""
1114
+
1115
+ #: miniorange_2_factor_configuration.php:627
1116
+ msgid "Select Login Screen Options"
1117
+ msgstr ""
1118
+
1119
+ #: miniorange_2_factor_configuration.php:641
1120
+ msgid "Login with password + 2nd Factor "
1121
+ msgstr ""
1122
+
1123
+ #: miniorange_2_factor_configuration.php:642
1124
+ msgid "Default & Recommended"
1125
+ msgstr ""
1126
+
1127
+ #: miniorange_2_factor_configuration.php:653
1128
+ msgid "Remember device"
1129
+ msgstr ""
1130
+
1131
+ #: miniorange_2_factor_configuration.php:653
1132
+ msgid "option "
1133
+ msgstr ""
1134
+
1135
+ #: miniorange_2_factor_configuration.php:656
1136
+ msgid " Checking this option will display an option "
1137
+ msgstr ""
1138
+
1139
+ #: miniorange_2_factor_configuration.php:657
1140
+ msgid "Remember this device"
1141
+ msgstr ""
1142
+
1143
+ #: miniorange_2_factor_configuration.php:657
1144
+ msgid "on 2nd factor screen. In the next login from the same device, user will bypass 2nd factor, i.e. user will be logged in through username + password only."
1145
+ msgstr ""
1146
+
1147
+ #: miniorange_2_factor_configuration.php:669
1148
+ msgid "Login with 2nd Factor only "
1149
+ msgstr ""
1150
+
1151
+ #: miniorange_2_factor_configuration.php:670
1152
+ msgid "No password required."
1153
+ msgstr ""
1154
+
1155
+ #: miniorange_2_factor_configuration.php:674
1156
+ #: miniorange_2_factor_configuration.php:697
1157
+ #: miniorange_2_factor_settings.php:309
1158
+ msgid "See preview"
1159
+ msgstr ""
1160
+
1161
+ #: miniorange_2_factor_configuration.php:683
1162
+ msgid "Checking this option will add login with your phone button below default login form. Click above link to see the preview."
1163
+ msgstr ""
1164
+
1165
+ #: miniorange_2_factor_configuration.php:693
1166
+ msgid "\tI want to hide default login form."
1167
+ msgstr ""
1168
+
1169
+ #: miniorange_2_factor_configuration.php:707
1170
+ msgid "Checking this option will hide default login form and just show login with your phone. Click above link to see the preview."
1171
+ msgstr ""
1172
+
1173
+ #: miniorange_2_factor_configuration.php:713
1174
+ msgid "Backup Methods"
1175
+ msgstr ""
1176
+
1177
+ #: miniorange_2_factor_configuration.php:723
1178
+ msgid "Enable Forgot Phone."
1179
+ msgstr ""
1180
+
1181
+ #: miniorange_2_factor_configuration.php:726
1182
+ msgid "This option will provide you an alternate way of logging in to your site in case you are unable to login with your primary authentication method."
1183
+ msgstr ""
1184
+
1185
+ #: miniorange_2_factor_configuration.php:732
1186
+ msgid "Settings"
1187
+ msgstr ""
1188
+
1189
+ #: miniorange_2_factor_configuration.php:742
1190
+ msgid "Enable XML-RPC Login."
1191
+ msgstr ""
1192
+
1193
+ #: miniorange_2_factor_configuration.php:744
1194
+ msgid "Enabling this option will decrease your overall login security. Users will be able to login through external applications which support XML-RPC without authenticating from miniOrange. "
1195
+ msgstr ""
1196
+
1197
+ #: miniorange_2_factor_configuration.php:745
1198
+ msgid "Please keep it unchecked."
1199
+ msgstr ""
1200
+
1201
+ #: miniorange_2_factor_configuration.php:751
1202
+ msgid "Save Settings"
1203
+ msgstr ""
1204
+
1205
+ #: miniorange_2_factor_configuration.php:870
1206
+ msgid "Sign In to your miniOrange Account"
1207
+ msgstr ""
1208
+
1209
+ #: miniorange_2_factor_configuration.php:874
1210
+ msgid "Enter your miniOrange username and password to login."
1211
+ msgstr ""
1212
+
1213
+ #: miniorange_2_factor_configuration.php:876
1214
+ msgid "FORGOT PASSWORD?"
1215
+ msgstr ""
1216
+
1217
+ #: miniorange_2_factor_configuration.php:881
1218
+ msgid "Email:"
1219
+ msgstr ""
1220
+
1221
+ #: miniorange_2_factor_configuration.php:886
1222
+ msgid "Password:"
1223
+ msgstr ""
1224
+
1225
+ #: miniorange_2_factor_configuration.php:898
1226
+ msgid "Submit"
1227
+ msgstr ""
1228
+
1229
+ #: miniorange_2_factor_configuration.php:929
1230
+ msgid "Features in the Standard Plan"
1231
+ msgstr ""
1232
+
1233
+ #: miniorange_2_factor_configuration.php:940
1234
+ #: miniorange_2_factor_configuration.php:1106
1235
+ msgid "Backup Options"
1236
+ msgstr ""
1237
+
1238
+ #: miniorange_2_factor_configuration.php:947
1239
+ #: miniorange_2_factor_configuration.php:1113
1240
+ msgid ""
1241
+ "Use these backup options to login to your site in case your \n"
1242
+ " phone is lost / not accessible or if you are not able to login using your primary \n"
1243
+ " authentication method."
1244
+ msgstr ""
1245
+
1246
+ #: miniorange_2_factor_configuration.php:952
1247
+ #: miniorange_2_factor_configuration.php:1118
1248
+ msgid "KBA (Security Questions)"
1249
+ msgstr ""
1250
+
1251
+ #: miniorange_2_factor_configuration.php:963
1252
+ #: miniorange_2_factor_configuration.php:1037
1253
+ msgid "Customizations"
1254
+ msgstr ""
1255
+
1256
+ #: miniorange_2_factor_configuration.php:970
1257
+ #: miniorange_2_factor_configuration.php:1044
1258
+ msgid "Login Screen Options"
1259
+ msgstr ""
1260
+
1261
+ #: miniorange_2_factor_configuration.php:973
1262
+ #: miniorange_2_factor_configuration.php:1047
1263
+ msgid "Login with Wordpress username/password and 2nd Factor"
1264
+ msgstr ""
1265
+
1266
+ #: miniorange_2_factor_configuration.php:975
1267
+ #: miniorange_2_factor_configuration.php:987
1268
+ #: miniorange_2_factor_configuration.php:1049
1269
+ #: miniorange_2_factor_configuration.php:1061
1270
+ msgid "See Preview"
1271
+ msgstr ""
1272
+
1273
+ #: miniorange_2_factor_configuration.php:985
1274
+ #: miniorange_2_factor_configuration.php:1059
1275
+ msgid "Login with Wordpress username and 2nd Factor only"
1276
+ msgstr ""
1277
+
1278
+ #: miniorange_2_factor_configuration.php:1003
1279
+ #: miniorange_2_factor_configuration.php:1077
1280
+ msgid "Custom Redirect URLs"
1281
+ msgstr ""
1282
+
1283
+ #: miniorange_2_factor_configuration.php:1004
1284
+ #: miniorange_2_factor_configuration.php:1078
1285
+ msgid ""
1286
+ "Enable Custom Relay state URL's (based on user roles in Wordpress) to which the users\n"
1287
+ " will get redirected to, after the 2-factor authentication"
1288
+ msgstr ""
1289
+
1290
+ #: miniorange_2_factor_configuration.php:1009
1291
+ #: miniorange_2_factor_configuration.php:1083
1292
+ msgid "Custom Security Questions (KBA)"
1293
+ msgstr ""
1294
+
1295
+ #: miniorange_2_factor_configuration.php:1011
1296
+ #: miniorange_2_factor_configuration.php:1085
1297
+ msgid ""
1298
+ "Add up to 16 Custom Security Questions for Knowledge based authentication (KBA).\n"
1299
+ " You also have the option to select how many standard and custom questions should be shown to the\n"
1300
+ " users"
1301
+ msgstr ""
1302
+
1303
+ #: miniorange_2_factor_configuration.php:1018
1304
+ #: miniorange_2_factor_configuration.php:1092
1305
+ msgid "Custom account name in Google Authenticator App"
1306
+ msgstr ""
1307
+
1308
+ #: miniorange_2_factor_configuration.php:1021
1309
+ #: miniorange_2_factor_configuration.php:1095
1310
+ msgid "Customize the Account name in the Google Authenticator App"
1311
+ msgstr ""
1312
+
1313
+ #: miniorange_2_factor_configuration.php:1028
1314
+ msgid "Features in the Premium Plan"
1315
+ msgstr ""
1316
+
1317
+ #: miniorange_2_factor_configuration.php:1119
1318
+ msgid "OTP Over Email"
1319
+ msgstr ""
1320
+
1321
+ #: miniorange_2_factor_configuration.php:1120
1322
+ msgid "Backup Codes"
1323
+ msgstr ""
1324
+
1325
+ #: miniorange_2_factor_configuration.php:1130
1326
+ msgid "Inline Registration Options"
1327
+ msgstr ""
1328
+
1329
+ #: miniorange_2_factor_configuration.php:1138
1330
+ msgid ""
1331
+ "Inline Registration is the registration process the users go through the first time they\n"
1332
+ " setup 2FA."
1333
+ msgstr ""
1334
+
1335
+ #: miniorange_2_factor_configuration.php:1140
1336
+ msgid ""
1337
+ "If Inline Registration is enabled by the admin for the users, the next time\n"
1338
+ " the users login to the website, they will be prompted to set up the 2FA of their choice by\n"
1339
+ " creating an account with miniOrange."
1340
+ msgstr ""
1341
+
1342
+ #: miniorange_2_factor_configuration.php:1148
1343
+ msgid "Features"
1344
+ msgstr ""
1345
+
1346
+ #: miniorange_2_factor_configuration.php:1150
1347
+ msgid "Invoke 2FA Registration & Setup for Users during first-time login (Inline Registration)"
1348
+ msgstr ""
1349
+
1350
+ #: miniorange_2_factor_configuration.php:1153
1351
+ msgid "Verify Email address of User during Inline Registration"
1352
+ msgstr ""
1353
+
1354
+ #: miniorange_2_factor_configuration.php:1154
1355
+ msgid "Remove Knowledge Based Authentication(KBA) setup during inline registration"
1356
+ msgstr ""
1357
+
1358
+ #: miniorange_2_factor_configuration.php:1155
1359
+ msgid "Enable 2FA for specific Roles"
1360
+ msgstr ""
1361
+
1362
+ #: miniorange_2_factor_configuration.php:1156
1363
+ msgid "Enable specific 2FA methods to Users during Inline Registration"
1364
+ msgstr ""
1365
+
1366
+ #: miniorange_2_factor_configuration.php:1159
1367
+ msgid "Show specific 2FA methods to All Users"
1368
+ msgstr ""
1369
+
1370
+ #: miniorange_2_factor_configuration.php:1161
1371
+ msgid "Show specific 2FA methods to Users based on their roles"
1372
+ msgstr ""
1373
+
1374
+ #: miniorange_2_factor_configuration.php:1172
1375
+ msgid "User Login Options"
1376
+ msgstr ""
1377
+
1378
+ #: miniorange_2_factor_configuration.php:1179
1379
+ msgid "These are the options customizable for your users."
1380
+ msgstr ""
1381
+
1382
+ #: miniorange_2_factor_configuration.php:1185
1383
+ msgid "Enable 2FA during login for specific users on your site"
1384
+ msgstr ""
1385
+
1386
+ #: miniorange_2_factor_configuration.php:1187
1387
+ msgid "Enable login from external apps that support XML-RPC. (eg. Wordpress App)"
1388
+ msgstr ""
1389
+
1390
+ #: miniorange_2_factor_configuration.php:1190
1391
+ msgid ""
1392
+ "Use the Password generated in the 2FA plugin to login to your Wordpress Site from\n"
1393
+ " any application that supports XML-RPC."
1394
+ msgstr ""
1395
+
1396
+ #: miniorange_2_factor_configuration.php:1197
1397
+ msgid ""
1398
+ "Enable KBA (Security Questions) as 2FA for Users logging in to the site from mobile\n"
1399
+ " phones."
1400
+ msgstr ""
1401
+
1402
+ #: miniorange_2_factor_mobile_configuration.php:28
1403
+ msgid "Please "
1404
+ msgstr ""
1405
+
1406
+ #: miniorange_2_factor_mobile_configuration.php:29
1407
+ msgid "to configure the miniOrange 2 Factor plugin."
1408
+ msgstr ""
1409
+
1410
+ #: miniorange_2_factor_mobile_configuration.php:139
1411
+ msgid "A new security system has been enabled to better protect your account. Please configure your Two-Factor Authentication method by setting up your account."
1412
+ msgstr ""
1413
+
1414
+ #: miniorange_2_factor_mobile_configuration.php:151
1415
+ msgid "Email"
1416
+ msgstr ""
1417
+
1418
+ #: miniorange_2_factor_mobile_configuration.php:159
1419
+ msgid "Please enter a valid email id that you have access to. You will be able to move forward after verifying an OTP that we will be sending to this email"
1420
+ msgstr ""
1421
+
1422
+ #: miniorange_2_factor_mobile_configuration.php:168
1423
+ msgid "Get Started"
1424
+ msgstr ""
1425
+
1426
+ #: miniorange_2_factor_mobile_configuration.php:268
1427
+ msgid "Your Profile"
1428
+ msgstr ""
1429
+
1430
+ #: miniorange_2_factor_mobile_configuration.php:274
1431
+ msgid "Customer Email"
1432
+ msgstr ""
1433
+
1434
+ #: miniorange_2_factor_mobile_configuration.php:280
1435
+ msgid "Customer ID"
1436
+ msgstr ""
1437
+
1438
+ #: miniorange_2_factor_mobile_configuration.php:290
1439
+ msgid "User Email Registered with miniOrange"
1440
+ msgstr ""
1441
+
1442
+ #: miniorange_2_factor_mobile_configuration.php:298
1443
+ msgid "Activated 2nd Factor"
1444
+ msgstr ""
1445
+
1446
+ #: miniorange_2_factor_mobile_configuration.php:305
1447
+ msgid "Wordpress user who has 2 factor enabled"
1448
+ msgstr ""
1449
+
1450
+ #: miniorange_2_factor_mobile_configuration.php:316
1451
+ msgid " to reset your miniOrange account's password."
1452
+ msgstr ""
1453
+
1454
+ #: miniorange_2_factor_mobile_configuration.php:326
1455
+ msgid "Deactivate plugin"
1456
+ msgstr ""
1457
+
1458
+ #: miniorange_2_factor_mobile_configuration.php:329
1459
+ msgid "Register with Another Email Address"
1460
+ msgstr ""
1461
+
1462
+ #: miniorange_2_factor_mobile_configuration.php:545
1463
+ msgid "Enable 2-factor Authentication for Users"
1464
+ msgstr ""
1465
+
1466
+ #: miniorange_2_factor_mobile_configuration.php:562
1467
+ msgid "Enable 2-factor Authentication"
1468
+ msgstr ""
1469
+
1470
+ #: miniorange_2_factor_mobile_configuration.php:571
1471
+ msgid "Selected Method - "
1472
+ msgstr ""
1473
+
1474
+ #: miniorange_2_factor_mobile_configuration.php:640
1475
+ msgid "Authentication methods"
1476
+ msgstr ""
1477
+
1478
+ #: miniorange_2_factor_mobile_configuration.php:642
1479
+ msgid "Current Plan"
1480
+ msgstr ""
1481
+
1482
+ #: miniorange_2_factor_mobile_configuration.php:658
1483
+ msgid "Standard plan - Authentication methods"
1484
+ msgstr ""
1485
+
1486
+ #: miniorange_2_factor_mobile_configuration.php:669
1487
+ msgid "Premium plan - Authentication methods"
1488
+ msgstr ""
1489
+
1490
+ #: miniorange_2_factor_mobile_configuration.php:679
1491
+ msgid "These authentication methods are available in the STANDARD and PREMIUM plans"
1492
+ msgstr ""
1493
+
1494
+ #: miniorange_2_factor_mobile_configuration.php:681
1495
+ msgid "to learn more"
1496
+ msgstr ""
1497
+
1498
+ #: miniorange_2_factor_mobile_configuration.php:1151
1499
+ msgid ""
1500
+ "If you wish to choose Email Verification / OTP Over SMS / OTP Over SMS and Email / OTP Over Email as your authentication method,\n"
1501
+ " SMS transaction prices & SMS delivery charges apply and they depend on country. SMS validity is for lifetime."
1502
+ msgstr ""
1503
+
1504
+ #: miniorange_2_factor_mobile_configuration.php:1158
1505
+ msgid "The plugin works with many of the default custom login forms (like Woocommerce / Theme My Login), however if you face any issues with your custom login form, contact us and we will help you with it."
1506
+ msgstr ""
1507
+
1508
+ #: miniorange_2_factor_mobile_configuration.php:1168
1509
+ msgid "Click on 'Upgrade' button of your preferred plan above."
1510
+ msgstr ""
1511
+
1512
+ #: miniorange_2_factor_mobile_configuration.php:1169
1513
+ msgid " You will be redirected to the miniOrange Console. Enter your miniOrange username and password, after which you will be redirected to the payment page."
1514
+ msgstr ""
1515
+
1516
+ #: miniorange_2_factor_mobile_configuration.php:1171
1517
+ msgid "Select the number of users you wish to upgrade for, and any add-ons if you wish to purchase, and make the payment."
1518
+ msgstr ""
1519
+
1520
+ #: miniorange_2_factor_mobile_configuration.php:1172
1521
+ msgid "After making the payment, you can find the Standard/Premium plugin to download from the 'License' tab in the left navigation bar of the miniOrange Console."
1522
+ msgstr ""
1523
+
1524
+ #: miniorange_2_factor_mobile_configuration.php:1173
1525
+ msgid "Download the premium plugin from the miniOrange Console."
1526
+ msgstr ""
1527
+
1528
+ #: miniorange_2_factor_mobile_configuration.php:1174
1529
+ msgid "In the Wordpress dashboard, uninstall the free plugin and install the premium plugin downloaded."
1530
+ msgstr ""
1531
+
1532
+ #: miniorange_2_factor_mobile_configuration.php:1175
1533
+ msgid "Login to the premium plugin with the miniOrange account you used to make the payment, after this your users will be able to set up 2FA."
1534
+ msgstr ""
1535
+
1536
+ #: miniorange_2_factor_mobile_configuration.php:1181
1537
+ msgid "There is no license key required to activate the Standard/Premium Plugins. You will have to just login with the miniOrange Account you used to make the purchase."
1538
+ msgstr ""
1539
+
1540
+ #: miniorange_2_factor_mobile_configuration.php:1190
1541
+ msgid "At miniOrange, we want to ensure you are 100% happy with your purchase. If the premium plugin you purchased is not working as advertised and you've attempted to resolve any issues with our support team, which couldn't get resolved then we will refund the whole amount within 10 days of the purchase."
1542
+ msgstr ""
1543
+
1544
+ #: miniorange_2_factor_mobile_configuration.php:1198
1545
+ msgid "If you have any doubts regarding the licensing plans, you can mail us at"
1546
+ msgstr ""
1547
+
1548
+ #: miniorange_2_factor_mobile_configuration.php:1199
1549
+ msgid "or submit a query using the support form."
1550
+ msgstr ""
1551
+
1552
+ #: miniorange_2_factor_mobile_configuration.php:1244
1553
+ msgid "(Only applicable if OTP over SMS is your preferred authentication method.)"
1554
+ msgstr ""
1555
+
1556
+ #: miniorange_2_factor_mobile_configuration.php:1244
1557
+ msgid "SMS Cost"
1558
+ msgstr ""
1559
+
1560
+ #: miniorange_2_factor_mobile_configuration.php:1247
1561
+ msgid "$5 per 100 OTP + SMS delivery charges"
1562
+ msgstr ""
1563
+
1564
+ #: miniorange_2_factor_mobile_configuration.php:1248
1565
+ msgid "$15 per 500 OTP + SMS delivery charges"
1566
+ msgstr ""
1567
+
1568
+ #: miniorange_2_factor_mobile_configuration.php:1249
1569
+ msgid "$22 per 1k OTP + SMS delivery charges"
1570
+ msgstr ""
1571
+
1572
+ #: miniorange_2_factor_mobile_configuration.php:1250
1573
+ msgid "$30 per 5k OTP + SMS delivery charges"
1574
+ msgstr ""
1575
+
1576
+ #: miniorange_2_factor_mobile_configuration.php:1251
1577
+ msgid "$40 per 10k OTP + SMS delivery charges"
1578
+ msgstr ""
1579
+
1580
+ #: miniorange_2_factor_mobile_configuration.php:1252
1581
+ msgid "$90 per 50k OTP + SMS delivery charges"
1582
+ msgstr ""
1583
+
1584
+ #: miniorange_2_factor_mobile_configuration.php:1261
1585
+ msgid "(Only applicable if OTP over Email/Email Verification is your preferred authentication method.)"
1586
+ msgstr ""
1587
+
1588
+ #: miniorange_2_factor_mobile_configuration.php:1261
1589
+ msgid "Email Cost"
1590
+ msgstr ""
1591
+
1592
+ #: miniorange_2_factor_mobile_configuration.php:1264
1593
+ msgid "$5 per 100 Email"
1594
+ msgstr ""
1595
+
1596
+ #: miniorange_2_factor_mobile_configuration.php:1265
1597
+ msgid "$15 per 100 Email"
1598
+ msgstr ""
1599
+
1600
+ #: miniorange_2_factor_mobile_configuration.php:1266
1601
+ msgid "$22 per 1k Email"
1602
+ msgstr ""
1603
+
1604
+ #: miniorange_2_factor_mobile_configuration.php:1267
1605
+ msgid "$30 per 5k Email"
1606
+ msgstr ""
1607
+
1608
+ #: miniorange_2_factor_mobile_configuration.php:1268
1609
+ msgid "$40 per 10k Email"
1610
+ msgstr ""
1611
+
1612
+ #: miniorange_2_factor_mobile_configuration.php:1269
1613
+ msgid "$90 per 50k Email"
1614
+ msgstr ""
1615
+
1616
+ #: miniorange_2_factor_mobile_configuration.php:1279
1617
+ #: miniorange_2_factor_mobile_configuration.php:1298
1618
+ msgid "Yearly Subscription Fees"
1619
+ msgstr ""
1620
+
1621
+ #: miniorange_2_factor_mobile_configuration.php:1282
1622
+ msgid "1 - 50 users - $30 per year"
1623
+ msgstr ""
1624
+
1625
+ #: miniorange_2_factor_mobile_configuration.php:1283
1626
+ msgid "50 - 100 users - $49 per year"
1627
+ msgstr ""
1628
+
1629
+ #: miniorange_2_factor_mobile_configuration.php:1284
1630
+ msgid "100 - 500 users - $99 per year"
1631
+ msgstr ""
1632
+
1633
+ #: miniorange_2_factor_mobile_configuration.php:1285
1634
+ msgid "500 - 1000 users - $199 per year"
1635
+ msgstr ""
1636
+
1637
+ #: miniorange_2_factor_mobile_configuration.php:1286
1638
+ msgid "1000 - 5000 users - $299 per year"
1639
+ msgstr ""
1640
+
1641
+ #: miniorange_2_factor_mobile_configuration.php:1287
1642
+ msgid "5000 - 10000 users - $499 per year"
1643
+ msgstr ""
1644
+
1645
+ #: miniorange_2_factor_mobile_configuration.php:1288
1646
+ msgid "10000 - 20000 users - $799 per year"
1647
+ msgstr ""
1648
+
1649
+ #: miniorange_2_factor_mobile_configuration.php:1301
1650
+ msgid "1 - 50 users - $99 per year"
1651
+ msgstr ""
1652
+
1653
+ #: miniorange_2_factor_mobile_configuration.php:1302
1654
+ msgid "50 - 100 users - $199 per year"
1655
+ msgstr ""
1656
+
1657
+ #: miniorange_2_factor_mobile_configuration.php:1303
1658
+ msgid "100 - 500 users - $349 per year"
1659
+ msgstr ""
1660
+
1661
+ #: miniorange_2_factor_mobile_configuration.php:1304
1662
+ msgid "500 - 1000 users - $499 per year"
1663
+ msgstr ""
1664
+
1665
+ #: miniorange_2_factor_mobile_configuration.php:1305
1666
+ msgid "1000 - 5000 users - $799 per year"
1667
+ msgstr ""
1668
+
1669
+ #: miniorange_2_factor_mobile_configuration.php:1306
1670
+ msgid "5000 - 10000 users - $999 per year "
1671
+ msgstr ""
1672
+
1673
+ #: miniorange_2_factor_mobile_configuration.php:1307
1674
+ msgid "10000 - 20000 users - $1449 per year"
1675
+ msgstr ""
1676
+
1677
+ #: miniorange_2_factor_settings.php:287
1678
+ msgid "miniOrange 2-Factor Plugin:"
1679
+ msgstr ""
1680
+
1681
+ #: miniorange_2_factor_settings.php:287
1682
+ msgid "You have"
1683
+ msgstr ""
1684
+
1685
+ #: miniorange_2_factor_settings.php:287
1686
+ msgid "SMS transactions"
1687
+ msgstr ""
1688
+
1689
+ #: miniorange_2_factor_settings.php:287
1690
+ msgid "remaining"
1691
+ msgstr ""
1692
+
1693
+ #: miniorange_2_factor_settings.php:287
1694
+ msgid "Check Transactions"
1695
+ msgstr ""
1696
+
1697
+ #: miniorange_2_factor_settings.php:287 miniorange_2_factor_settings.php:298
1698
+ msgid "Dismiss this notice."
1699
+ msgstr ""
1700
+
1701
+ #: miniorange_2_factor_settings.php:296 miniorange_2_factor_settings.php:307
1702
+ msgid "miniOrange 2-Factor Plugin: "
1703
+ msgstr ""
1704
+
1705
+ #: miniorange_2_factor_settings.php:296
1706
+ msgid "You have not configured your 2-factor authentication method yet."
1707
+ msgstr ""
1708
+
1709
+ #: miniorange_2_factor_settings.php:297
1710
+ msgid " Click here"
1711
+ msgstr ""
1712
+
1713
+ #: miniorange_2_factor_settings.php:297
1714
+ msgid " to set it up."
1715
+ msgstr ""
1716
+
1717
+ #: miniorange_2_factor_settings.php:307
1718
+ msgid ""
1719
+ "If you facing issues after the plugin update \n"
1720
+ "\t\t\tlike not seeing anything in the Account Setup Tab [ <a class=\"btn btn-link\" data-toggle=\"collapse\" id=\"showpreviewofbug\" href=\"#previewofbug\"\n"
1721
+ " aria-expanded=\"false\">"
1722
+ msgstr ""
1723
+
1724
+ #: miniorange_2_factor_settings.php:310
1725
+ msgid " Please click on "
1726
+ msgstr ""
1727
+
1728
+ #: miniorange_2_factor_settings.php:310
1729
+ msgid "Dismiss Notice "
1730
+ msgstr ""
1731
+
1732
+ #: miniorange_2_factor_settings.php:310
1733
+ msgid " if you are not facing any issues."
1734
+ msgstr ""
1735
+
1736
+ #: miniorange_2_factor_settings.php:315
1737
+ msgid "Clear / Refresh Cache"
1738
+ msgstr ""
1739
+
1740
+ #: miniorange_2_factor_settings.php:319
1741
+ msgid "Dismiss Notice"
1742
+ msgstr ""
1743
+
1744
+ #: miniorange_2_factor_settings.php:1712
1745
+ msgid "Your KBA as alternate 2 factor is configured successfully."
1746
+ msgstr ""
1747
+
1748
+ #: miniorange_2_factor_support.php:13
1749
+ msgid "Support"
1750
+ msgstr ""
1751
+
1752
+ #: miniorange_2_factor_support.php:17
1753
+ msgid "Need any help setting it up? Facing any issues? Shoot us a query and we will get back to you."
1754
+ msgstr ""
1755
+
1756
+ #: miniorange_2_factor_support.php:19
1757
+ msgid "Have a look at these FAQ's to see if your question has been answered already! "
1758
+ msgstr ""
1759
+
1760
+ #: miniorange_2_factor_support.php:48
1761
+ msgid "Your query here..."
1762
+ msgstr ""
1763
+
1764
+ #: miniorange_2_factor_support.php:56
1765
+ msgid "Submit Query"
1766
+ msgstr ""
miniorange_2_factor_settings.php CHANGED
@@ -3,12 +3,13 @@
3
  * Plugin Name: miniOrange 2 Factor Authentication
4
  * Plugin URI: https://miniorange.com
5
  * Description: This plugin provides various two-factor authentication methods as an additional layer of security after the default wordpress login. We Support Google/Authy/LastPass Authenticator, QR Code, Push Notification, Soft Token and Security Questions(KBA) for 1 User in the free version of the plugin.
6
- * Version: 5.3.0
7
  * Author: miniOrange
8
  * Author URI: https://miniorange.com
9
  * License: GPL2
10
  */
11
  define( 'MO_HOST_NAME', 'https://login.xecurify.com' );
 
12
  class Miniorange_twoFactor{
13
 
14
  function __construct()
@@ -122,7 +123,7 @@
122
  if( !$moWpnsUtility->check_empty_or_null( get_option('mo_wpns_registration_status') ) ) {
123
  delete_option('mo2f_email');
124
  }
125
- update_option('mo2f_activate_plugin', 0);
126
  delete_option('mo2f_customerKey');
127
  delete_option('mo2f_api_key');
128
  delete_option('mo2f_customer_token');
3
  * Plugin Name: miniOrange 2 Factor Authentication
4
  * Plugin URI: https://miniorange.com
5
  * Description: This plugin provides various two-factor authentication methods as an additional layer of security after the default wordpress login. We Support Google/Authy/LastPass Authenticator, QR Code, Push Notification, Soft Token and Security Questions(KBA) for 1 User in the free version of the plugin.
6
+ * Version: 5.3.3
7
  * Author: miniOrange
8
  * Author URI: https://miniorange.com
9
  * License: GPL2
10
  */
11
  define( 'MO_HOST_NAME', 'https://login.xecurify.com' );
12
+ define( 'MO2F_VERSION', '5.3.3' );
13
  class Miniorange_twoFactor{
14
 
15
  function __construct()
123
  if( !$moWpnsUtility->check_empty_or_null( get_option('mo_wpns_registration_status') ) ) {
124
  delete_option('mo2f_email');
125
  }
126
+ update_option('mo2f_activate_plugin', 1);
127
  delete_option('mo2f_customerKey');
128
  delete_option('mo2f_api_key');
129
  delete_option('mo2f_customer_token');
readme.txt CHANGED
@@ -3,9 +3,9 @@ Contributors: cyberlord92, twofactor
3
  Tags: google authenticator, two factor authentication, two factor, 2FA, TFA, MFA, 2 factor authentication, Remember Device, OTP, two step authentication,Clef, two factor auth, Mobile Authentication, strong authentication, 2 step authentication, Multifactor authentication, passwordless login, one time passcode, soft token Authentication, QR Code Authentication, email verification, KBA, Security Questions, knowledge based authentication,authy, authy two factor,yubico,Two-Factor Authentication, security, website security, login security, multi factor authentication, multi factor,wordfence, IP Blocking, IP Whitelisting, login Audits, woocommerce, smartphone authenticationDonate link: https://miniorange.com/
4
  Donate link: https://miniorange.com/
5
  Requires at least: 3.0.1
6
- Tested up to: 5.3.1
7
  Requires PHP: 5.3.0
8
- Stable tag: 5.3.0
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -271,6 +271,15 @@ miniOrange authentication service has 15+ authentication methods.One time passco
271
 
272
  == Changelog ==
273
 
 
 
 
 
 
 
 
 
 
274
  = 5.3.0 =
275
  * Google Authenticator-Two Factor Authentication (2FA) : Releasing Firewall with Two Factor.
276
 
@@ -662,6 +671,15 @@ More descriptive setup messages and UI changes.
662
 
663
  == Upgrade Notice ==
664
 
 
 
 
 
 
 
 
 
 
665
  = 5.3.0 =
666
  * Google Authenticator-Two Factor Authentication (2FA) : Releasing Firewall with Two Factor.
667
 
3
  Tags: google authenticator, two factor authentication, two factor, 2FA, TFA, MFA, 2 factor authentication, Remember Device, OTP, two step authentication,Clef, two factor auth, Mobile Authentication, strong authentication, 2 step authentication, Multifactor authentication, passwordless login, one time passcode, soft token Authentication, QR Code Authentication, email verification, KBA, Security Questions, knowledge based authentication,authy, authy two factor,yubico,Two-Factor Authentication, security, website security, login security, multi factor authentication, multi factor,wordfence, IP Blocking, IP Whitelisting, login Audits, woocommerce, smartphone authenticationDonate link: https://miniorange.com/
4
  Donate link: https://miniorange.com/
5
  Requires at least: 3.0.1
6
+ Tested up to: 5.3
7
  Requires PHP: 5.3.0
8
+ Stable tag: 5.3.3
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
271
 
272
  == Changelog ==
273
 
274
+ = 5.3.3 =
275
+ * Google Authenticator-Two Factor Authentication (2FA) : Minor Malware Scanner issues fix.
276
+
277
+ = 5.3.2 =
278
+ * Google Authenticator-Two Factor Authentication (2FA) : File Changes.
279
+
280
+ = 5.3.1 =
281
+ * Google Authenticator-Two Factor Authentication (2FA) : Bug fix.
282
+
283
  = 5.3.0 =
284
  * Google Authenticator-Two Factor Authentication (2FA) : Releasing Firewall with Two Factor.
285
 
671
 
672
  == Upgrade Notice ==
673
 
674
+ = 5.3.3 =
675
+ * Google Authenticator-Two Factor Authentication (2FA) : Minor Malware Scanner issues fix.
676
+
677
+ = 5.3.2 =
678
+ * Google Authenticator-Two Factor Authentication (2FA) : File Changes.
679
+
680
+ = 5.3.1 =
681
+ * Google Authenticator-Two Factor Authentication (2FA) : Bug fix.
682
+
683
  = 5.3.0 =
684
  * Google Authenticator-Two Factor Authentication (2FA) : Releasing Firewall with Two Factor.
685
 
views/scan_report_view.php CHANGED
@@ -325,17 +325,15 @@ function mo_wpns_start_scan(){
325
  'call_type':'malware_scan_status'
326
  };
327
  jQuery.post(ajaxurl, data, function(response){
328
- jQuery("#scan_files").html(response['scanned']+" files scanned<br>");
329
- jQuery("#malicious_files").html(response['infected']+" files found Malicious");
 
 
 
 
 
330
  if (response['status']=="COMPLETE"){
331
- if(response['scan_fail']=="service_unavailable"){
332
- jQuery('#mo_scan_message').empty();
333
- jQuery('#mo_scan_message').append("<div class= 'notice notice-error is-dismissible' style='height : 25px;padding-top: 10px;' >Scan Service is currently unavailable.</div>");
334
- jQuery("#scanstatus").removeClass();
335
- jQuery("#scanstatus").addClass("alert alert-warning");
336
- jQuery("#scanstatus").html("Malware scan could not be conducted as the service is currently unavailable.");
337
- window.scrollTo({ top: 0, behavior: 'smooth'});
338
- }
339
  jQuery('input[name="quick_scan_button"]').removeAttr('disabled');
340
  document.getElementById('quick_scan_button').style.backgroundColor = '#20b2aa';
341
  document.getElementById('quick_scan_button').value="Quick Scan";
@@ -409,24 +407,24 @@ function show_scan_details($detailreport, $result, $ignorefiles){
409
  echo "<div><span class='".$issuecolor." issue'><b>Malware</b></span></div>";
410
  echo "<div class='issuecontent' data-line='".$key."' data-issue='".$issues[$key]."'>Issue Found: ".$issues[$key]."</div>";
411
  }
412
- // if($key=='Shell Script'){
413
- // echo "<div><span class='".$issuecolor." issue'><b>".$key."</b></span></div>";
414
- // foreach ($value as $issue) {
415
- // echo "<div class='issuecontent' data-line='".$issue["l"]."' data-issue='".$issue["d"]."'>Match Found: ".$issue["d"]." Line: ".$issue["l"]."</div>";
416
- // }
417
- // }
418
- // if($key=='Vulnerable Code'){
419
- // echo "<div><span class='".$issuecolor." issue'><b>".$key."</b></span></div>";
420
- // foreach ($value as $issue) {
421
- // echo "<div class='issuecontent' data-line='".$issue["l"]."' data-issue='".$issue["d"]."'>Match Found: ".$issue["d"]." Line: ".$issue["l"]."</div>";
422
- // }
423
- // }
424
- // if($key=='SQL Injection'){
425
- // echo "<div><span class='".$issuecolor." issue'><b>".$key."</b></span></div>";
426
- // foreach ($value as $issue) {
427
- // echo "<div class='issuecontent' data-line='".$issue["l"]."' data-issue='".$issue["d"]."'>Match Found: ".$issue["d"]." Line: ".$issue["l"]."</div>";
428
- // }
429
- // }
430
  if($key=='repo'){
431
  echo "<div><span class='".$issuecolor." issue'><b>Check File with Repo: </b></span><div><div class='issuecontent'>File Status: ".$value["exist"]."</div>";
432
  }
325
  'call_type':'malware_scan_status'
326
  };
327
  jQuery.post(ajaxurl, data, function(response){
328
+ if(response['scanned']==0){
329
+ jQuery("#scan_files").html("Scanning with repository files<br>");
330
+ jQuery("#malicious_files").html(response['infected']+" files found Malicious");
331
+ }else{
332
+ jQuery("#scan_files").html(response['scanned']+" files scanned<br>");
333
+ jQuery("#malicious_files").html(response['infected']+" files found Malicious");
334
+ }
335
  if (response['status']=="COMPLETE"){
336
+
 
 
 
 
 
 
 
337
  jQuery('input[name="quick_scan_button"]').removeAttr('disabled');
338
  document.getElementById('quick_scan_button').style.backgroundColor = '#20b2aa';
339
  document.getElementById('quick_scan_button').value="Quick Scan";
407
  echo "<div><span class='".$issuecolor." issue'><b>Malware</b></span></div>";
408
  echo "<div class='issuecontent' data-line='".$key."' data-issue='".$issues[$key]."'>Issue Found: ".$issues[$key]."</div>";
409
  }
410
+ if($key=='Shell Script'){
411
+ echo "<div><span class='".$issuecolor." issue'><b>".$key."</b></span></div>";
412
+ foreach ($value as $issue) {
413
+ echo "<div class='issuecontent' data-line='".$issue["l"]."' data-issue='".$issue["d"]."'>Match Found: ".$issue["d"]." Line: ".$issue["l"]."</div>";
414
+ }
415
+ }
416
+ if($key=='Vulnerable Code'){
417
+ echo "<div><span class='".$issuecolor." issue'><b>".$key."</b></span></div>";
418
+ foreach ($value as $issue) {
419
+ echo "<div class='issuecontent' data-line='".$issue["l"]."' data-issue='".$issue["d"]."'>Match Found: ".$issue["d"]." Line: ".$issue["l"]."</div>";
420
+ }
421
+ }
422
+ if($key=='SQL Injection'){
423
+ echo "<div><span class='".$issuecolor." issue'><b>".$key."</b></span></div>";
424
+ foreach ($value as $issue) {
425
+ echo "<div class='issuecontent' data-line='".$issue["l"]."' data-issue='".$issue["d"]."'>Match Found: ".$issue["d"]." Line: ".$issue["l"]."</div>";
426
+ }
427
+ }
428
  if($key=='repo'){
429
  echo "<div><span class='".$issuecolor." issue'><b>Check File with Repo: </b></span><div><div class='issuecontent'>File Status: ".$value["exist"]."</div>";
430
  }
views/two_fa_custom_form.php CHANGED
@@ -13,5 +13,5 @@
13
  </ul>
14
  <p>And many more which are not mentioned here.</p>
15
 
16
- <p style="font-size:15px">If there is any custom login form where Two Factor is not initiated you can get let us know so that we can add support for it. You can reach us through our <a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mo2f_support"><?php echo mo2f_lt( 'Support' ) ; ?></a>.</p>
17
  </div>
13
  </ul>
14
  <p>And many more which are not mentioned here.</p>
15
 
16
+ <p style="font-size:15px">If there is any custom login form where Two Factor is not initiated you can get let us know so that we can add support for it. You can reach us by dropping a query in the <b>Support</b> section.</p>
17
  </div>
views/two_fa_login_option.php CHANGED
@@ -67,7 +67,7 @@ global $Mo2fdbQueries;
67
  echo 'disabled';
68
  } ?> />
69
  <?php echo mo2f_lt( 'Login with 2nd Factor only ' ); ?>
70
- <i>(<?php echo mo2f_lt( 'No password required.' ); ?>)</i> &nbsp;<a class="mo_wpns_button mo_wpns_button1"
71
  data-toggle="collapse"
72
  id="showpreview1"
73
  href="#preview9"
@@ -91,7 +91,7 @@ global $Mo2fdbQueries;
91
  echo 'disabled';
92
  } ?> />
93
  <?php echo mo2f_lt( ' I want to hide default login form.' ); ?> &nbsp;<a
94
- class="btn btn-link"
95
  data-toggle="collapse"
96
  href="#preview8"
97
  aria-expanded="false"><?php echo mo2f_lt( 'See preview' ); ?></a>
@@ -315,7 +315,7 @@ function get_standard_premium_options( $user ) {
315
  <div>
316
  <ul style="margin-left:4%" class="mo2f_ol">
317
  <li><?php echo mo2f_lt( 'Login with Wordpress username/password and 2nd Factor' ); ?> <a
318
- class="mo_wpns_button mo_wpns_button1" data-toggle="collapse" id="showpreview1" href="#preview7"
319
  aria-expanded="false">[ <?php echo mo2f_lt( 'See Preview' ); ?>
320
  ]</a>
321
  <div class="mo2f_collapse" id="preview7" style="height:300px;">
@@ -327,7 +327,7 @@ function get_standard_premium_options( $user ) {
327
  </div>
328
  </li><br>
329
  <li><?php echo mo2f_lt( 'Login with Wordpress username and 2nd Factor only' ); ?> <a
330
- class="mo_wpns_button mo_wpns_button1" data-toggle="collapse" id="showpreview2" href="#preview6"
331
  aria-expanded="false">[ <?php echo mo2f_lt( 'See Preview' ); ?>
332
  ]</a>
333
  <br>
@@ -388,7 +388,7 @@ function get_standard_premium_options( $user ) {
388
  <div>
389
  <ul style="margin-left:4%" class="mo2f_ol">
390
  <li><?php echo mo2f_lt( 'Login with Wordpress username/password and 2nd Factor' ); ?> <a
391
- class="mo_wpns_button mo_wpns_button1" data-toggle="collapse" id="showpreview1" href="#preview3"
392
  aria-expanded="false">[ <?php echo mo2f_lt( 'See Preview' ); ?>
393
  ]</a>
394
  <div class="mo2f_collapse" id="preview3" style="height:300px;">
@@ -400,7 +400,7 @@ function get_standard_premium_options( $user ) {
400
  </div>
401
  <br></li>
402
  <li><?php echo mo2f_lt( 'Login with Wordpress username and 2nd Factor only' ); ?> <a
403
- class="mo_wpns_button mo_wpns_button1" data-toggle="collapse" id="showpreview2" href="#preview4"
404
  aria-expanded="false">[ <?php echo mo2f_lt( 'See Preview' ); ?>
405
  ]</a>
406
  <br>
67
  echo 'disabled';
68
  } ?> />
69
  <?php echo mo2f_lt( 'Login with 2nd Factor only ' ); ?>
70
+ <i>(<?php echo mo2f_lt( 'No password required.' ); ?>)</i> &nbsp;<a
71
  data-toggle="collapse"
72
  id="showpreview1"
73
  href="#preview9"
91
  echo 'disabled';
92
  } ?> />
93
  <?php echo mo2f_lt( ' I want to hide default login form.' ); ?> &nbsp;<a
94
+
95
  data-toggle="collapse"
96
  href="#preview8"
97
  aria-expanded="false"><?php echo mo2f_lt( 'See preview' ); ?></a>
315
  <div>
316
  <ul style="margin-left:4%" class="mo2f_ol">
317
  <li><?php echo mo2f_lt( 'Login with Wordpress username/password and 2nd Factor' ); ?> <a
318
+ data-toggle="collapse" id="showpreview1" href="#preview7"
319
  aria-expanded="false">[ <?php echo mo2f_lt( 'See Preview' ); ?>
320
  ]</a>
321
  <div class="mo2f_collapse" id="preview7" style="height:300px;">
327
  </div>
328
  </li><br>
329
  <li><?php echo mo2f_lt( 'Login with Wordpress username and 2nd Factor only' ); ?> <a
330
+ data-toggle="collapse" id="showpreview2" href="#preview6"
331
  aria-expanded="false">[ <?php echo mo2f_lt( 'See Preview' ); ?>
332
  ]</a>
333
  <br>
388
  <div>
389
  <ul style="margin-left:4%" class="mo2f_ol">
390
  <li><?php echo mo2f_lt( 'Login with Wordpress username/password and 2nd Factor' ); ?> <a
391
+ data-toggle="collapse" id="showpreview1" href="#preview3"
392
  aria-expanded="false">[ <?php echo mo2f_lt( 'See Preview' ); ?>
393
  ]</a>
394
  <div class="mo2f_collapse" id="preview3" style="height:300px;">
400
  </div>
401
  <br></li>
402
  <li><?php echo mo2f_lt( 'Login with Wordpress username and 2nd Factor only' ); ?> <a
403
+ data-toggle="collapse" id="showpreview2" href="#preview4"
404
  aria-expanded="false">[ <?php echo mo2f_lt( 'See Preview' ); ?>
405
  ]</a>
406
  <br>
views/two_fa_video_guide.php CHANGED
@@ -1,2 +1,7 @@
1
- <?php
2
- include_once $dirName . 'views'.DIRECTORY_SEPARATOR.'two_fa_video_guide.php';
 
 
 
 
 
1
+ <div class="mo_wpns_setting_layout">
2
+ <h2>How to configure Two Factor Method?</h2>
3
+ <p>You can configure any method of your choice. We will give a demo on how we can configure Google Authenticator.</p><br>
4
+ <div style="margin:2%;">
5
+ <iframe width="100%" height="350" src="https://www.youtube.com/embed/vVGXjedIaGs" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>
6
+ </div>
7
+ </div>