1 Load Libraries and Data

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.0     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.2     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(lavaan)
## Warning: package 'lavaan' was built under R version 4.5.3
## This is lavaan 0.6-21
## lavaan is FREE software! Please report any bugs.
library(semTools)
## Warning: package 'semTools' was built under R version 4.5.3
##  
## ###############################################################################
## This is semTools 0.5-8
## All users of R (or SEM) are invited to submit functions or ideas for functions.
## ###############################################################################
## 
## Attaching package: 'semTools'
## 
## The following object is masked from 'package:readr':
## 
##     clipboard
library(MVN)
## Warning: package 'MVN' was built under R version 4.5.3
library(psych)
## 
## Attaching package: 'psych'
## 
## The following object is masked from 'package:MVN':
## 
##     mardia
## 
## The following objects are masked from 'package:semTools':
## 
##     reliability, skew
## 
## The following object is masked from 'package:lavaan':
## 
##     cor2cov
## 
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## 
## The following object is masked from 'package:psych':
## 
##     logit
## 
## The following object is masked from 'package:dplyr':
## 
##     recode
## 
## The following object is masked from 'package:purrr':
## 
##     some
library(semPlot)
## Warning: package 'semPlot' was built under R version 4.5.3
df_sem <- read.csv("Data POS-ITS 2.csv")[, -(1:8)]

ordinal_items <- c(
  paste0("POS", 1:8), 
  paste0("JS", 1:5), 
  paste0("WLB", 1:3), 
  paste0("ITS", 1:5)
)

head(df_sem)
read.csv("Data POS-ITS 2.csv")[, (1:8)] |>
  rename(
    `Position` = Q1,
    `Tenure (Years)` = Q2,
    `Companies Worked For` = Q3,
    `Age` = Q4,
    `Gender` = Q5,
    `Education` = Q6,
    `Monthly Income` = Q7,
    `Marital Status` = Q8
  ) |>
  mutate(
    Position = factor(Position, levels = 1:5,
      labels = c("Worker", "Sub-leader", "Leader", "Exec. Staff", "Other")),
    `Tenure (Years)` = factor(`Tenure (Years)`, levels = 1:5,
      labels = c("<2 yrs", "2-4 yrs", "5-7 yrs", "8-10 yrs", ">10 yrs")),
    `Companies Worked For` = factor(`Companies Worked For`, levels = 1:5,
      labels = c("<2", "2-4", "5-7", "8-10", ">10")),
    Age = factor(Age, levels = 1:4,
      labels = c("18-27", "28-37", "37-46", ">47")),
    Gender = factor(Gender, levels = 0:1,
      labels = c("Male", "Female")),
    Education = factor(Education, levels = 1:3,
      labels = c("High School", "College/Uni", "Master+")),
    `Monthly Income` = factor(`Monthly Income`, levels = 1:4,
      labels = c("<$250", "$250-400", "$401-600", ">$600")),
    `Marital Status` = factor(`Marital Status`, levels = 0:1,
      labels = c("Single", "Married"))
  ) |>
  pivot_longer(cols = everything(), names_to = "Characteristic", values_to = "Category") |>
  ggplot(aes(y = Category)) +
    geom_bar(fill = "#3498db", color = "black", alpha = 0.8) +
    facet_wrap(~ Characteristic, scales = "free", ncol = 2) +
    theme_minimal() +
    labs(
      title = "Respondent Characteristics Profile",
      x = "Number of Respondents",
      y = NULL
    ) +
    theme(
      strip.text = element_text(face = "bold", size = 10),
      plot.title = element_text(face = "bold", size = 14, hjust = 0.5)
    )

1.1 Outliers Detection

Although the material not include the “no outliers” assumption, SEM relies on covariance matrix which could be distort by significant multivariate outliers. Therefore, dropping outliers using mahalanobis with Chi-Squared cut-off is needed.

cat("Before removal:", nrow(df_sem), "\n")
## Before removal: 604
m_dist <- mahalanobis(df_sem,
                      colMeans(df_sem),
                      cov(df_sem))

cutoff <- qchisq(0.95, df = ncol(df_sem))
keep <- m_dist < cutoff

df_sem <- df_sem[keep, ]
cat("After removal:", nrow(df_sem), "\n")
## After removal: 552
data.frame(
  Index = 1:length(m_dist),
  Distance = m_dist,
  IsOutlier = m_dist >= cutoff
) |>
  ggplot(aes(x = Index, y = Distance, color = IsOutlier)) +
  geom_point(alpha = 0.5) +
  geom_hline(yintercept = cutoff, linetype = "dashed", color = "red") +
  scale_color_manual(values = c("FALSE" = "#2c3e50", "TRUE" = "#e74c3c"),
                     labels = c("Normal", "Outlier")) +
  theme_minimal() +
  labs(title = "Mahalanobis Distance Outlier Detection",
       subtitle = paste("Cutoff =", round(cutoff, 2)),
       x = "Observation Index", y = "Mahalanobis Distance")

2 Assumptions

2.1 Multivariate Normality

Standard method in SEM is Maximum Likelihood (ML) estimation. ML was mathematically designed assuming that your data follows a perfect multivariate normal distribution. Therefore, checking the is needed the multivariate normality is necessarily.

mvn_result <- mvn(df_sem, mvn_test = "hz")
print(summary(mvn_result, "mvn")$multivariate_normality)
## 
## ── Multivariate Normality Test Results ─────────────────────────────────────────
##            Test Statistic p.value     Method          MVN
## 1 Henze-Zirkler    11.645  <0.001 asymptotic ✗ Not normal
##            Test Statistic p.value     Method          MVN
## 1 Henze-Zirkler    11.645  <0.001 asymptotic ✗ Not normal
print(summary(mvn_result, "mvn")$univariate_normality)
## 
## ── Multivariate Normality Test Results ─────────────────────────────────────────
##            Test Statistic p.value     Method          MVN
## 1 Henze-Zirkler    11.645  <0.001 asymptotic ✗ Not normal
##                Test Variable Statistic p.value    Normality
## 1  Anderson-Darling     POS1   117.435  <0.001 ✗ Not normal
## 2  Anderson-Darling     POS2    46.197  <0.001 ✗ Not normal
## 3  Anderson-Darling     POS3    76.890  <0.001 ✗ Not normal
## 4  Anderson-Darling     POS4    72.607  <0.001 ✗ Not normal
## 5  Anderson-Darling     POS5    73.902  <0.001 ✗ Not normal
## 6  Anderson-Darling     POS6    64.302  <0.001 ✗ Not normal
## 7  Anderson-Darling     POS7    64.615  <0.001 ✗ Not normal
## 8  Anderson-Darling     POS8    77.440  <0.001 ✗ Not normal
## 9  Anderson-Darling      JS1    95.068  <0.001 ✗ Not normal
## 10 Anderson-Darling      JS2    77.457  <0.001 ✗ Not normal
## 11 Anderson-Darling      JS3    64.392  <0.001 ✗ Not normal
## 12 Anderson-Darling      JS4    63.501  <0.001 ✗ Not normal
## 13 Anderson-Darling      JS5    62.547  <0.001 ✗ Not normal
## 14 Anderson-Darling     WLB1    99.647  <0.001 ✗ Not normal
## 15 Anderson-Darling     WLB2    53.882  <0.001 ✗ Not normal
## 16 Anderson-Darling     WLB3    66.641  <0.001 ✗ Not normal
## 17 Anderson-Darling     ITS1   117.994  <0.001 ✗ Not normal
## 18 Anderson-Darling     ITS2    45.268  <0.001 ✗ Not normal
## 19 Anderson-Darling     ITS3    56.843  <0.001 ✗ Not normal
## 20 Anderson-Darling     ITS4    63.141  <0.001 ✗ Not normal
## 21 Anderson-Darling     ITS5    75.848  <0.001 ✗ Not normal
par(mfrow = c(5, 5), mar = c(2, 2, 2, 1))

for (var in names(df_sem)) {
  qqnorm(df_sem[[var]], main = paste("Q-Q:", var), cex.main = 0.8)
  qqline(df_sem[[var]], col = "red")
}

par(mfrow = c(1, 1), mar = c(5, 4, 4, 2) + 0.1)

The Henze-Zirkler test was used to assess multivariate normality across all 21 observed indicators. The test statistic was 11.645 with a p-value below 0.001, indicating that the data do not follow a multivariate normal distribution. Individual univariate normality was also assessed using the Anderson-Darling test. All 21 indicators yielded p-values below 0.001, confirming that each variable deviates significantly from a normal distribution. These results are also visually supported by the Q-Q plots above, where most data points deviate from the diagonal reference line. Because the normality assumption is violated, the analysis proceeds using the Diagonally Weighted Least Squares (DWLS) estimator with robust standard errors, which is appropriate for ordinal and non-normally distributed data.

2.2 Sample Adequent (KMO)

df_sem |>
  cor() |>
    KMO()
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = cor(df_sem))
## Overall MSA =  0.95
## MSA for each item = 
## POS1 POS2 POS3 POS4 POS5 POS6 POS7 POS8  JS1  JS2  JS3  JS4  JS5 WLB1 WLB2 WLB3 
## 0.94 0.93 0.95 0.95 0.95 0.95 0.95 0.96 0.94 0.97 0.95 0.94 0.94 0.94 0.95 0.90 
## ITS1 ITS2 ITS3 ITS4 ITS5 
## 0.96 0.96 0.96 0.97 0.95

The Kaiser-Meyer-Olkin (KMO) test was conducted to evaluate whether the correlation structure among variables is adequate for factor analysis. The overall MSA value was 0.95, which far exceeds the minimum threshold of 0.50. MSA values for individual items ranged from 0.90 to 0.97, with all items surpassing the threshold. This indicates that the data are highly suitable for Structural Equation Modeling.

2.3 Multicollinearty (VIF)

vif_model <- lm(ITS1 ~ POS1 + POS2 + POS3 + POS4 + POS5 + POS6 + POS7 + POS8 + 
                       JS1 + JS2 + JS3 + JS4 + JS5 + 
                       WLB1 + WLB2 + WLB3 + 
                       ITS2 + ITS3 + ITS4 + ITS5, 
                data = df_sem)
vif_result <- vif(vif_model)

vif_df <- data.frame(
  Variable = names(vif_result),
  VIF = as.numeric(vif_result)
)

# Plot the results
ggplot(vif_df, aes(x = reorder(Variable, VIF), y = VIF, fill = VIF > 5)) +
  geom_bar(stat = "identity", width = 0.7) +
  geom_hline(yintercept = 5, linetype = "dashed", color = "red", linewidth = 0.8) +
  geom_hline(yintercept = 3.3, linetype = "dotted", color = "orange", linewidth = 0.8) +
  coord_flip() + # Memutar agar nama variabel mudah dibaca
  scale_fill_manual(values = c("FALSE" = "#2ecc71", "TRUE" = "#e74c3c"), 
                    guide = "none") +
  theme_minimal() +
  labs(title = "Multicollinearity Check (VIF Results)",
       x = "Variables",
       y = "Variance Inflation Factor (VIF)")

The Variance Inflation Factor (VIF) was calculated for all indicators to check for multicollinearity. As shown in the chart, all VIF values fall well below 3.3, which is the threshold recommended as a safe boundary in formative indicator evaluation. No indicator approaches the more critical threshold of 5. This confirms that multicollinearity is not a concern in this dataset, and all indicators can be retained for further analysis.

3 Outer Model

3.1 Checking Each Construct

3.1.1 Perceived Organizational Support (POS)

model_pos_only <- paste("POS =~", paste0("POS", 1:8, collapse = " + "))

fit_pos <- cfa(model_pos_only, data = df_sem, ordered = paste0("POS", 1:8))
## Warning: lavaan->lav_model_vcov():  
##    The variance-covariance matrix of the estimated parameters (vcov) does not 
##    appear to be positive definite! The smallest eigenvalue (= 1.708701e-16) 
##    is close to zero. This may be a symptom that the model is not identified.
summary(fit_pos, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.6-21 ended normally after 22 iterations
## 
##   Estimator                                       DWLS
##   Optimization method                           NLMINB
##   Number of model parameters                        30
## 
##   Number of observations                           552
## 
## Model Test User Model:
##                                               Standard      Scaled
##   Test Statistic                                40.854      60.007
##   Degrees of freedom                                20          20
##   P-value (Unknown)                                 NA       0.000
##   Scaling correction factor                                  0.699
##   Shift parameter                                            1.591
##     simple second-order correction                                
## 
## Model Test Baseline Model:
## 
##   Test statistic                              9811.349    5669.005
##   Degrees of freedom                                28          28
##   P-value                                           NA       0.000
##   Scaling correction factor                                  1.734
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.998       0.993
##   Tucker-Lewis Index (TLI)                       0.997       0.990
##                                                                   
##   Robust Comparative Fit Index (CFI)                         0.940
##   Robust Tucker-Lewis Index (TLI)                            0.916
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.044       0.060
##   90 Percent confidence interval - lower         0.024       0.043
##   90 Percent confidence interval - upper         0.063       0.078
##   P-value H_0: RMSEA <= 0.050                    0.689       0.154
##   P-value H_0: RMSEA >= 0.080                    0.000       0.033
##                                                                   
##   Robust RMSEA                                               0.138
##   90 Percent confidence interval - lower                     0.102
##   90 Percent confidence interval - upper                     0.176
##   P-value H_0: Robust RMSEA <= 0.050                         0.000
##   P-value H_0: Robust RMSEA >= 0.080                         0.995
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.043       0.043
## 
## Parameter Estimates:
## 
##   Parameterization                               Delta
##   Standard errors                           Robust.sem
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   POS =~                                                                
##     POS1              1.000                               0.832    0.832
##     POS2              0.982    0.032   30.312    0.000    0.817    0.817
##     POS3              0.943    0.032   29.398    0.000    0.785    0.785
##     POS4              0.986    0.035   28.152    0.000    0.821    0.821
##     POS5              0.922    0.033   27.600    0.000    0.767    0.767
##     POS6              1.024    0.034   30.068    0.000    0.852    0.852
##     POS7              1.002    0.030   33.538    0.000    0.834    0.834
##     POS8              0.997    0.034   29.295    0.000    0.830    0.830
## 
## Thresholds:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     POS1|t1          -0.939    0.063  -14.928    0.000   -0.939   -0.939
##     POS1|t2           1.752    0.097   18.067    0.000    1.752    1.752
##     POS2|t1          -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     POS2|t2          -0.831    0.061  -13.702    0.000   -0.831   -0.831
##     POS2|t3           0.538    0.056    9.556    0.000    0.538    0.538
##     POS3|t1          -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     POS3|t2          -0.953    0.063  -15.077    0.000   -0.953   -0.953
##     POS3|t3           1.107    0.067   16.486    0.000    1.107    1.107
##     POS4|t1          -2.685    0.236  -11.374    0.000   -2.685   -2.685
##     POS4|t2          -0.932    0.063  -14.853    0.000   -0.932   -0.932
##     POS4|t3           1.066    0.066   16.149    0.000    1.066    1.066
##     POS5|t1          -0.967    0.064  -15.224    0.000   -0.967   -0.967
##     POS5|t2           1.035    0.065   15.872    0.000    1.035    1.035
##     POS6|t1          -2.547    0.201  -12.664    0.000   -2.547   -2.547
##     POS6|t2          -0.864    0.061  -14.091    0.000   -0.864   -0.864
##     POS6|t3           0.997    0.064   15.516    0.000    0.997    0.997
##     POS7|t1          -2.547    0.201  -12.664    0.000   -2.547   -2.547
##     POS7|t2          -0.831    0.061  -13.702    0.000   -0.831   -0.831
##     POS7|t3           1.035    0.065   15.872    0.000    1.035    1.035
##     POS8|t1          -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     POS8|t2          -0.884    0.062  -14.322    0.000   -0.884   -0.884
##     POS8|t3           1.186    0.070   17.053    0.000    1.186    1.186
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .POS1              0.307                               0.307    0.307
##    .POS2              0.332                               0.332    0.332
##    .POS3              0.383                               0.383    0.383
##    .POS4              0.327                               0.327    0.327
##    .POS5              0.411                               0.411    0.411
##    .POS6              0.274                               0.274    0.274
##    .POS7              0.305                               0.305    0.305
##    .POS8              0.311                               0.311    0.311
##     POS               0.693    0.041   16.887    0.000    1.000    1.000
semTools::AVE(fit_pos)
##   POS 
## 0.669
suppressWarnings(semTools::reliability(fit_pos))
## For constructs with categorical indicators, Zumbo et al.`s (2007) "ordinal alpha" is calculated in addition to the standard alpha, which treats ordinal variables as numeric. See Chalmers (2018) for a critique of "alpha.ord" and the response by Zumbo & Kroc (2019). Likewise, average variance extracted is calculated from polychoric (polyserial) not Pearson correlations.
##                 POS
## alpha     0.8841865
## alpha.ord 0.9388436
## omega     0.8901366
## omega2    0.8901366
## omega3    0.9013816
## avevar    0.6685875

A single-construct CFA was run for the POS construct using the DWLS estimator with robust standard errors. The scaled model fit indices were CFI = 0.993 and TLI = 0.990, both meeting the threshold of >= 0.90. The scaled RMSEA was 0.060, which is below the threshold of 0.08, and the SRMR was 0.043, which is below the threshold of 0.05. The model fit is therefore considered acceptable.

All eight indicators showed standardized factor loadings above 0.70, ranging from 0.767 (POS5) to 0.852 (POS6), meeting the ideal loading threshold. The AVE was 0.669, exceeding the minimum threshold of 0.50, indicating adequate convergent validity. For reliability, the ordinal alpha was 0.939 and the composite reliability (omega) was 0.890, both well above the 0.70 threshold. The POS construct therefore demonstrates satisfactory validity and reliability.

3.1.2 Job Satisfaction (JS)

model_js_only <- paste("JS =~", paste0("JS", 1:5, collapse = " + "))

fit_js <- cfa(model_js_only, data = df_sem, ordered = paste0("JS", 1:5))

summary(fit_js, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.6-21 ended normally after 16 iterations
## 
##   Estimator                                       DWLS
##   Optimization method                           NLMINB
##   Number of model parameters                        17
## 
##   Number of observations                           552
## 
## Model Test User Model:
##                                               Standard      Scaled
##   Test Statistic                                 4.622       6.580
##   Degrees of freedom                                 5           5
##   P-value (Unknown)                                 NA       0.254
##   Scaling correction factor                                  0.709
##   Shift parameter                                            0.058
##     simple second-order correction                                
## 
## Model Test Baseline Model:
## 
##   Test statistic                              2147.066    1722.463
##   Degrees of freedom                                10          10
##   P-value                                           NA       0.000
##   Scaling correction factor                                  1.248
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    1.000       0.999
##   Tucker-Lewis Index (TLI)                       1.000       0.998
##                                                                   
##   Robust Comparative Fit Index (CFI)                         0.995
##   Robust Tucker-Lewis Index (TLI)                            0.991
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.000       0.024
##   90 Percent confidence interval - lower         0.000       0.000
##   90 Percent confidence interval - upper         0.057       0.067
##   P-value H_0: RMSEA <= 0.050                    0.910       0.802
##   P-value H_0: RMSEA >= 0.080                    0.003       0.012
##                                                                   
##   Robust RMSEA                                               0.051
##   90 Percent confidence interval - lower                     0.000
##   90 Percent confidence interval - upper                     0.155
##   P-value H_0: Robust RMSEA <= 0.050                         0.415
##   P-value H_0: Robust RMSEA >= 0.080                         0.405
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.025       0.025
## 
## Parameter Estimates:
## 
##   Parameterization                               Delta
##   Standard errors                           Robust.sem
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   JS =~                                                                 
##     JS1               1.000                               0.818    0.818
##     JS2               0.819    0.051   15.915    0.000    0.670    0.670
##     JS3               0.969    0.049   19.857    0.000    0.793    0.793
##     JS4               1.058    0.048   21.952    0.000    0.866    0.866
##     JS5               0.962    0.049   19.645    0.000    0.787    0.787
## 
## Thresholds:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     JS1|t1           -0.224    0.054   -4.164    0.000   -0.224   -0.224
##     JS1|t2            2.363    0.165   14.312    0.000    2.363    2.363
##     JS2|t1           -0.401    0.055   -7.294    0.000   -0.401   -0.401
##     JS2|t2            1.655    0.091   18.259    0.000    1.655    1.655
##     JS3|t1           -2.685    0.236  -11.374    0.000   -2.685   -2.685
##     JS3|t2           -0.333    0.054   -6.112    0.000   -0.333   -0.333
##     JS3|t3            1.458    0.080   18.198    0.000    1.458    1.458
##     JS4|t1           -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     JS4|t2           -0.333    0.054   -6.112    0.000   -0.333   -0.333
##     JS4|t3            1.419    0.078   18.112    0.000    1.419    1.419
##     JS5|t1           -0.367    0.055   -6.703    0.000   -0.367   -0.367
##     JS5|t2            1.360    0.076   17.929    0.000    1.360    1.360
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .JS1               0.331                               0.331    0.331
##    .JS2               0.551                               0.551    0.551
##    .JS3               0.371                               0.371    0.371
##    .JS4               0.251                               0.251    0.251
##    .JS5               0.380                               0.380    0.380
##     JS                0.669    0.051   13.002    0.000    1.000    1.000
semTools::AVE(fit_js)
##    JS 
## 0.623
suppressWarnings(semTools::reliability(fit_js))
## For constructs with categorical indicators, Zumbo et al.`s (2007) "ordinal alpha" is calculated in addition to the standard alpha, which treats ordinal variables as numeric. See Chalmers (2018) for a critique of "alpha.ord" and the response by Zumbo & Kroc (2019). Likewise, average variance extracted is calculated from polychoric (polyserial) not Pearson correlations.
##                  JS
## alpha     0.8044338
## alpha.ord 0.8887029
## omega     0.8151876
## omega2    0.8151876
## omega3    0.8182810
## avevar    0.6233549

A single-construct CFA was estimated for the JS construct. The scaled CFI was 0.999 and TLI was 0.998, both above 0.90. The scaled RMSEA was 0.024 and the SRMR was 0.025, both meeting their respective thresholds. The model fit is excellent.

Standardized factor loadings ranged from 0.670 (JS2) to 0.866 (JS4). JS2 sits in the acceptable range of 0.50 to 0.70, while all other indicators meet the ideal threshold of >= 0.70. The AVE was 0.623, above the 0.50 threshold, confirming convergent validity. The ordinal alpha was 0.889 and omega was 0.815, both exceeding 0.70. The JS construct meets all reliability and validity criteria.

3.1.3 Work-life balance (WLB)

model_wlb_only <- paste("WLB =~", paste0("WLB", 1:3, collapse = " + "))

fit_wlb <- cfa(model_wlb_only, data = df_sem, ordered = paste0("WLB", 1:3))

summary(fit_wlb, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.6-21 ended normally after 17 iterations
## 
##   Estimator                                       DWLS
##   Optimization method                           NLMINB
##   Number of model parameters                        12
## 
##   Number of observations                           552
## 
## Model Test User Model:
##                                               Standard      Scaled
##   Test Statistic                                 0.000       0.000
##   Degrees of freedom                                 0           0
## 
## Model Test Baseline Model:
## 
##   Test statistic                               535.427     518.127
##   Degrees of freedom                                 3           3
##   P-value                                           NA       0.000
##   Scaling correction factor                                  1.034
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    1.000       1.000
##   Tucker-Lewis Index (TLI)                       1.000       1.000
##                                                                   
##   Robust Comparative Fit Index (CFI)                         1.000
##   Robust Tucker-Lewis Index (TLI)                            1.000
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.000       0.000
##   90 Percent confidence interval - lower         0.000       0.000
##   90 Percent confidence interval - upper         0.000       0.000
##   P-value H_0: RMSEA <= 0.050                       NA          NA
##   P-value H_0: RMSEA >= 0.080                       NA          NA
##                                                                   
##   Robust RMSEA                                               0.000
##   90 Percent confidence interval - lower                     0.000
##   90 Percent confidence interval - upper                     0.000
##   P-value H_0: Robust RMSEA <= 0.050                            NA
##   P-value H_0: Robust RMSEA >= 0.080                            NA
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.000       0.000
## 
## Parameter Estimates:
## 
##   Parameterization                               Delta
##   Standard errors                           Robust.sem
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   WLB =~                                                                
##     WLB1              1.000                               0.782    0.782
##     WLB2              0.940    0.085   11.004    0.000    0.735    0.735
##     WLB3              1.054    0.105   10.048    0.000    0.824    0.824
## 
## Thresholds:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     WLB1|t1          -2.685    0.236  -11.374    0.000   -2.685   -2.685
##     WLB1|t2          -0.586    0.057  -10.303    0.000   -0.586   -0.586
##     WLB1|t3           1.954    0.113   17.255    0.000    1.954    1.954
##     WLB2|t1          -2.547    0.201  -12.664    0.000   -2.547   -2.547
##     WLB2|t2          -0.276    0.054   -5.097    0.000   -0.276   -0.276
##     WLB2|t3           1.233    0.071   17.343    0.000    1.233    1.233
##     WLB3|t1          -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     WLB3|t2          -0.271    0.054   -5.012    0.000   -0.271   -0.271
##     WLB3|t3           1.527    0.083   18.291    0.000    1.527    1.527
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .WLB1              0.388                               0.388    0.388
##    .WLB2              0.459                               0.459    0.459
##    .WLB3              0.321                               0.321    0.321
##     WLB               0.612    0.073    8.398    0.000    1.000    1.000
semTools::AVE(fit_wlb)
##  WLB 
## 0.61
suppressWarnings(semTools::reliability(fit_wlb))
## For constructs with categorical indicators, Zumbo et al.`s (2007) "ordinal alpha" is calculated in addition to the standard alpha, which treats ordinal variables as numeric. See Chalmers (2018) for a critique of "alpha.ord" and the response by Zumbo & Kroc (2019). Likewise, average variance extracted is calculated from polychoric (polyserial) not Pearson correlations.
##                 WLB
## alpha     0.6947285
## alpha.ord 0.8233283
## omega     0.7132284
## omega2    0.7132284
## omega3    0.7132284
## avevar    0.6103370

The WLB construct was estimated with three indicators. Because this is a just-identified model (degrees of freedom = 0), the model fit indices produce perfect values by definition, and no goodness-of-fit evaluation can be conducted on the model itself. This is a known limitation of three-indicator single-construct models.

Standardized factor loadings ranged from 0.735 (WLB2) to 0.824 (WLB3) in the first-order model output, with all loadings meeting the ideal threshold of >= 0.70. The AVE was 0.610, above 0.50. For reliability, the ordinal alpha was 0.823 and omega was 0.713, both above the 0.70 threshold. The WLB construct satisfies convergent validity and reliability requirements despite the model fit being non-evaluable at this stage.

3.1.4 Employee Intention to Stay (ITS)

model_its_only <- paste("ITS =~", paste0("ITS", 1:5, collapse = " + "))

fit_its <- cfa(model_its_only, data = df_sem, ordered = paste0("ITS", 1:5))
## Warning: lavaan->lav_model_vcov():  
##    The variance-covariance matrix of the estimated parameters (vcov) does not 
##    appear to be positive definite! The smallest eigenvalue (= -3.558432e-17) 
##    is smaller than zero. This may be a symptom that the model is not 
##    identified.
summary(fit_its, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.6-21 ended normally after 16 iterations
## 
##   Estimator                                       DWLS
##   Optimization method                           NLMINB
##   Number of model parameters                        20
## 
##   Number of observations                           552
## 
## Model Test User Model:
##                                               Standard      Scaled
##   Test Statistic                                 3.635       5.647
##   Degrees of freedom                                 5           5
##   P-value (Unknown)                                 NA       0.342
##   Scaling correction factor                                  0.654
##   Shift parameter                                            0.090
##     simple second-order correction                                
## 
## Model Test Baseline Model:
## 
##   Test statistic                              4487.621    3398.378
##   Degrees of freedom                                10          10
##   P-value                                           NA       0.000
##   Scaling correction factor                                  1.321
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    1.000       1.000
##   Tucker-Lewis Index (TLI)                       1.001       1.000
##                                                                   
##   Robust Comparative Fit Index (CFI)                         1.000
##   Robust Tucker-Lewis Index (TLI)                            1.004
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.000       0.015
##   90 Percent confidence interval - lower         0.000       0.000
##   90 Percent confidence interval - upper         0.050       0.063
##   P-value H_0: RMSEA <= 0.050                    0.949       0.857
##   P-value H_0: RMSEA >= 0.080                    0.001       0.007
##                                                                   
##   Robust RMSEA                                               0.000
##   90 Percent confidence interval - lower                     0.000
##   90 Percent confidence interval - upper                     0.112
##   P-value H_0: Robust RMSEA <= 0.050                         0.691
##   P-value H_0: Robust RMSEA >= 0.080                         0.158
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.016       0.016
## 
## Parameter Estimates:
## 
##   Parameterization                               Delta
##   Standard errors                           Robust.sem
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   ITS =~                                                                
##     ITS1              1.000                               0.900    0.900
##     ITS2              0.847    0.033   25.549    0.000    0.762    0.762
##     ITS3              0.875    0.032   27.197    0.000    0.787    0.787
##     ITS4              0.911    0.033   27.492    0.000    0.820    0.820
##     ITS5              0.970    0.032   30.276    0.000    0.872    0.872
## 
## Thresholds:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     ITS1|t1          -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     ITS1|t2          -0.819    0.060  -13.545    0.000   -0.819   -0.819
##     ITS1|t3           1.954    0.113   17.255    0.000    1.954    1.954
##     ITS2|t1          -2.547    0.201  -12.664    0.000   -2.547   -2.547
##     ITS2|t2          -0.635    0.057  -11.046    0.000   -0.635   -0.635
##     ITS2|t3           0.763    0.059   12.831    0.000    0.763    0.763
##     ITS3|t1          -2.363    0.165  -14.312    0.000   -2.363   -2.363
##     ITS3|t2          -0.733    0.059  -12.430    0.000   -0.733   -0.733
##     ITS3|t3           0.997    0.064   15.516    0.000    0.997    0.997
##     ITS4|t1          -2.363    0.165  -14.312    0.000   -2.363   -2.363
##     ITS4|t2          -0.703    0.058  -12.026    0.000   -0.703   -0.703
##     ITS4|t3           1.150    0.068   16.808    0.000    1.150    1.150
##     ITS5|t1          -2.363    0.165  -14.312    0.000   -2.363   -2.363
##     ITS5|t2          -0.775    0.060  -12.991    0.000   -0.775   -0.775
##     ITS5|t3           1.305    0.074   17.707    0.000    1.305    1.305
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .ITS1              0.191                               0.191    0.191
##    .ITS2              0.419                               0.419    0.419
##    .ITS3              0.381                               0.381    0.381
##    .ITS4              0.328                               0.328    0.328
##    .ITS5              0.239                               0.239    0.239
##     ITS               0.809    0.044   18.484    0.000    1.000    1.000
semTools::AVE(fit_its)
##   ITS 
## 0.688
suppressWarnings(semTools::reliability(fit_its))
## For constructs with categorical indicators, Zumbo et al.`s (2007) "ordinal alpha" is calculated in addition to the standard alpha, which treats ordinal variables as numeric. See Chalmers (2018) for a critique of "alpha.ord" and the response by Zumbo & Kroc (2019). Likewise, average variance extracted is calculated from polychoric (polyserial) not Pearson correlations.
##                 ITS
## alpha     0.8359739
## alpha.ord 0.9146666
## omega     0.8406177
## omega2    0.8406177
## omega3    0.8432373
## avevar    0.6883316

The ITS construct CFA yielded excellent fit. The scaled CFI was 1.000 and TLI was 1.000, both exceeding 0.90. The scaled RMSEA was 0.015 and the SRMR was 0.016, both well within acceptable bounds. All five indicators had standardized loadings above 0.70, ranging from 0.762 (ITS2) to 0.900 (ITS1), meeting the ideal threshold. The AVE was 0.688, confirming convergent validity. Both ordinal alpha and omega exceeded 0.70, confirming adequate reliability. The ITS construct performs well across all measurement criteria.

3.2 First Order CFA

outer_model <- paste(model_pos_only, model_js_only, model_wlb_only, model_its_only, sep = "\n")
fit_outer <- cfa(
  outer_model, 
  data = df_sem, 
  ordered = ordinal_items
)
## Warning: lavaan->lav_model_vcov():  
##    The variance-covariance matrix of the estimated parameters (vcov) does not 
##    appear to be positive definite! The smallest eigenvalue (= -2.782422e-16) 
##    is smaller than zero. This may be a symptom that the model is not 
##    identified.
summary(fit_outer, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.6-21 ended normally after 44 iterations
## 
##   Estimator                                       DWLS
##   Optimization method                           NLMINB
##   Number of model parameters                        85
## 
##   Number of observations                           552
## 
## Model Test User Model:
##                                               Standard      Scaled
##   Test Statistic                               298.448     434.674
##   Degrees of freedom                               183         183
##   P-value (Unknown)                                 NA       0.000
##   Scaling correction factor                                  0.768
##   Shift parameter                                           46.011
##     simple second-order correction                                
## 
## Model Test Baseline Model:
## 
##   Test statistic                             37915.539   12360.651
##   Degrees of freedom                               210         210
##   P-value                                           NA       0.000
##   Scaling correction factor                                  3.103
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.997       0.979
##   Tucker-Lewis Index (TLI)                       0.996       0.976
##                                                                   
##   Robust Comparative Fit Index (CFI)                         0.892
##   Robust Tucker-Lewis Index (TLI)                            0.876
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.034       0.050
##   90 Percent confidence interval - lower         0.027       0.044
##   90 Percent confidence interval - upper         0.041       0.056
##   P-value H_0: RMSEA <= 0.050                    1.000       0.495
##   P-value H_0: RMSEA >= 0.080                    0.000       0.000
##                                                                   
##   Robust RMSEA                                               0.104
##   90 Percent confidence interval - lower                     0.092
##   90 Percent confidence interval - upper                     0.115
##   P-value H_0: Robust RMSEA <= 0.050                         0.000
##   P-value H_0: Robust RMSEA >= 0.080                         1.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.048       0.048
## 
## Parameter Estimates:
## 
##   Parameterization                               Delta
##   Standard errors                           Robust.sem
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   POS =~                                                                
##     POS1              1.000                               0.803    0.803
##     POS2              0.992    0.036   27.182    0.000    0.797    0.797
##     POS3              0.958    0.035   27.662    0.000    0.769    0.769
##     POS4              1.038    0.039   26.918    0.000    0.834    0.834
##     POS5              0.930    0.036   26.085    0.000    0.747    0.747
##     POS6              1.061    0.040   26.609    0.000    0.853    0.853
##     POS7              1.061    0.035   30.214    0.000    0.852    0.852
##     POS8              1.080    0.039   28.035    0.000    0.868    0.868
##   JS =~                                                                 
##     JS1               1.000                               0.788    0.788
##     JS2               0.930    0.046   20.263    0.000    0.733    0.733
##     JS3               1.069    0.046   23.347    0.000    0.843    0.843
##     JS4               1.060    0.046   22.914    0.000    0.835    0.835
##     JS5               0.946    0.041   22.885    0.000    0.745    0.745
##   WLB =~                                                                
##     WLB1              1.000                               0.848    0.848
##     WLB2              0.903    0.042   21.412    0.000    0.766    0.766
##     WLB3              0.867    0.041   21.262    0.000    0.735    0.735
##   ITS =~                                                                
##     ITS1              1.000                               0.917    0.917
##     ITS2              0.873    0.028   31.515    0.000    0.801    0.801
##     ITS3              0.868    0.025   34.587    0.000    0.796    0.796
##     ITS4              0.887    0.027   32.924    0.000    0.814    0.814
##     ITS5              0.899    0.026   35.238    0.000    0.825    0.825
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   POS ~~                                                                
##     JS                0.403    0.029   13.729    0.000    0.637    0.637
##     WLB               0.383    0.032   11.893    0.000    0.562    0.562
##     ITS               0.597    0.033   17.911    0.000    0.810    0.810
##   JS ~~                                                                 
##     WLB               0.548    0.035   15.582    0.000    0.820    0.820
##     ITS               0.513    0.033   15.431    0.000    0.709    0.709
##   WLB ~~                                                                
##     ITS               0.614    0.033   18.412    0.000    0.790    0.790
## 
## Thresholds:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     POS1|t1          -0.939    0.063  -14.928    0.000   -0.939   -0.939
##     POS1|t2           1.752    0.097   18.067    0.000    1.752    1.752
##     POS2|t1          -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     POS2|t2          -0.831    0.061  -13.702    0.000   -0.831   -0.831
##     POS2|t3           0.538    0.056    9.556    0.000    0.538    0.538
##     POS3|t1          -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     POS3|t2          -0.953    0.063  -15.077    0.000   -0.953   -0.953
##     POS3|t3           1.107    0.067   16.486    0.000    1.107    1.107
##     POS4|t1          -2.685    0.236  -11.374    0.000   -2.685   -2.685
##     POS4|t2          -0.932    0.063  -14.853    0.000   -0.932   -0.932
##     POS4|t3           1.066    0.066   16.149    0.000    1.066    1.066
##     POS5|t1          -0.967    0.064  -15.224    0.000   -0.967   -0.967
##     POS5|t2           1.035    0.065   15.872    0.000    1.035    1.035
##     POS6|t1          -2.547    0.201  -12.664    0.000   -2.547   -2.547
##     POS6|t2          -0.864    0.061  -14.091    0.000   -0.864   -0.864
##     POS6|t3           0.997    0.064   15.516    0.000    0.997    0.997
##     POS7|t1          -2.547    0.201  -12.664    0.000   -2.547   -2.547
##     POS7|t2          -0.831    0.061  -13.702    0.000   -0.831   -0.831
##     POS7|t3           1.035    0.065   15.872    0.000    1.035    1.035
##     POS8|t1          -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     POS8|t2          -0.884    0.062  -14.322    0.000   -0.884   -0.884
##     POS8|t3           1.186    0.070   17.053    0.000    1.186    1.186
##     JS1|t1           -0.224    0.054   -4.164    0.000   -0.224   -0.224
##     JS1|t2            2.363    0.165   14.312    0.000    2.363    2.363
##     JS2|t1           -0.401    0.055   -7.294    0.000   -0.401   -0.401
##     JS2|t2            1.655    0.091   18.259    0.000    1.655    1.655
##     JS3|t1           -2.685    0.236  -11.374    0.000   -2.685   -2.685
##     JS3|t2           -0.333    0.054   -6.112    0.000   -0.333   -0.333
##     JS3|t3            1.458    0.080   18.198    0.000    1.458    1.458
##     JS4|t1           -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     JS4|t2           -0.333    0.054   -6.112    0.000   -0.333   -0.333
##     JS4|t3            1.419    0.078   18.112    0.000    1.419    1.419
##     JS5|t1           -0.367    0.055   -6.703    0.000   -0.367   -0.367
##     JS5|t2            1.360    0.076   17.929    0.000    1.360    1.360
##     WLB1|t1          -2.685    0.236  -11.374    0.000   -2.685   -2.685
##     WLB1|t2          -0.586    0.057  -10.303    0.000   -0.586   -0.586
##     WLB1|t3           1.954    0.113   17.255    0.000    1.954    1.954
##     WLB2|t1          -2.547    0.201  -12.664    0.000   -2.547   -2.547
##     WLB2|t2          -0.276    0.054   -5.097    0.000   -0.276   -0.276
##     WLB2|t3           1.233    0.071   17.343    0.000    1.233    1.233
##     WLB3|t1          -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     WLB3|t2          -0.271    0.054   -5.012    0.000   -0.271   -0.271
##     WLB3|t3           1.527    0.083   18.291    0.000    1.527    1.527
##     ITS1|t1          -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     ITS1|t2          -0.819    0.060  -13.545    0.000   -0.819   -0.819
##     ITS1|t3           1.954    0.113   17.255    0.000    1.954    1.954
##     ITS2|t1          -2.547    0.201  -12.664    0.000   -2.547   -2.547
##     ITS2|t2          -0.635    0.057  -11.046    0.000   -0.635   -0.635
##     ITS2|t3           0.763    0.059   12.831    0.000    0.763    0.763
##     ITS3|t1          -2.363    0.165  -14.312    0.000   -2.363   -2.363
##     ITS3|t2          -0.733    0.059  -12.430    0.000   -0.733   -0.733
##     ITS3|t3           0.997    0.064   15.516    0.000    0.997    0.997
##     ITS4|t1          -2.363    0.165  -14.312    0.000   -2.363   -2.363
##     ITS4|t2          -0.703    0.058  -12.026    0.000   -0.703   -0.703
##     ITS4|t3           1.150    0.068   16.808    0.000    1.150    1.150
##     ITS5|t1          -2.363    0.165  -14.312    0.000   -2.363   -2.363
##     ITS5|t2          -0.775    0.060  -12.991    0.000   -0.775   -0.775
##     ITS5|t3           1.305    0.074   17.707    0.000    1.305    1.305
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .POS1              0.354                               0.354    0.354
##    .POS2              0.365                               0.365    0.365
##    .POS3              0.408                               0.408    0.408
##    .POS4              0.304                               0.304    0.304
##    .POS5              0.442                               0.442    0.442
##    .POS6              0.273                               0.273    0.273
##    .POS7              0.273                               0.273    0.273
##    .POS8              0.247                               0.247    0.247
##    .JS1               0.379                               0.379    0.379
##    .JS2               0.463                               0.463    0.463
##    .JS3               0.290                               0.290    0.290
##    .JS4               0.302                               0.302    0.302
##    .JS5               0.444                               0.444    0.444
##    .WLB1              0.280                               0.280    0.280
##    .WLB2              0.413                               0.413    0.413
##    .WLB3              0.459                               0.459    0.459
##    .ITS1              0.159                               0.159    0.159
##    .ITS2              0.359                               0.359    0.359
##    .ITS3              0.367                               0.367    0.367
##    .ITS4              0.338                               0.338    0.338
##    .ITS5              0.320                               0.320    0.320
##     POS               0.646    0.042   15.539    0.000    1.000    1.000
##     JS                0.621    0.045   13.948    0.000    1.000    1.000
##     WLB               0.720    0.052   13.858    0.000    1.000    1.000
##     ITS               0.841    0.038   21.853    0.000    1.000    1.000
semTools::AVE(fit_outer)
##   POS    JS   WLB   ITS 
## 0.667 0.624 0.616 0.692
suppressWarnings(semTools::reliability(fit_outer))
## For constructs with categorical indicators, Zumbo et al.`s (2007) "ordinal alpha" is calculated in addition to the standard alpha, which treats ordinal variables as numeric. See Chalmers (2018) for a critique of "alpha.ord" and the response by Zumbo & Kroc (2019). Likewise, average variance extracted is calculated from polychoric (polyserial) not Pearson correlations.
##                 POS        JS       WLB       ITS
## alpha     0.8841865 0.8044338 0.6947285 0.8359739
## alpha.ord 0.9388436 0.8887029 0.8233283 0.9146666
## omega     0.8897832 0.8155385 0.7129708 0.8436781
## omega2    0.8897832 0.8155385 0.7129708 0.8436781
## omega3    0.8993271 0.8214535 0.7127891 0.8503059
## avevar    0.6667180 0.6243000 0.6157428 0.6917354

A combined first-order CFA was estimated with all four latent constructs modeled simultaneously. The scaled CFI was 0.979 and TLI was 0.976, both above the 0.90 threshold. The scaled RMSEA was 0.050, which sits exactly at the boundary of the threshold of < 0.08 and is considered acceptable. The SRMR was 0.048, just below the threshold of 0.05. Overall, the measurement model demonstrates acceptable fit.

All standardized factor loadi0.8890.889ngs met or exceeded 0.70 across the four constructs. For POS, loadings ranged from 0.747 to 0.868. For JS, loadings ranged from 0.733 to 0.843. For WLB, loadings ranged from 0.735 to 0.848. For ITS, loadings ranged from 0.796 to 0.917. All loadings satisfy the ideal threshold, confirming that each indicator adequately reflects its respective construct.

All constructs exceeded the recommended thresholds of 0.50 for AVE and 0.70 for reliability. Specifically, Perceived Organizational Support (POS) demonstrated strong validity and reliability (AVE = 0.667, Ordinal \(\alpha\) = 0.939, \(\omega\) = 0.890). Job Satisfaction (JS) also met all criteria (AVE = 0.624, Ordinal \(\alpha\) = 0.889, \(\omega\) = 0.816). Work-Life Balance (WLB) showed acceptable internal consistency and variance extraction (AVE = 0.616, Ordinal \(\alpha\) = 0.823, \(\omega\) = 0.713). Finally, Intention to Stay (ITS) exhibited robust psychometric properties (AVE = 0.692, Ordinal \(\alpha\) = 0.915, \(\omega\) = 0.844).

3.2.1 HTMT Ratio

htmt_matrix <- htmt(outer_model, data = df_sem, ordered = ordinal_items)
print(htmt_matrix)
##       POS    JS   WLB   ITS
## POS 1.000                  
## JS  0.631 1.000            
## WLB 0.535 0.824 1.000      
## ITS 0.811 0.713 0.774 1.000

For the HTMT ratio, the highest value was observed between JS and WLB at 0.824, which remains below the stricter threshold of 0.85. All other HTMT values were also below 0.85. This confirms that each construct is empirically distinct from the others.

3.2.2 Fornell-Larcker Criterion

construct_cors <- lavInspect(fit_outer, what = "cor.lv")
cat("\n--- Construct Correlations ---\n")
## 
## --- Construct Correlations ---
print(construct_cors)
##       POS    JS   WLB   ITS
## POS 1.000                  
## JS  0.637 1.000            
## WLB 0.562 0.820 1.000      
## ITS 0.810 0.709 0.790 1.000
ave_values <- semTools::AVE(fit_outer)
sqrt_ave <- sqrt(ave_values)
cat("\n--- Square Root of AVE ---\n")
## 
## --- Square Root of AVE ---
print(sqrt_ave)
##   POS    JS   WLB   ITS 
## 0.817 0.790 0.785 0.832

For the Fornell-Larcker criterion, the square roots of the AVE values were POS = 0.817, JS = 0.790, WLB = 0.785, and ITS = 0.832. In each case, the square root of a construct’s AVE exceeds its correlations with every other construct. For example, ITS correlates with POS at 0.810 and with WLB at 0.790, but the square root of the AVE for both ITS (0.832) and POS (0.817) and WLB (0.785) still satisfies the criterion when compared within their respective rows and columns.

Discriminant validity is therefore supported across all constructs, confirming that the four latent variables measure distinct dimensions.

4 Inner Model

inner_model <- "ITS ~ POS + JS + WLB"
full_model <- paste(outer_model, inner_model, sep = "\n")
fit_full <- sem(model = full_model, 
                data = df_sem, 
                ordered = ordinal_items)
## Warning: lavaan->lav_model_vcov():  
##    The variance-covariance matrix of the estimated parameters (vcov) does not 
##    appear to be positive definite! The smallest eigenvalue (= -2.760201e-16) 
##    is smaller than zero. This may be a symptom that the model is not 
##    identified.
semPaths(fit_full, 
         whatLabels = "std", 
         layout = "tree", 
         rotation = 2, 
         intercepts = FALSE, 
         thresholds = FALSE,
         sizeMan = 5, 
         sizeLat = 8,
         edge.label.cex = 0.7,
         color = list(lat = "lightblue", man = "lightgreen"),
         edge.color = "black",
         mar = c(2, 5, 2, 5))

The full structural model was estimated using the DWLS estimator with all 21 ordinal indicators and the four latent constructs specified in the outer model. The inner model regresses Employee Intention to Stay (ITS) on Perceived Organizational Support (POS), Job Satisfaction (JS), and Work-Life Balance (WLB).

Acceptable thresholds are CFI and TLI >= 0.90, RMSEA < 0.08, and SRMR < 0.05.

summary(fit_full, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.6-21 ended normally after 50 iterations
## 
##   Estimator                                       DWLS
##   Optimization method                           NLMINB
##   Number of model parameters                        85
## 
##   Number of observations                           552
## 
## Model Test User Model:
##                                               Standard      Scaled
##   Test Statistic                               298.448     434.674
##   Degrees of freedom                               183         183
##   P-value (Unknown)                                 NA       0.000
##   Scaling correction factor                                  0.768
##   Shift parameter                                           46.011
##     simple second-order correction                                
## 
## Model Test Baseline Model:
## 
##   Test statistic                             37915.539   12360.651
##   Degrees of freedom                               210         210
##   P-value                                           NA       0.000
##   Scaling correction factor                                  3.103
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.997       0.979
##   Tucker-Lewis Index (TLI)                       0.996       0.976
##                                                                   
##   Robust Comparative Fit Index (CFI)                         0.892
##   Robust Tucker-Lewis Index (TLI)                            0.876
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.034       0.050
##   90 Percent confidence interval - lower         0.027       0.044
##   90 Percent confidence interval - upper         0.041       0.056
##   P-value H_0: RMSEA <= 0.050                    1.000       0.495
##   P-value H_0: RMSEA >= 0.080                    0.000       0.000
##                                                                   
##   Robust RMSEA                                               0.104
##   90 Percent confidence interval - lower                     0.092
##   90 Percent confidence interval - upper                     0.115
##   P-value H_0: Robust RMSEA <= 0.050                         0.000
##   P-value H_0: Robust RMSEA >= 0.080                         1.000
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.048       0.048
## 
## Parameter Estimates:
## 
##   Parameterization                               Delta
##   Standard errors                           Robust.sem
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   POS =~                                                                
##     POS1              1.000                               0.803    0.803
##     POS2              0.992    0.036   27.182    0.000    0.797    0.797
##     POS3              0.958    0.035   27.662    0.000    0.769    0.769
##     POS4              1.038    0.039   26.918    0.000    0.834    0.834
##     POS5              0.930    0.036   26.085    0.000    0.747    0.747
##     POS6              1.061    0.040   26.609    0.000    0.853    0.853
##     POS7              1.061    0.035   30.214    0.000    0.852    0.852
##     POS8              1.080    0.039   28.035    0.000    0.868    0.868
##   JS =~                                                                 
##     JS1               1.000                               0.788    0.788
##     JS2               0.930    0.046   20.263    0.000    0.733    0.733
##     JS3               1.069    0.046   23.347    0.000    0.843    0.843
##     JS4               1.060    0.046   22.914    0.000    0.835    0.835
##     JS5               0.946    0.041   22.885    0.000    0.745    0.745
##   WLB =~                                                                
##     WLB1              1.000                               0.848    0.848
##     WLB2              0.903    0.042   21.412    0.000    0.766    0.766
##     WLB3              0.867    0.041   21.262    0.000    0.735    0.735
##   ITS =~                                                                
##     ITS1              1.000                               0.917    0.917
##     ITS2              0.873    0.028   31.515    0.000    0.801    0.801
##     ITS3              0.868    0.025   34.587    0.000    0.796    0.796
##     ITS4              0.887    0.027   32.924    0.000    0.814    0.814
##     ITS5              0.899    0.026   35.238    0.000    0.825    0.825
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   ITS ~                                                                 
##     POS               0.644    0.066    9.719    0.000    0.564    0.564
##     JS               -0.133    0.123   -1.083    0.279   -0.114   -0.114
##     WLB               0.612    0.111    5.500    0.000    0.566    0.566
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   POS ~~                                                                
##     JS                0.403    0.029   13.729    0.000    0.637    0.637
##     WLB               0.383    0.032   11.893    0.000    0.562    0.562
##   JS ~~                                                                 
##     WLB               0.548    0.035   15.582    0.000    0.820    0.820
## 
## Thresholds:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     POS1|t1          -0.939    0.063  -14.928    0.000   -0.939   -0.939
##     POS1|t2           1.752    0.097   18.067    0.000    1.752    1.752
##     POS2|t1          -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     POS2|t2          -0.831    0.061  -13.702    0.000   -0.831   -0.831
##     POS2|t3           0.538    0.056    9.556    0.000    0.538    0.538
##     POS3|t1          -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     POS3|t2          -0.953    0.063  -15.077    0.000   -0.953   -0.953
##     POS3|t3           1.107    0.067   16.486    0.000    1.107    1.107
##     POS4|t1          -2.685    0.236  -11.374    0.000   -2.685   -2.685
##     POS4|t2          -0.932    0.063  -14.853    0.000   -0.932   -0.932
##     POS4|t3           1.066    0.066   16.149    0.000    1.066    1.066
##     POS5|t1          -0.967    0.064  -15.224    0.000   -0.967   -0.967
##     POS5|t2           1.035    0.065   15.872    0.000    1.035    1.035
##     POS6|t1          -2.547    0.201  -12.664    0.000   -2.547   -2.547
##     POS6|t2          -0.864    0.061  -14.091    0.000   -0.864   -0.864
##     POS6|t3           0.997    0.064   15.516    0.000    0.997    0.997
##     POS7|t1          -2.547    0.201  -12.664    0.000   -2.547   -2.547
##     POS7|t2          -0.831    0.061  -13.702    0.000   -0.831   -0.831
##     POS7|t3           1.035    0.065   15.872    0.000    1.035    1.035
##     POS8|t1          -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     POS8|t2          -0.884    0.062  -14.322    0.000   -0.884   -0.884
##     POS8|t3           1.186    0.070   17.053    0.000    1.186    1.186
##     JS1|t1           -0.224    0.054   -4.164    0.000   -0.224   -0.224
##     JS1|t2            2.363    0.165   14.312    0.000    2.363    2.363
##     JS2|t1           -0.401    0.055   -7.294    0.000   -0.401   -0.401
##     JS2|t2            1.655    0.091   18.259    0.000    1.655    1.655
##     JS3|t1           -2.685    0.236  -11.374    0.000   -2.685   -2.685
##     JS3|t2           -0.333    0.054   -6.112    0.000   -0.333   -0.333
##     JS3|t3            1.458    0.080   18.198    0.000    1.458    1.458
##     JS4|t1           -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     JS4|t2           -0.333    0.054   -6.112    0.000   -0.333   -0.333
##     JS4|t3            1.419    0.078   18.112    0.000    1.419    1.419
##     JS5|t1           -0.367    0.055   -6.703    0.000   -0.367   -0.367
##     JS5|t2            1.360    0.076   17.929    0.000    1.360    1.360
##     WLB1|t1          -2.685    0.236  -11.374    0.000   -2.685   -2.685
##     WLB1|t2          -0.586    0.057  -10.303    0.000   -0.586   -0.586
##     WLB1|t3           1.954    0.113   17.255    0.000    1.954    1.954
##     WLB2|t1          -2.547    0.201  -12.664    0.000   -2.547   -2.547
##     WLB2|t2          -0.276    0.054   -5.097    0.000   -0.276   -0.276
##     WLB2|t3           1.233    0.071   17.343    0.000    1.233    1.233
##     WLB3|t1          -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     WLB3|t2          -0.271    0.054   -5.012    0.000   -0.271   -0.271
##     WLB3|t3           1.527    0.083   18.291    0.000    1.527    1.527
##     ITS1|t1          -2.909    0.313   -9.306    0.000   -2.909   -2.909
##     ITS1|t2          -0.819    0.060  -13.545    0.000   -0.819   -0.819
##     ITS1|t3           1.954    0.113   17.255    0.000    1.954    1.954
##     ITS2|t1          -2.547    0.201  -12.664    0.000   -2.547   -2.547
##     ITS2|t2          -0.635    0.057  -11.046    0.000   -0.635   -0.635
##     ITS2|t3           0.763    0.059   12.831    0.000    0.763    0.763
##     ITS3|t1          -2.363    0.165  -14.312    0.000   -2.363   -2.363
##     ITS3|t2          -0.733    0.059  -12.430    0.000   -0.733   -0.733
##     ITS3|t3           0.997    0.064   15.516    0.000    0.997    0.997
##     ITS4|t1          -2.363    0.165  -14.312    0.000   -2.363   -2.363
##     ITS4|t2          -0.703    0.058  -12.026    0.000   -0.703   -0.703
##     ITS4|t3           1.150    0.068   16.808    0.000    1.150    1.150
##     ITS5|t1          -2.363    0.165  -14.312    0.000   -2.363   -2.363
##     ITS5|t2          -0.775    0.060  -12.991    0.000   -0.775   -0.775
##     ITS5|t3           1.305    0.074   17.707    0.000    1.305    1.305
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .POS1              0.354                               0.354    0.354
##    .POS2              0.365                               0.365    0.365
##    .POS3              0.408                               0.408    0.408
##    .POS4              0.304                               0.304    0.304
##    .POS5              0.442                               0.442    0.442
##    .POS6              0.273                               0.273    0.273
##    .POS7              0.273                               0.273    0.273
##    .POS8              0.247                               0.247    0.247
##    .JS1               0.379                               0.379    0.379
##    .JS2               0.463                               0.463    0.463
##    .JS3               0.290                               0.290    0.290
##    .JS4               0.302                               0.302    0.302
##    .JS5               0.444                               0.444    0.444
##    .WLB1              0.280                               0.280    0.280
##    .WLB2              0.413                               0.413    0.413
##    .WLB3              0.459                               0.459    0.459
##    .ITS1              0.159                               0.159    0.159
##    .ITS2              0.359                               0.359    0.359
##    .ITS3              0.367                               0.367    0.367
##    .ITS4              0.338                               0.338    0.338
##    .ITS5              0.320                               0.320    0.320
##     POS               0.646    0.042   15.539    0.000    1.000    1.000
##     JS                0.621    0.045   13.948    0.000    1.000    1.000
##     WLB               0.720    0.052   13.858    0.000    1.000    1.000
##    .ITS               0.149    0.034    4.441    0.000    0.177    0.177

The scaled CFI was 0.979 and TLI was 0.976, both exceeding the 0.90 threshold. The scaled RMSEA was 0.050, sitting exactly at the boundary of the acceptable range, with a 90% confidence interval of [0.044, 0.056]. The SRMR was 0.048, falling just below the 0.05 threshold. Overall, the scaled fit indicators suggest that the full structural model demonstrates acceptable fit to the data.

4.1 Path Coefficients

A path is considered statistically significant at p < 0.05. Standardized coefficients (Std.all) are interpreted as the expected standard deviation change in ITS for a one standard deviation increase in the predictor, holding all other predictors constant.

The table below presents the standardized structural path coefficients estimating the direct effect of each predictor on ITS.

parameterEstimates(fit_full, standardized = TRUE) |>
  filter(op == "~") |>
  select(lhs, op, rhs, std.all, se, z, pvalue) |>
  rename(
    Outcome = lhs,
    ` ` = op,
    Predictor = rhs,
    `Std. Beta` = std.all,
    SE = se,
    `z-value` = z,
    `p-value` = pvalue
  )

POS showed a positive and statistically significant effect on ITS (β = 0.564, SE = 0.066, z = 9.719, p < 0.001), indicating that higher perceived organizational support is associated with stronger employee intention to stay. WLB similarly showed a positive and significant effect (β = 0.566, SE = 0.111, z = 5.500, p < 0.001), suggesting that better work-life balance significantly strengthens retention intention. JS, however, showed a negative and non-significant effect (β = -0.114, SE = 0.123, z = -1.083, p = 0.279), indicating that job satisfaction does not single-handedly predict intention to stay when POS and WLB are controlled for.

4.2 Variance Explained (R2)

The R² value indicates the proportion of variance in Employee Intention to Stay (ITS) that is jointly explained by POS, JS, and WLB in the structural model. A higher R² reflects greater collective explanatory power of the predictors.

lavInspect(fit_full, what = "r2")[["ITS"]]
## [1] 0.8225456

POS, JS, and WLB combined explain 82.3% of the variance in Employee Intention to Stay, indicating that the structural model has very strong explanatory power. This suggests that perceived organizational support, job satisfaction, and work-life balance collectively responsible for the large majority of what drives employees’ intention to remain with the organization.

4.3 Effect Size (F2)

Cohen’s f² measures the practical significance of each predictor’s unique contribution to explaining ITS variance. Thresholds follow Cohen (1988): f² >= 0.02 small, >= 0.15 medium, >= 0.35 large.

fit_no_pos <- sem(
  model   = paste(outer_model, "ITS ~ JS + WLB", sep = "\n"),
  data    = df_sem,
  ordered = ordinal_items
)
## Warning: lavaan->lav_lavaan_step11_estoptim():  
##    the optimizer (NLMINB) claimed the model converged, but not all elements 
##    of the gradient are (near) zero; the optimizer may not have found a local 
##    solution use check.gradient = FALSE to skip this check.
fit_no_js <- sem(
  model   = paste(outer_model, "ITS ~ POS + WLB", sep = "\n"),
  data    = df_sem,
  ordered = ordinal_items
)
## Warning: lavaan->lav_model_vcov():  
##    The variance-covariance matrix of the estimated parameters (vcov) does not 
##    appear to be positive definite! The smallest eigenvalue (= -2.682349e-16) 
##    is smaller than zero. This may be a symptom that the model is not 
##    identified.
fit_no_wlb <- sem(
  model   = paste(outer_model, "ITS ~ POS + JS", sep = "\n"),
  data    = df_sem,
  ordered = ordinal_items
)
## Warning: lavaan->lav_model_vcov():  
##    The variance-covariance matrix of the estimated parameters (vcov) does not 
##    appear to be positive definite! The smallest eigenvalue (= -2.837282e-16) 
##    is smaller than zero. This may be a symptom that the model is not 
##    identified.
r2_full  <- lavInspect(fit_full,    what = "r2")[["ITS"]]
r2_no_pos <- lavInspect(fit_no_pos, what = "r2")[["ITS"]]
r2_no_js  <- lavInspect(fit_no_js,  what = "r2")[["ITS"]]
r2_no_wlb <- lavInspect(fit_no_wlb, what = "r2")[["ITS"]]

f2 <- function(r2_full, r2_reduced) (r2_full - r2_reduced) / (1 - r2_full)

data.frame(
  Predictor = c("POS", "JS", "WLB"),
  R2_full   = round(r2_full, 3),
  R2_reduced = round(c(r2_no_pos, r2_no_js, r2_no_wlb), 3),
  f2 = round(c(
    f2(r2_full, r2_no_pos),
    f2(r2_full, r2_no_js),
    f2(r2_full, r2_no_wlb)
  ), 3),
  Interpretation = c(
    ifelse(f2(r2_full, r2_no_pos) >= 0.35, "Large",
      ifelse(f2(r2_full, r2_no_pos) >= 0.15, "Medium", "Small")),
    ifelse(f2(r2_full, r2_no_js)  >= 0.35, "Large",
      ifelse(f2(r2_full, r2_no_js)  >= 0.15, "Medium", "Small")),
    ifelse(f2(r2_full, r2_no_wlb) >= 0.35, "Large",
      ifelse(f2(r2_full, r2_no_wlb) >= 0.15, "Medium", "Small"))
  )
)

The f² for POS demonstrate a rather impossible result (f² = 111.856) because the reduced model excluding POS failed to converge. Without POS, the structural paths for JS and WLB inflated to extreme values (141.356 and -144.078 respectively), and the residual variance of ITS blew up to 16.846, producing a negative R² of -19.027. This instability is possibly due to the high intercorrelation between JS and WLB (r = 0.820), which makes the model unidentified when POS is removed. Consequently, the f² value for POS cannot be meaningfully interpreted and is excluded from the discussion. For JS, the f² was 0.124, indicating a small effect. For WLB, the f² was 0.267, indicating a medium effect. These results suggest that while both JS and WLB contribute uniquely to explaining ITS variance beyond the other predictors, WLB carries greater incremental explanatory power.

4.4 Mediation

The mediation analysis tests whether JS and WLB act as mediators in the relationship between POS and ITS. POS is treated as the exogenous predictor, JS and WLB as potential mediators, and ITS as the outcome. Indirect effects are estimated using bootstrap resampling (1000 iterations) with bias-corrected accelerated (BCa) 95% confidence intervals. A mediation effect is considered significant if the confidence interval excludes zero.

mediation_model <- "
  JS  ~ a1 * POS
  WLB ~ a2 * POS
  ITS ~ b1 * JS + b2 * WLB + c * POS

  indirect_js    := a1 * b1
  indirect_wlb   := a2 * b2
  total_indirect := a1 * b1 + a2 * b2
  total          := c + a1 * b1 + a2 * b2
"

full_mediation_model <- paste(outer_model, mediation_model, sep = "\n")

fit_mediation <- sem(
  model     = full_mediation_model,
  data      = df_sem,
  se        = "bootstrap",
  bootstrap = 1000
)                                            

parameterEstimates(fit_mediation, boot.ci.type = "bca.simple", level = 0.95) |>
  filter(op == ":=") |>
  select(label, est, se, z, pvalue, ci.lower, ci.upper) |>
  rename(
    Effect         = label,
    Estimate       = est,
    SE             = se,
    `z-value`      = z,
    `p-value`      = pvalue,
    `95% CI Lower` = ci.lower,
    `95% CI Upper` = ci.upper
  )

The mediation analysis tested whether JS and WLB mediate the relationship between POS and ITS using bootstrap resampling with BCa 95% confidence intervals. A mediation effect is considered significant when the confidence interval excludes zero.

The indirect effect of POS on ITS through JS was non-significant (β = 0.048, SE = 0.052, z = 0.919, p = 0.358, 95% CI [-0.066, 0.137]), as the confidence interval includes zero. This indicates that JS does not function as a mediator in the POS-ITS relationship. The indirect effect through WLB, however, was positive and significant (β = 0.307, SE = 0.060, z = 5.102, p < 0.001, 95% CI [0.203, 0.441]), confirming that WLB partially mediates the effect of POS on ITS. The total indirect effect was also significant (β = 0.355, SE = 0.064, z = 5.546, p < 0.001, 95% CI [0.231, 0.487]), driven primarily by the WLB pathway. The total effect of POS on ITS remained significant (β = 0.976, SE = 0.095, z = 10.244, p < 0.001, 95% CI [0.809, 1.197]), confirming that POS retains a strong direct effect on ITS independent of the mediation pathways.

5 Grand Conclusion

This study used CB-SEM to examine how Perceived Organizational Support (POS), Job Satisfaction (JS), and Work-Life Balance (WLB) affect employees’ Intention to Stay (ITS). The analysis covered three stages: checking assumptions, validating the measurement model, and testing structural paths with mediation.

Before modeling, multivariate outliers were removed using Mahalanobis distance. The normality assumption was violated across all 21 indicators, so the DWLS estimator with robust standard errors was used throughout. The KMO value of 0.95 confirmed the data were well-suited for factor analysis, and all VIF values stayed below 3.3, ruling out multicollinearity.

The measurement model performed well. All four constructs met the AVE threshold of 0.50, reliability thresholds of 0.70, and factor loadings at or above 0.70. Discriminant validity held under both the HTMT criterion (highest ratio = 0.824, below 0.85) and the Fornell-Larcker criterion. The combined CFA fit was acceptable (CFI = 0.979, TLI = 0.976, RMSEA = 0.050, SRMR = 0.048).

In the structural model, POS and WLB each had a significant positive effect on ITS (POS: β = 0.564, p < 0.001; WLB: β = 0.566, p < 0.001). JS did not show a significant direct effect once POS and WLB were controlled for (β = -0.114, p = 0.279). The three predictors together explained 82.3% of the variance in ITS. Effect sizes showed WLB had a medium incremental contribution (f² = 0.267) and JS had a small one (f² = 0.124). POS could not be evaluated for effect size due to model instability upon its removal, which itself reflects how central POS is to the model structure.

The mediation analysis found that WLB significantly mediates the effect of POS on ITS (indirect effect β = 0.307, 95% CI [0.203, 0.441]). This means part of how organizational support increases retention is by improving employees’ work-life balance. JS did not mediate this relationship (indirect effect β = 0.048, 95% CI [-0.066, 0.137]). POS also retained a strong direct effect on ITS (total effect β = 0.976, p < 0.001), independent of the mediation paths.

Overall, the findings suggest that POS and WLB are the most important drivers of employee retention. Organizations looking to retain staff should focus on making employees feel supported and on creating conditions that allow for sustainable work-life balance. JS, while valuable, does not independently predict retention once support and balance are in place. This study shows that CB-SEM, when built on solid measurement validation, can produce both statistically sound and practically useful insights into what keeps employees in an organization.

LS0tDQp0aXRsZTogIjxzcGFuIHN0eWxlPSdmb250LXNpemU6IDMycHg7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogIzRBMEUwRTsnPk11bHRpdmFyaWF0ZSBBbmFseXNpczwvc3Bhbj4iDQpzdWJ0aXRsZTogIkEgQ0ItU0VNIEFwcHJvYWNoIHRvIEV4YW1pbmluZyBIb3cgUGVyY2VpdmVkIFN1cHBvcnQsIEpvYiBTYXRpc2ZhY3Rpb24sIGFuZCBXb3JrLUxpZmUgQmFsYW5jZSBEcml2ZSBFbXBsb3llZSBJbnRlbnRpb24gdG8gU3RheSINCmF1dGhvcjogIkZpbyBVbGFhJyBPY3RpcnlhbnRpICgwMzApLCBBbGZpbiBKYXlhZGkgKDA4MiksIEtldHV0IFNocmlkaGFyYSAoMTE1KSINCmRhdGU6ICJVcGRhdGVkIG9uOiBgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVkICVCICVZJylgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogDQogICAgICBjb2xsYXBzZWQ6IGZhbHNlDQogICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlDQogICAgdG9jX2RlcHRoOiA0DQogICAgdGhlbWU6IGNvc21vICAgICAgICANCiAgICBoaWdobGlnaHQ6IGVzcHJlc3NvICANCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlICANCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICBkZl9wcmludDogcGFnZWQNCi0tLQ0KDQpgYGB7PWh0bWx9DQo8c3R5bGU+DQpib2R5IHsNCiAgdGV4dC1hbGlnbjoganVzdGlmeTsNCiAgZm9udC1mYW1pbHk6ICdPcGVuIFNhbnMnLCBzYW5zLXNlcmlmOw0KfQ0KLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUsIC5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzLCAubGlzdC1ncm91cC1pdGVtLmFjdGl2ZTpob3ZlciB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzRBMEUwRTsgLyogV2luZSBSZWQgKi8NCiAgICBib3JkZXItY29sb3I6ICM0QTBFMEU7DQp9DQpoMSwgaDIsIGgzIHsNCiAgY29sb3I6ICM0QTBFMEU7DQp9DQoubmF2LXBpbGxzID4gbGkuYWN0aXZlID4gYSwgLm5hdi1waWxscyA+IGxpLmFjdGl2ZSA+IGE6Zm9jdXMsIC5uYXYtcGlsbHMgPiBsaS5hY3RpdmUgPiBhOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNEEwRTBFOw0KfQ0KPC9zdHlsZT4NCmBgYA0KDQojIExvYWQgTGlicmFyaWVzIGFuZCBEYXRhDQoNCmBgYHtyIG91dHB1dD1GQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShsYXZhYW4pDQpsaWJyYXJ5KHNlbVRvb2xzKQ0KbGlicmFyeShNVk4pDQpsaWJyYXJ5KHBzeWNoKQ0KbGlicmFyeShjYXIpDQpsaWJyYXJ5KHNlbVBsb3QpDQpgYGANCg0KYGBge3J9DQpkZl9zZW0gPC0gcmVhZC5jc3YoIkRhdGEgUE9TLUlUUyAyLmNzdiIpWywgLSgxOjgpXQ0KDQpvcmRpbmFsX2l0ZW1zIDwtIGMoDQogIHBhc3RlMCgiUE9TIiwgMTo4KSwgDQogIHBhc3RlMCgiSlMiLCAxOjUpLCANCiAgcGFzdGUwKCJXTEIiLCAxOjMpLCANCiAgcGFzdGUwKCJJVFMiLCAxOjUpDQopDQoNCmhlYWQoZGZfc2VtKQ0KYGBgDQoNCmBgYHtyfQ0KcmVhZC5jc3YoIkRhdGEgUE9TLUlUUyAyLmNzdiIpWywgKDE6OCldIHw+DQogIHJlbmFtZSgNCiAgICBgUG9zaXRpb25gID0gUTEsDQogICAgYFRlbnVyZSAoWWVhcnMpYCA9IFEyLA0KICAgIGBDb21wYW5pZXMgV29ya2VkIEZvcmAgPSBRMywNCiAgICBgQWdlYCA9IFE0LA0KICAgIGBHZW5kZXJgID0gUTUsDQogICAgYEVkdWNhdGlvbmAgPSBRNiwNCiAgICBgTW9udGhseSBJbmNvbWVgID0gUTcsDQogICAgYE1hcml0YWwgU3RhdHVzYCA9IFE4DQogICkgfD4NCiAgbXV0YXRlKA0KICAgIFBvc2l0aW9uID0gZmFjdG9yKFBvc2l0aW9uLCBsZXZlbHMgPSAxOjUsDQogICAgICBsYWJlbHMgPSBjKCJXb3JrZXIiLCAiU3ViLWxlYWRlciIsICJMZWFkZXIiLCAiRXhlYy4gU3RhZmYiLCAiT3RoZXIiKSksDQogICAgYFRlbnVyZSAoWWVhcnMpYCA9IGZhY3RvcihgVGVudXJlIChZZWFycylgLCBsZXZlbHMgPSAxOjUsDQogICAgICBsYWJlbHMgPSBjKCI8MiB5cnMiLCAiMi00IHlycyIsICI1LTcgeXJzIiwgIjgtMTAgeXJzIiwgIj4xMCB5cnMiKSksDQogICAgYENvbXBhbmllcyBXb3JrZWQgRm9yYCA9IGZhY3RvcihgQ29tcGFuaWVzIFdvcmtlZCBGb3JgLCBsZXZlbHMgPSAxOjUsDQogICAgICBsYWJlbHMgPSBjKCI8MiIsICIyLTQiLCAiNS03IiwgIjgtMTAiLCAiPjEwIikpLA0KICAgIEFnZSA9IGZhY3RvcihBZ2UsIGxldmVscyA9IDE6NCwNCiAgICAgIGxhYmVscyA9IGMoIjE4LTI3IiwgIjI4LTM3IiwgIjM3LTQ2IiwgIj40NyIpKSwNCiAgICBHZW5kZXIgPSBmYWN0b3IoR2VuZGVyLCBsZXZlbHMgPSAwOjEsDQogICAgICBsYWJlbHMgPSBjKCJNYWxlIiwgIkZlbWFsZSIpKSwNCiAgICBFZHVjYXRpb24gPSBmYWN0b3IoRWR1Y2F0aW9uLCBsZXZlbHMgPSAxOjMsDQogICAgICBsYWJlbHMgPSBjKCJIaWdoIFNjaG9vbCIsICJDb2xsZWdlL1VuaSIsICJNYXN0ZXIrIikpLA0KICAgIGBNb250aGx5IEluY29tZWAgPSBmYWN0b3IoYE1vbnRobHkgSW5jb21lYCwgbGV2ZWxzID0gMTo0LA0KICAgICAgbGFiZWxzID0gYygiPCQyNTAiLCAiJDI1MC00MDAiLCAiJDQwMS02MDAiLCAiPiQ2MDAiKSksDQogICAgYE1hcml0YWwgU3RhdHVzYCA9IGZhY3RvcihgTWFyaXRhbCBTdGF0dXNgLCBsZXZlbHMgPSAwOjEsDQogICAgICBsYWJlbHMgPSBjKCJTaW5nbGUiLCAiTWFycmllZCIpKQ0KICApIHw+DQogIHBpdm90X2xvbmdlcihjb2xzID0gZXZlcnl0aGluZygpLCBuYW1lc190byA9ICJDaGFyYWN0ZXJpc3RpYyIsIHZhbHVlc190byA9ICJDYXRlZ29yeSIpIHw+DQogIGdncGxvdChhZXMoeSA9IENhdGVnb3J5KSkgKw0KICAgIGdlb21fYmFyKGZpbGwgPSAiIzM0OThkYiIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjgpICsNCiAgICBmYWNldF93cmFwKH4gQ2hhcmFjdGVyaXN0aWMsIHNjYWxlcyA9ICJmcmVlIiwgbmNvbCA9IDIpICsNCiAgICB0aGVtZV9taW5pbWFsKCkgKw0KICAgIGxhYnMoDQogICAgICB0aXRsZSA9ICJSZXNwb25kZW50IENoYXJhY3RlcmlzdGljcyBQcm9maWxlIiwNCiAgICAgIHggPSAiTnVtYmVyIG9mIFJlc3BvbmRlbnRzIiwNCiAgICAgIHkgPSBOVUxMDQogICAgKSArDQogICAgdGhlbWUoDQogICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxMCksDQogICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxNCwgaGp1c3QgPSAwLjUpDQogICAgKQ0KYGBgDQoNCiMjIE91dGxpZXJzIERldGVjdGlvbg0KDQpBbHRob3VnaCB0aGUgbWF0ZXJpYWwgbm90IGluY2x1ZGUgdGhlICJubyBvdXRsaWVycyIgYXNzdW1wdGlvbiwgU0VNIHJlbGllcyBvbiBjb3ZhcmlhbmNlIG1hdHJpeCB3aGljaCBjb3VsZCBiZSBkaXN0b3J0IGJ5IHNpZ25pZmljYW50IG11bHRpdmFyaWF0ZSBvdXRsaWVycy4gVGhlcmVmb3JlLCBkcm9wcGluZyBvdXRsaWVycyB1c2luZyBtYWhhbGFub2JpcyB3aXRoIENoaS1TcXVhcmVkIGN1dC1vZmYgaXMgbmVlZGVkLg0KDQpgYGB7cn0NCmNhdCgiQmVmb3JlIHJlbW92YWw6IiwgbnJvdyhkZl9zZW0pLCAiXG4iKQ0KbV9kaXN0IDwtIG1haGFsYW5vYmlzKGRmX3NlbSwNCiAgICAgICAgICAgICAgICAgICAgICBjb2xNZWFucyhkZl9zZW0pLA0KICAgICAgICAgICAgICAgICAgICAgIGNvdihkZl9zZW0pKQ0KDQpjdXRvZmYgPC0gcWNoaXNxKDAuOTUsIGRmID0gbmNvbChkZl9zZW0pKQ0Ka2VlcCA8LSBtX2Rpc3QgPCBjdXRvZmYNCg0KZGZfc2VtIDwtIGRmX3NlbVtrZWVwLCBdDQpjYXQoIkFmdGVyIHJlbW92YWw6IiwgbnJvdyhkZl9zZW0pLCAiXG4iKQ0KYGBgDQoNCmBgYHtyfQ0KZGF0YS5mcmFtZSgNCiAgSW5kZXggPSAxOmxlbmd0aChtX2Rpc3QpLA0KICBEaXN0YW5jZSA9IG1fZGlzdCwNCiAgSXNPdXRsaWVyID0gbV9kaXN0ID49IGN1dG9mZg0KKSB8Pg0KICBnZ3Bsb3QoYWVzKHggPSBJbmRleCwgeSA9IERpc3RhbmNlLCBjb2xvciA9IElzT3V0bGllcikpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSBjdXRvZmYsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gInJlZCIpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIkZBTFNFIiA9ICIjMmMzZTUwIiwgIlRSVUUiID0gIiNlNzRjM2MiKSwNCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIk5vcm1hbCIsICJPdXRsaWVyIikpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh0aXRsZSA9ICJNYWhhbGFub2JpcyBEaXN0YW5jZSBPdXRsaWVyIERldGVjdGlvbiIsDQogICAgICAgc3VidGl0bGUgPSBwYXN0ZSgiQ3V0b2ZmID0iLCByb3VuZChjdXRvZmYsIDIpKSwNCiAgICAgICB4ID0gIk9ic2VydmF0aW9uIEluZGV4IiwgeSA9ICJNYWhhbGFub2JpcyBEaXN0YW5jZSIpDQpgYGANCg0KIyBBc3N1bXB0aW9ucw0KDQojIyBNdWx0aXZhcmlhdGUgTm9ybWFsaXR5DQoNClN0YW5kYXJkIG1ldGhvZCBpbiBTRU0gaXMgTWF4aW11bSBMaWtlbGlob29kIChNTCkgZXN0aW1hdGlvbi4gTUwgd2FzIG1hdGhlbWF0aWNhbGx5IGRlc2lnbmVkIGFzc3VtaW5nIHRoYXQgeW91ciBkYXRhIGZvbGxvd3MgYSBwZXJmZWN0IG11bHRpdmFyaWF0ZSBub3JtYWwgZGlzdHJpYnV0aW9uLiBUaGVyZWZvcmUsIGNoZWNraW5nIHRoZSBpcyBuZWVkZWQgdGhlIG11bHRpdmFyaWF0ZSBub3JtYWxpdHkgaXMgbmVjZXNzYXJpbHkuDQoNCmBgYHtyfQ0KbXZuX3Jlc3VsdCA8LSBtdm4oZGZfc2VtLCBtdm5fdGVzdCA9ICJoeiIpDQpwcmludChzdW1tYXJ5KG12bl9yZXN1bHQsICJtdm4iKSRtdWx0aXZhcmlhdGVfbm9ybWFsaXR5KQ0KYGBgDQoNCmBgYHtyfQ0KcHJpbnQoc3VtbWFyeShtdm5fcmVzdWx0LCAibXZuIikkdW5pdmFyaWF0ZV9ub3JtYWxpdHkpDQpgYGANCg0KYGBge3J9DQpwYXIobWZyb3cgPSBjKDUsIDUpLCBtYXIgPSBjKDIsIDIsIDIsIDEpKQ0KDQpmb3IgKHZhciBpbiBuYW1lcyhkZl9zZW0pKSB7DQogIHFxbm9ybShkZl9zZW1bW3Zhcl1dLCBtYWluID0gcGFzdGUoIlEtUToiLCB2YXIpLCBjZXgubWFpbiA9IDAuOCkNCiAgcXFsaW5lKGRmX3NlbVtbdmFyXV0sIGNvbCA9ICJyZWQiKQ0KfQ0KDQpwYXIobWZyb3cgPSBjKDEsIDEpLCBtYXIgPSBjKDUsIDQsIDQsIDIpICsgMC4xKQ0KYGBgDQoNClRoZSBIZW56ZS1aaXJrbGVyIHRlc3Qgd2FzIHVzZWQgdG8gYXNzZXNzIG11bHRpdmFyaWF0ZSBub3JtYWxpdHkgYWNyb3NzIGFsbCAyMSBvYnNlcnZlZCBpbmRpY2F0b3JzLiBUaGUgdGVzdCBzdGF0aXN0aWMgd2FzIDExLjY0NSB3aXRoIGEgcC12YWx1ZSBiZWxvdyAwLjAwMSwgaW5kaWNhdGluZyB0aGF0IHRoZSBkYXRhIGRvIG5vdCBmb2xsb3cgYSBtdWx0aXZhcmlhdGUgbm9ybWFsIGRpc3RyaWJ1dGlvbi4gSW5kaXZpZHVhbCB1bml2YXJpYXRlIG5vcm1hbGl0eSB3YXMgYWxzbyBhc3Nlc3NlZCB1c2luZyB0aGUgQW5kZXJzb24tRGFybGluZyB0ZXN0LiBBbGwgMjEgaW5kaWNhdG9ycyB5aWVsZGVkIHAtdmFsdWVzIGJlbG93IDAuMDAxLCBjb25maXJtaW5nIHRoYXQgZWFjaCB2YXJpYWJsZSBkZXZpYXRlcyBzaWduaWZpY2FudGx5IGZyb20gYSBub3JtYWwgZGlzdHJpYnV0aW9uLiBUaGVzZSByZXN1bHRzIGFyZSBhbHNvIHZpc3VhbGx5IHN1cHBvcnRlZCBieSB0aGUgUS1RIHBsb3RzIGFib3ZlLCB3aGVyZSBtb3N0IGRhdGEgcG9pbnRzIGRldmlhdGUgZnJvbSB0aGUgZGlhZ29uYWwgcmVmZXJlbmNlIGxpbmUuICoqQmVjYXVzZSB0aGUgbm9ybWFsaXR5IGFzc3VtcHRpb24gaXMgdmlvbGF0ZWQsIHRoZSBhbmFseXNpcyBwcm9jZWVkcyB1c2luZyB0aGUqKiAqKkRpYWdvbmFsbHkgV2VpZ2h0ZWQgTGVhc3QgU3F1YXJlcyAoRFdMUykgZXN0aW1hdG9yIHdpdGggcm9idXN0IHN0YW5kYXJkIGVycm9ycyoqLCB3aGljaCBpcyBhcHByb3ByaWF0ZSBmb3Igb3JkaW5hbCBhbmQgbm9uLW5vcm1hbGx5IGRpc3RyaWJ1dGVkIGRhdGEuDQoNCiMjIFNhbXBsZSBBZGVxdWVudCAoS01PKQ0KDQpgYGB7cn0NCmRmX3NlbSB8Pg0KICBjb3IoKSB8Pg0KICAgIEtNTygpDQpgYGANCg0KVGhlIEthaXNlci1NZXllci1PbGtpbiAoS01PKSB0ZXN0IHdhcyBjb25kdWN0ZWQgdG8gZXZhbHVhdGUgd2hldGhlciB0aGUgY29ycmVsYXRpb24gc3RydWN0dXJlIGFtb25nIHZhcmlhYmxlcyBpcyBhZGVxdWF0ZSBmb3IgZmFjdG9yIGFuYWx5c2lzLiAqKlRoZSBvdmVyYWxsIE1TQSB2YWx1ZSB3YXMgMC45NSwgd2hpY2ggZmFyIGV4Y2VlZHMgdGhlIG1pbmltdW0gdGhyZXNob2xkIG9mIDAuNTAqKi4gTVNBIHZhbHVlcyBmb3IgaW5kaXZpZHVhbCBpdGVtcyByYW5nZWQgZnJvbSAwLjkwIHRvIDAuOTcsIHdpdGggYWxsIGl0ZW1zIHN1cnBhc3NpbmcgdGhlIHRocmVzaG9sZC4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBhcmUgaGlnaGx5IHN1aXRhYmxlIGZvciBTdHJ1Y3R1cmFsIEVxdWF0aW9uIE1vZGVsaW5nLg0KDQojIyBNdWx0aWNvbGxpbmVhcnR5IChWSUYpDQoNCmBgYHtyfQ0KdmlmX21vZGVsIDwtIGxtKElUUzEgfiBQT1MxICsgUE9TMiArIFBPUzMgKyBQT1M0ICsgUE9TNSArIFBPUzYgKyBQT1M3ICsgUE9TOCArIA0KICAgICAgICAgICAgICAgICAgICAgICBKUzEgKyBKUzIgKyBKUzMgKyBKUzQgKyBKUzUgKyANCiAgICAgICAgICAgICAgICAgICAgICAgV0xCMSArIFdMQjIgKyBXTEIzICsgDQogICAgICAgICAgICAgICAgICAgICAgIElUUzIgKyBJVFMzICsgSVRTNCArIElUUzUsIA0KICAgICAgICAgICAgICAgIGRhdGEgPSBkZl9zZW0pDQp2aWZfcmVzdWx0IDwtIHZpZih2aWZfbW9kZWwpDQoNCnZpZl9kZiA8LSBkYXRhLmZyYW1lKA0KICBWYXJpYWJsZSA9IG5hbWVzKHZpZl9yZXN1bHQpLA0KICBWSUYgPSBhcy5udW1lcmljKHZpZl9yZXN1bHQpDQopDQoNCiMgUGxvdCB0aGUgcmVzdWx0cw0KZ2dwbG90KHZpZl9kZiwgYWVzKHggPSByZW9yZGVyKFZhcmlhYmxlLCBWSUYpLCB5ID0gVklGLCBmaWxsID0gVklGID4gNSkpICsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMC43KSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDUsIGxpbmV0eXBlID0gImRhc2hlZCIsIGNvbG9yID0gInJlZCIsIGxpbmV3aWR0aCA9IDAuOCkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAzLjMsIGxpbmV0eXBlID0gImRvdHRlZCIsIGNvbG9yID0gIm9yYW5nZSIsIGxpbmV3aWR0aCA9IDAuOCkgKw0KICBjb29yZF9mbGlwKCkgKyAjIE1lbXV0YXIgYWdhciBuYW1hIHZhcmlhYmVsIG11ZGFoIGRpYmFjYQ0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJGQUxTRSIgPSAiIzJlY2M3MSIsICJUUlVFIiA9ICIjZTc0YzNjIiksIA0KICAgICAgICAgICAgICAgICAgICBndWlkZSA9ICJub25lIikgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKHRpdGxlID0gIk11bHRpY29sbGluZWFyaXR5IENoZWNrIChWSUYgUmVzdWx0cykiLA0KICAgICAgIHggPSAiVmFyaWFibGVzIiwNCiAgICAgICB5ID0gIlZhcmlhbmNlIEluZmxhdGlvbiBGYWN0b3IgKFZJRikiKQ0KYGBgDQoNClRoZSBWYXJpYW5jZSBJbmZsYXRpb24gRmFjdG9yIChWSUYpIHdhcyBjYWxjdWxhdGVkIGZvciBhbGwgaW5kaWNhdG9ycyB0byBjaGVjayBmb3IgbXVsdGljb2xsaW5lYXJpdHkuIEFzIHNob3duIGluIHRoZSBjaGFydCwgYWxsIFZJRiB2YWx1ZXMgZmFsbCB3ZWxsIGJlbG93IDMuMywgd2hpY2ggaXMgdGhlIHRocmVzaG9sZCByZWNvbW1lbmRlZCBhcyBhIHNhZmUgYm91bmRhcnkgaW4gZm9ybWF0aXZlIGluZGljYXRvciBldmFsdWF0aW9uLiBObyBpbmRpY2F0b3IgYXBwcm9hY2hlcyB0aGUgbW9yZSBjcml0aWNhbCB0aHJlc2hvbGQgb2YgNS4gVGhpcyBjb25maXJtcyB0aGF0IG11bHRpY29sbGluZWFyaXR5IGlzIG5vdCBhIGNvbmNlcm4gaW4gdGhpcyBkYXRhc2V0LCBhbmQgYWxsIGluZGljYXRvcnMgY2FuIGJlIHJldGFpbmVkIGZvciBmdXJ0aGVyIGFuYWx5c2lzLg0KDQojIE91dGVyIE1vZGVsDQoNCiMjIENoZWNraW5nIEVhY2ggQ29uc3RydWN0DQoNCiMjIyBQZXJjZWl2ZWQgT3JnYW5pemF0aW9uYWwgU3VwcG9ydCAoUE9TKQ0KDQpgYGB7cn0NCm1vZGVsX3Bvc19vbmx5IDwtIHBhc3RlKCJQT1MgPX4iLCBwYXN0ZTAoIlBPUyIsIDE6OCwgY29sbGFwc2UgPSAiICsgIikpDQoNCmZpdF9wb3MgPC0gY2ZhKG1vZGVsX3Bvc19vbmx5LCBkYXRhID0gZGZfc2VtLCBvcmRlcmVkID0gcGFzdGUwKCJQT1MiLCAxOjgpKQ0KDQpzdW1tYXJ5KGZpdF9wb3MsIGZpdC5tZWFzdXJlcyA9IFRSVUUsIHN0YW5kYXJkaXplZCA9IFRSVUUpDQpgYGANCg0KYGBge3J9DQpzZW1Ub29sczo6QVZFKGZpdF9wb3MpDQpgYGANCg0KYGBge3J9DQpzdXBwcmVzc1dhcm5pbmdzKHNlbVRvb2xzOjpyZWxpYWJpbGl0eShmaXRfcG9zKSkNCmBgYA0KDQpBIHNpbmdsZS1jb25zdHJ1Y3QgQ0ZBIHdhcyBydW4gZm9yIHRoZSBQT1MgY29uc3RydWN0IHVzaW5nIHRoZSBEV0xTIGVzdGltYXRvciB3aXRoIHJvYnVzdCBzdGFuZGFyZCBlcnJvcnMuIFRoZSBzY2FsZWQgbW9kZWwgZml0IGluZGljZXMgd2VyZSBDRkkgPSAwLjk5MyBhbmQgVExJID0gMC45OTAsIGJvdGggbWVldGluZyB0aGUgdGhyZXNob2xkIG9mIFw+PSAwLjkwLiBUaGUgc2NhbGVkIFJNU0VBIHdhcyAwLjA2MCwgd2hpY2ggaXMgYmVsb3cgdGhlIHRocmVzaG9sZCBvZiAwLjA4LCBhbmQgdGhlIFNSTVIgd2FzIDAuMDQzLCB3aGljaCBpcyBiZWxvdyB0aGUgdGhyZXNob2xkIG9mIDAuMDUuIFRoZSBtb2RlbCBmaXQgaXMgdGhlcmVmb3JlIGNvbnNpZGVyZWQgYWNjZXB0YWJsZS4NCg0KQWxsIGVpZ2h0IGluZGljYXRvcnMgc2hvd2VkIHN0YW5kYXJkaXplZCBmYWN0b3IgbG9hZGluZ3MgYWJvdmUgMC43MCwgcmFuZ2luZyBmcm9tIDAuNzY3IChQT1M1KSB0byAwLjg1MiAoUE9TNiksIG1lZXRpbmcgdGhlIGlkZWFsIGxvYWRpbmcgdGhyZXNob2xkLiBUaGUgQVZFIHdhcyAwLjY2OSwgZXhjZWVkaW5nIHRoZSBtaW5pbXVtIHRocmVzaG9sZCBvZiAwLjUwLCBpbmRpY2F0aW5nIGFkZXF1YXRlIGNvbnZlcmdlbnQgdmFsaWRpdHkuIEZvciByZWxpYWJpbGl0eSwgdGhlIG9yZGluYWwgYWxwaGEgd2FzIDAuOTM5IGFuZCB0aGUgY29tcG9zaXRlIHJlbGlhYmlsaXR5IChvbWVnYSkgd2FzIDAuODkwLCBib3RoIHdlbGwgYWJvdmUgdGhlIDAuNzAgdGhyZXNob2xkLiAqKlRoZSBQT1MgY29uc3RydWN0IHRoZXJlZm9yZSBkZW1vbnN0cmF0ZXMgc2F0aXNmYWN0b3J5IHZhbGlkaXR5IGFuZCByZWxpYWJpbGl0eS4qKg0KDQojIyMgSm9iIFNhdGlzZmFjdGlvbiAoSlMpDQoNCmBgYHtyfQ0KbW9kZWxfanNfb25seSA8LSBwYXN0ZSgiSlMgPX4iLCBwYXN0ZTAoIkpTIiwgMTo1LCBjb2xsYXBzZSA9ICIgKyAiKSkNCg0KZml0X2pzIDwtIGNmYShtb2RlbF9qc19vbmx5LCBkYXRhID0gZGZfc2VtLCBvcmRlcmVkID0gcGFzdGUwKCJKUyIsIDE6NSkpDQoNCnN1bW1hcnkoZml0X2pzLCBmaXQubWVhc3VyZXMgPSBUUlVFLCBzdGFuZGFyZGl6ZWQgPSBUUlVFKQ0KYGBgDQoNCmBgYHtyfQ0Kc2VtVG9vbHM6OkFWRShmaXRfanMpDQpgYGANCg0KYGBge3J9DQpzdXBwcmVzc1dhcm5pbmdzKHNlbVRvb2xzOjpyZWxpYWJpbGl0eShmaXRfanMpKQ0KYGBgDQoNCkEgc2luZ2xlLWNvbnN0cnVjdCBDRkEgd2FzIGVzdGltYXRlZCBmb3IgdGhlIEpTIGNvbnN0cnVjdC4gVGhlIHNjYWxlZCBDRkkgd2FzIDAuOTk5IGFuZCBUTEkgd2FzIDAuOTk4LCBib3RoIGFib3ZlIDAuOTAuIFRoZSBzY2FsZWQgUk1TRUEgd2FzIDAuMDI0IGFuZCB0aGUgU1JNUiB3YXMgMC4wMjUsIGJvdGggbWVldGluZyB0aGVpciByZXNwZWN0aXZlIHRocmVzaG9sZHMuIFRoZSBtb2RlbCBmaXQgaXMgZXhjZWxsZW50Lg0KDQpTdGFuZGFyZGl6ZWQgZmFjdG9yIGxvYWRpbmdzIHJhbmdlZCBmcm9tIDAuNjcwIChKUzIpIHRvIDAuODY2IChKUzQpLiBKUzIgc2l0cyBpbiB0aGUgYWNjZXB0YWJsZSByYW5nZSBvZiAwLjUwIHRvIDAuNzAsIHdoaWxlIGFsbCBvdGhlciBpbmRpY2F0b3JzIG1lZXQgdGhlIGlkZWFsIHRocmVzaG9sZCBvZiBcPj0gMC43MC4gVGhlIEFWRSB3YXMgMC42MjMsIGFib3ZlIHRoZSAwLjUwIHRocmVzaG9sZCwgY29uZmlybWluZyBjb252ZXJnZW50IHZhbGlkaXR5LiBUaGUgb3JkaW5hbCBhbHBoYSB3YXMgMC44ODkgYW5kIG9tZWdhIHdhcyAwLjgxNSwgYm90aCBleGNlZWRpbmcgMC43MC4gKipUaGUgSlMgY29uc3RydWN0IG1lZXRzIGFsbCByZWxpYWJpbGl0eSBhbmQgdmFsaWRpdHkgY3JpdGVyaWEqKi4NCg0KIyMjIFdvcmstbGlmZSBiYWxhbmNlIChXTEIpDQoNCmBgYHtyfQ0KbW9kZWxfd2xiX29ubHkgPC0gcGFzdGUoIldMQiA9fiIsIHBhc3RlMCgiV0xCIiwgMTozLCBjb2xsYXBzZSA9ICIgKyAiKSkNCg0KZml0X3dsYiA8LSBjZmEobW9kZWxfd2xiX29ubHksIGRhdGEgPSBkZl9zZW0sIG9yZGVyZWQgPSBwYXN0ZTAoIldMQiIsIDE6MykpDQoNCnN1bW1hcnkoZml0X3dsYiwgZml0Lm1lYXN1cmVzID0gVFJVRSwgc3RhbmRhcmRpemVkID0gVFJVRSkNCmBgYA0KDQpgYGB7cn0NCnNlbVRvb2xzOjpBVkUoZml0X3dsYikNCmBgYA0KDQpgYGB7cn0NCnN1cHByZXNzV2FybmluZ3Moc2VtVG9vbHM6OnJlbGlhYmlsaXR5KGZpdF93bGIpKQ0KYGBgDQoNClRoZSBXTEIgY29uc3RydWN0IHdhcyBlc3RpbWF0ZWQgd2l0aCB0aHJlZSBpbmRpY2F0b3JzLiBCZWNhdXNlIHRoaXMgaXMgYSBqdXN0LWlkZW50aWZpZWQgbW9kZWwgKGRlZ3JlZXMgb2YgZnJlZWRvbSA9IDApLCB0aGUgbW9kZWwgZml0IGluZGljZXMgcHJvZHVjZSBwZXJmZWN0IHZhbHVlcyBieSBkZWZpbml0aW9uLCBhbmQgbm8gZ29vZG5lc3Mtb2YtZml0IGV2YWx1YXRpb24gY2FuIGJlIGNvbmR1Y3RlZCBvbiB0aGUgbW9kZWwgaXRzZWxmLiBUaGlzIGlzIGEga25vd24gbGltaXRhdGlvbiBvZiB0aHJlZS1pbmRpY2F0b3Igc2luZ2xlLWNvbnN0cnVjdCBtb2RlbHMuDQoNClN0YW5kYXJkaXplZCBmYWN0b3IgbG9hZGluZ3MgcmFuZ2VkIGZyb20gMC43MzUgKFdMQjIpIHRvIDAuODI0IChXTEIzKSBpbiB0aGUgZmlyc3Qtb3JkZXIgbW9kZWwgb3V0cHV0LCB3aXRoIGFsbCBsb2FkaW5ncyBtZWV0aW5nIHRoZSBpZGVhbCB0aHJlc2hvbGQgb2YgXD49IDAuNzAuIFRoZSBBVkUgd2FzIDAuNjEwLCBhYm92ZSAwLjUwLiBGb3IgcmVsaWFiaWxpdHksIHRoZSBvcmRpbmFsIGFscGhhIHdhcyAwLjgyMyBhbmQgb21lZ2Egd2FzIDAuNzEzLCBib3RoIGFib3ZlIHRoZSAwLjcwIHRocmVzaG9sZC4gKipUaGUgV0xCIGNvbnN0cnVjdCBzYXRpc2ZpZXMgY29udmVyZ2VudCB2YWxpZGl0eSBhbmQgcmVsaWFiaWxpdHkgcmVxdWlyZW1lbnRzIGRlc3BpdGUgdGhlIG1vZGVsIGZpdCBiZWluZyBub24tZXZhbHVhYmxlIGF0IHRoaXMgc3RhZ2UuKioNCg0KIyMjIEVtcGxveWVlIEludGVudGlvbiB0byBTdGF5IChJVFMpDQoNCmBgYHtyfQ0KbW9kZWxfaXRzX29ubHkgPC0gcGFzdGUoIklUUyA9fiIsIHBhc3RlMCgiSVRTIiwgMTo1LCBjb2xsYXBzZSA9ICIgKyAiKSkNCg0KZml0X2l0cyA8LSBjZmEobW9kZWxfaXRzX29ubHksIGRhdGEgPSBkZl9zZW0sIG9yZGVyZWQgPSBwYXN0ZTAoIklUUyIsIDE6NSkpDQoNCnN1bW1hcnkoZml0X2l0cywgZml0Lm1lYXN1cmVzID0gVFJVRSwgc3RhbmRhcmRpemVkID0gVFJVRSkNCmBgYA0KDQpgYGB7cn0NCnNlbVRvb2xzOjpBVkUoZml0X2l0cykNCmBgYA0KDQpgYGB7cn0NCnN1cHByZXNzV2FybmluZ3Moc2VtVG9vbHM6OnJlbGlhYmlsaXR5KGZpdF9pdHMpKQ0KYGBgDQoNClRoZSBJVFMgY29uc3RydWN0IENGQSB5aWVsZGVkIGV4Y2VsbGVudCBmaXQuIFRoZSBzY2FsZWQgQ0ZJIHdhcyAxLjAwMCBhbmQgVExJIHdhcyAxLjAwMCwgYm90aCBleGNlZWRpbmcgMC45MC4gVGhlIHNjYWxlZCBSTVNFQSB3YXMgMC4wMTUgYW5kIHRoZSBTUk1SIHdhcyAwLjAxNiwgYm90aCB3ZWxsIHdpdGhpbiBhY2NlcHRhYmxlIGJvdW5kcy4gQWxsIGZpdmUgaW5kaWNhdG9ycyBoYWQgc3RhbmRhcmRpemVkIGxvYWRpbmdzIGFib3ZlIDAuNzAsIHJhbmdpbmcgZnJvbSAwLjc2MiAoSVRTMikgdG8gMC45MDAgKElUUzEpLCBtZWV0aW5nIHRoZSBpZGVhbCB0aHJlc2hvbGQuIFRoZSBBVkUgd2FzIDAuNjg4LCBjb25maXJtaW5nIGNvbnZlcmdlbnQgdmFsaWRpdHkuIEJvdGggb3JkaW5hbCBhbHBoYSBhbmQgb21lZ2EgZXhjZWVkZWQgMC43MCwgY29uZmlybWluZyBhZGVxdWF0ZSByZWxpYWJpbGl0eS4gKipUaGUgSVRTIGNvbnN0cnVjdCBwZXJmb3JtcyB3ZWxsIGFjcm9zcyBhbGwgbWVhc3VyZW1lbnQgY3JpdGVyaWEuKioNCg0KIyMgRmlyc3QgT3JkZXIgQ0ZBDQoNCmBgYHtyfQ0Kb3V0ZXJfbW9kZWwgPC0gcGFzdGUobW9kZWxfcG9zX29ubHksIG1vZGVsX2pzX29ubHksIG1vZGVsX3dsYl9vbmx5LCBtb2RlbF9pdHNfb25seSwgc2VwID0gIlxuIikNCmZpdF9vdXRlciA8LSBjZmEoDQogIG91dGVyX21vZGVsLCANCiAgZGF0YSA9IGRmX3NlbSwgDQogIG9yZGVyZWQgPSBvcmRpbmFsX2l0ZW1zDQopDQpzdW1tYXJ5KGZpdF9vdXRlciwgZml0Lm1lYXN1cmVzID0gVFJVRSwgc3RhbmRhcmRpemVkID0gVFJVRSkNCmBgYA0KDQpgYGB7cn0NCnNlbVRvb2xzOjpBVkUoZml0X291dGVyKQ0KYGBgDQoNCmBgYHtyfQ0Kc3VwcHJlc3NXYXJuaW5ncyhzZW1Ub29sczo6cmVsaWFiaWxpdHkoZml0X291dGVyKSkNCmBgYA0KDQpBIGNvbWJpbmVkIGZpcnN0LW9yZGVyIENGQSB3YXMgZXN0aW1hdGVkIHdpdGggYWxsIGZvdXIgbGF0ZW50IGNvbnN0cnVjdHMgbW9kZWxlZCBzaW11bHRhbmVvdXNseS4gVGhlIHNjYWxlZCBDRkkgd2FzIDAuOTc5IGFuZCBUTEkgd2FzIDAuOTc2LCBib3RoIGFib3ZlIHRoZSAwLjkwIHRocmVzaG9sZC4gVGhlIHNjYWxlZCBSTVNFQSB3YXMgMC4wNTAsIHdoaWNoIHNpdHMgZXhhY3RseSBhdCB0aGUgYm91bmRhcnkgb2YgdGhlIHRocmVzaG9sZCBvZiBcPCAwLjA4IGFuZCBpcyBjb25zaWRlcmVkIGFjY2VwdGFibGUuIFRoZSBTUk1SIHdhcyAwLjA0OCwganVzdCBiZWxvdyB0aGUgdGhyZXNob2xkIG9mIDAuMDUuIE92ZXJhbGwsIHRoZSBtZWFzdXJlbWVudCBtb2RlbCBkZW1vbnN0cmF0ZXMgYWNjZXB0YWJsZSBmaXQuDQoNCkFsbCBzdGFuZGFyZGl6ZWQgZmFjdG9yIGxvYWRpMC44ODkwLjg4OW5ncyBtZXQgb3IgZXhjZWVkZWQgMC43MCBhY3Jvc3MgdGhlIGZvdXIgY29uc3RydWN0cy4gRm9yIFBPUywgbG9hZGluZ3MgcmFuZ2VkIGZyb20gMC43NDcgdG8gMC44NjguIEZvciBKUywgbG9hZGluZ3MgcmFuZ2VkIGZyb20gMC43MzMgdG8gMC44NDMuIEZvciBXTEIsIGxvYWRpbmdzIHJhbmdlZCBmcm9tIDAuNzM1IHRvIDAuODQ4LiBGb3IgSVRTLCBsb2FkaW5ncyByYW5nZWQgZnJvbSAwLjc5NiB0byAwLjkxNy4gKipBbGwgbG9hZGluZ3Mgc2F0aXNmeSB0aGUgaWRlYWwgdGhyZXNob2xkLCBjb25maXJtaW5nIHRoYXQgZWFjaCBpbmRpY2F0b3IgYWRlcXVhdGVseSByZWZsZWN0cyBpdHMgcmVzcGVjdGl2ZSBjb25zdHJ1Y3QuKioNCg0KQWxsIGNvbnN0cnVjdHMgZXhjZWVkZWQgdGhlIHJlY29tbWVuZGVkIHRocmVzaG9sZHMgb2YgMC41MCBmb3IgQVZFIGFuZCAwLjcwIGZvciByZWxpYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCBQZXJjZWl2ZWQgT3JnYW5pemF0aW9uYWwgU3VwcG9ydCAoUE9TKSBkZW1vbnN0cmF0ZWQgc3Ryb25nIHZhbGlkaXR5IGFuZCByZWxpYWJpbGl0eSAoQVZFID0gMC42NjcsIE9yZGluYWwgJFxhbHBoYSQgPSAwLjkzOSwgJFxvbWVnYSQgPSAwLjg5MCkuIEpvYiBTYXRpc2ZhY3Rpb24gKEpTKSBhbHNvIG1ldCBhbGwgY3JpdGVyaWEgKEFWRSA9IDAuNjI0LCBPcmRpbmFsICRcYWxwaGEkID0gMC44ODksICRcb21lZ2EkID0gMC44MTYpLiBXb3JrLUxpZmUgQmFsYW5jZSAoV0xCKSBzaG93ZWQgYWNjZXB0YWJsZSBpbnRlcm5hbCBjb25zaXN0ZW5jeSBhbmQgdmFyaWFuY2UgZXh0cmFjdGlvbiAoQVZFID0gMC42MTYsIE9yZGluYWwgJFxhbHBoYSQgPSAwLjgyMywgJFxvbWVnYSQgPSAwLjcxMykuIEZpbmFsbHksIEludGVudGlvbiB0byBTdGF5IChJVFMpIGV4aGliaXRlZCByb2J1c3QgcHN5Y2hvbWV0cmljIHByb3BlcnRpZXMgKEFWRSA9IDAuNjkyLCBPcmRpbmFsICRcYWxwaGEkID0gMC45MTUsICRcb21lZ2EkID0gMC44NDQpLg0KDQojIyMgSFRNVCBSYXRpbw0KDQpgYGB7cn0NCmh0bXRfbWF0cml4IDwtIGh0bXQob3V0ZXJfbW9kZWwsIGRhdGEgPSBkZl9zZW0sIG9yZGVyZWQgPSBvcmRpbmFsX2l0ZW1zKQ0KcHJpbnQoaHRtdF9tYXRyaXgpDQpgYGANCg0KRm9yIHRoZSBIVE1UIHJhdGlvLCB0aGUgaGlnaGVzdCB2YWx1ZSB3YXMgb2JzZXJ2ZWQgYmV0d2VlbiBKUyBhbmQgV0xCIGF0IDAuODI0LCB3aGljaCByZW1haW5zIGJlbG93IHRoZSBzdHJpY3RlciB0aHJlc2hvbGQgb2YgMC44NS4gQWxsIG90aGVyIEhUTVQgdmFsdWVzIHdlcmUgYWxzbyBiZWxvdyAwLjg1LiAqKlRoaXMgY29uZmlybXMgdGhhdCBlYWNoIGNvbnN0cnVjdCBpcyBlbXBpcmljYWxseSBkaXN0aW5jdCBmcm9tIHRoZSBvdGhlcnMuKioNCg0KIyMjIEZvcm5lbGwtTGFyY2tlciBDcml0ZXJpb24NCg0KYGBge3J9DQpjb25zdHJ1Y3RfY29ycyA8LSBsYXZJbnNwZWN0KGZpdF9vdXRlciwgd2hhdCA9ICJjb3IubHYiKQ0KY2F0KCJcbi0tLSBDb25zdHJ1Y3QgQ29ycmVsYXRpb25zIC0tLVxuIikNCnByaW50KGNvbnN0cnVjdF9jb3JzKQ0KDQphdmVfdmFsdWVzIDwtIHNlbVRvb2xzOjpBVkUoZml0X291dGVyKQ0Kc3FydF9hdmUgPC0gc3FydChhdmVfdmFsdWVzKQ0KY2F0KCJcbi0tLSBTcXVhcmUgUm9vdCBvZiBBVkUgLS0tXG4iKQ0KcHJpbnQoc3FydF9hdmUpDQpgYGANCg0KRm9yIHRoZSBGb3JuZWxsLUxhcmNrZXIgY3JpdGVyaW9uLCB0aGUgc3F1YXJlIHJvb3RzIG9mIHRoZSBBVkUgdmFsdWVzIHdlcmUgUE9TID0gMC44MTcsIEpTID0gMC43OTAsIFdMQiA9IDAuNzg1LCBhbmQgSVRTID0gMC44MzIuIEluIGVhY2ggY2FzZSwgdGhlIHNxdWFyZSByb290IG9mIGEgY29uc3RydWN0J3MgQVZFIGV4Y2VlZHMgaXRzIGNvcnJlbGF0aW9ucyB3aXRoIGV2ZXJ5IG90aGVyIGNvbnN0cnVjdC4gRm9yIGV4YW1wbGUsIElUUyBjb3JyZWxhdGVzIHdpdGggUE9TIGF0IDAuODEwIGFuZCB3aXRoIFdMQiBhdCAwLjc5MCwgYnV0IHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgQVZFIGZvciBib3RoIElUUyAoMC44MzIpIGFuZCBQT1MgKDAuODE3KSBhbmQgV0xCICgwLjc4NSkgc3RpbGwgc2F0aXNmaWVzIHRoZSBjcml0ZXJpb24gd2hlbiBjb21wYXJlZCB3aXRoaW4gdGhlaXIgcmVzcGVjdGl2ZSByb3dzIGFuZCBjb2x1bW5zLg0KDQoqKkRpc2NyaW1pbmFudCB2YWxpZGl0eSBpcyB0aGVyZWZvcmUgc3VwcG9ydGVkIGFjcm9zcyBhbGwgY29uc3RydWN0cywgY29uZmlybWluZyB0aGF0IHRoZSBmb3VyIGxhdGVudCB2YXJpYWJsZXMgbWVhc3VyZSBkaXN0aW5jdCBkaW1lbnNpb25zLioqDQoNCiMgSW5uZXIgTW9kZWwNCg0KYGBge3J9DQppbm5lcl9tb2RlbCA8LSAiSVRTIH4gUE9TICsgSlMgKyBXTEIiDQpmdWxsX21vZGVsIDwtIHBhc3RlKG91dGVyX21vZGVsLCBpbm5lcl9tb2RlbCwgc2VwID0gIlxuIikNCmZpdF9mdWxsIDwtIHNlbShtb2RlbCA9IGZ1bGxfbW9kZWwsIA0KICAgICAgICAgICAgICAgIGRhdGEgPSBkZl9zZW0sIA0KICAgICAgICAgICAgICAgIG9yZGVyZWQgPSBvcmRpbmFsX2l0ZW1zKQ0Kc2VtUGF0aHMoZml0X2Z1bGwsIA0KICAgICAgICAgd2hhdExhYmVscyA9ICJzdGQiLCANCiAgICAgICAgIGxheW91dCA9ICJ0cmVlIiwgDQogICAgICAgICByb3RhdGlvbiA9IDIsIA0KICAgICAgICAgaW50ZXJjZXB0cyA9IEZBTFNFLCANCiAgICAgICAgIHRocmVzaG9sZHMgPSBGQUxTRSwNCiAgICAgICAgIHNpemVNYW4gPSA1LCANCiAgICAgICAgIHNpemVMYXQgPSA4LA0KICAgICAgICAgZWRnZS5sYWJlbC5jZXggPSAwLjcsDQogICAgICAgICBjb2xvciA9IGxpc3QobGF0ID0gImxpZ2h0Ymx1ZSIsIG1hbiA9ICJsaWdodGdyZWVuIiksDQogICAgICAgICBlZGdlLmNvbG9yID0gImJsYWNrIiwNCiAgICAgICAgIG1hciA9IGMoMiwgNSwgMiwgNSkpDQpgYGANCg0KVGhlIGZ1bGwgc3RydWN0dXJhbCBtb2RlbCB3YXMgZXN0aW1hdGVkIHVzaW5nIHRoZSBEV0xTIGVzdGltYXRvciB3aXRoIGFsbCAyMSBvcmRpbmFsIGluZGljYXRvcnMgYW5kIHRoZSBmb3VyIGxhdGVudCBjb25zdHJ1Y3RzIHNwZWNpZmllZCBpbiB0aGUgb3V0ZXIgbW9kZWwuIFRoZSBpbm5lciBtb2RlbCByZWdyZXNzZXMgRW1wbG95ZWUgSW50ZW50aW9uIHRvIFN0YXkgKElUUykgb24gUGVyY2VpdmVkIE9yZ2FuaXphdGlvbmFsIFN1cHBvcnQgKFBPUyksIEpvYiBTYXRpc2ZhY3Rpb24gKEpTKSwgYW5kIFdvcmstTGlmZSBCYWxhbmNlIChXTEIpLg0KDQpBY2NlcHRhYmxlIHRocmVzaG9sZHMgYXJlIENGSSBhbmQgVExJIFw+PSAwLjkwLCBSTVNFQSBcPCAwLjA4LCBhbmQgU1JNUiBcPCAwLjA1Lg0KDQpgYGB7cn0NCnN1bW1hcnkoZml0X2Z1bGwsIGZpdC5tZWFzdXJlcyA9IFRSVUUsIHN0YW5kYXJkaXplZCA9IFRSVUUpDQpgYGANCg0KVGhlIHNjYWxlZCBDRkkgd2FzIDAuOTc5IGFuZCBUTEkgd2FzIDAuOTc2LCBib3RoIGV4Y2VlZGluZyB0aGUgMC45MCB0aHJlc2hvbGQuIFRoZSBzY2FsZWQgUk1TRUEgd2FzIDAuMDUwLCBzaXR0aW5nIGV4YWN0bHkgYXQgdGhlIGJvdW5kYXJ5IG9mIHRoZSBhY2NlcHRhYmxlIHJhbmdlLCB3aXRoIGEgOTAlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgb2YgWzAuMDQ0LCAwLjA1Nl0uIFRoZSBTUk1SIHdhcyAwLjA0OCwgZmFsbGluZyBqdXN0IGJlbG93IHRoZSAwLjA1IHRocmVzaG9sZC4gT3ZlcmFsbCwgdGhlIHNjYWxlZCBmaXQgaW5kaWNhdG9ycyBzdWdnZXN0IHRoYXQgdGhlIGZ1bGwgc3RydWN0dXJhbCBtb2RlbCBkZW1vbnN0cmF0ZXMgYWNjZXB0YWJsZSBmaXQgdG8gdGhlIGRhdGEuDQoNCiMjIFBhdGggQ29lZmZpY2llbnRzDQoNCkEgcGF0aCBpcyBjb25zaWRlcmVkIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgYXQgcCBcPCAwLjA1LiBTdGFuZGFyZGl6ZWQgY29lZmZpY2llbnRzIChTdGQuYWxsKSBhcmUgaW50ZXJwcmV0ZWQgYXMgdGhlIGV4cGVjdGVkIHN0YW5kYXJkIGRldmlhdGlvbiBjaGFuZ2UgaW4gSVRTIGZvciBhIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gaW5jcmVhc2UgaW4gdGhlIHByZWRpY3RvciwgaG9sZGluZyBhbGwgb3RoZXIgcHJlZGljdG9ycyBjb25zdGFudC4NCg0KVGhlIHRhYmxlIGJlbG93IHByZXNlbnRzIHRoZSBzdGFuZGFyZGl6ZWQgc3RydWN0dXJhbCBwYXRoIGNvZWZmaWNpZW50cyBlc3RpbWF0aW5nIHRoZSBkaXJlY3QgZWZmZWN0IG9mIGVhY2ggcHJlZGljdG9yIG9uIElUUy4NCg0KYGBge3J9DQpwYXJhbWV0ZXJFc3RpbWF0ZXMoZml0X2Z1bGwsIHN0YW5kYXJkaXplZCA9IFRSVUUpIHw+DQogIGZpbHRlcihvcCA9PSAifiIpIHw+DQogIHNlbGVjdChsaHMsIG9wLCByaHMsIHN0ZC5hbGwsIHNlLCB6LCBwdmFsdWUpIHw+DQogIHJlbmFtZSgNCiAgICBPdXRjb21lID0gbGhzLA0KICAgIGAgYCA9IG9wLA0KICAgIFByZWRpY3RvciA9IHJocywNCiAgICBgU3RkLiBCZXRhYCA9IHN0ZC5hbGwsDQogICAgU0UgPSBzZSwNCiAgICBgei12YWx1ZWAgPSB6LA0KICAgIGBwLXZhbHVlYCA9IHB2YWx1ZQ0KICApDQpgYGANCg0KUE9TIHNob3dlZCBhIHBvc2l0aXZlIGFuZCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGVmZmVjdCBvbiBJVFMgKM6yID0gMC41NjQsIFNFID0gMC4wNjYsIHogPSA5LjcxOSwgcCBcPCAwLjAwMSksIGluZGljYXRpbmcgdGhhdCBoaWdoZXIgcGVyY2VpdmVkIG9yZ2FuaXphdGlvbmFsIHN1cHBvcnQgaXMgYXNzb2NpYXRlZCB3aXRoIHN0cm9uZ2VyIGVtcGxveWVlIGludGVudGlvbiB0byBzdGF5LiBXTEIgc2ltaWxhcmx5IHNob3dlZCBhIHBvc2l0aXZlIGFuZCBzaWduaWZpY2FudCBlZmZlY3QgKM6yID0gMC41NjYsIFNFID0gMC4xMTEsIHogPSA1LjUwMCwgcCBcPCAwLjAwMSksIHN1Z2dlc3RpbmcgdGhhdCBiZXR0ZXIgd29yay1saWZlIGJhbGFuY2Ugc2lnbmlmaWNhbnRseSBzdHJlbmd0aGVucyByZXRlbnRpb24gaW50ZW50aW9uLiBKUywgaG93ZXZlciwgc2hvd2VkIGEgbmVnYXRpdmUgYW5kIG5vbi1zaWduaWZpY2FudCBlZmZlY3QgKM6yID0gLTAuMTE0LCBTRSA9IDAuMTIzLCB6ID0gLTEuMDgzLCBwID0gMC4yNzkpLCBpbmRpY2F0aW5nIHRoYXQgam9iIHNhdGlzZmFjdGlvbiBkb2VzIG5vdCBzaW5nbGUtaGFuZGVkbHkgcHJlZGljdCBpbnRlbnRpb24gdG8gc3RheSB3aGVuIFBPUyBhbmQgV0xCIGFyZSBjb250cm9sbGVkIGZvci4NCg0KIyMgVmFyaWFuY2UgRXhwbGFpbmVkIChSMikNCg0KVGhlIFLCsiB2YWx1ZSBpbmRpY2F0ZXMgdGhlIHByb3BvcnRpb24gb2YgdmFyaWFuY2UgaW4gRW1wbG95ZWUgSW50ZW50aW9uIHRvIFN0YXkgKElUUykgdGhhdCBpcyBqb2ludGx5IGV4cGxhaW5lZCBieSBQT1MsIEpTLCBhbmQgV0xCIGluIHRoZSBzdHJ1Y3R1cmFsIG1vZGVsLiBBIGhpZ2hlciBSwrIgcmVmbGVjdHMgZ3JlYXRlciBjb2xsZWN0aXZlIGV4cGxhbmF0b3J5IHBvd2VyIG9mIHRoZSBwcmVkaWN0b3JzLg0KDQpgYGB7cn0NCmxhdkluc3BlY3QoZml0X2Z1bGwsIHdoYXQgPSAicjIiKVtbIklUUyJdXQ0KYGBgDQoNClBPUywgSlMsIGFuZCBXTEIgY29tYmluZWQgZXhwbGFpbiA4Mi4zJSBvZiB0aGUgdmFyaWFuY2UgaW4gRW1wbG95ZWUgSW50ZW50aW9uIHRvIFN0YXksIGluZGljYXRpbmcgdGhhdCB0aGUgc3RydWN0dXJhbCBtb2RlbCBoYXMgdmVyeSBzdHJvbmcgZXhwbGFuYXRvcnkgcG93ZXIuIFRoaXMgc3VnZ2VzdHMgdGhhdCBwZXJjZWl2ZWQgb3JnYW5pemF0aW9uYWwgc3VwcG9ydCwgam9iIHNhdGlzZmFjdGlvbiwgYW5kIHdvcmstbGlmZSBiYWxhbmNlIGNvbGxlY3RpdmVseSByZXNwb25zaWJsZSBmb3IgdGhlIGxhcmdlIG1ham9yaXR5IG9mIHdoYXQgZHJpdmVzIGVtcGxveWVlcycgaW50ZW50aW9uIHRvIHJlbWFpbiB3aXRoIHRoZSBvcmdhbml6YXRpb24uDQoNCiMjIEVmZmVjdCBTaXplIChGMikNCg0KQ29oZW4ncyBmwrIgbWVhc3VyZXMgdGhlIHByYWN0aWNhbCBzaWduaWZpY2FuY2Ugb2YgZWFjaCBwcmVkaWN0b3IncyB1bmlxdWUgY29udHJpYnV0aW9uIHRvIGV4cGxhaW5pbmcgSVRTIHZhcmlhbmNlLiBUaHJlc2hvbGRzIGZvbGxvdyBDb2hlbiAoMTk4OCk6IGbCsiBcPj0gMC4wMiBzbWFsbCwgXD49IDAuMTUgbWVkaXVtLCBcPj0gMC4zNSBsYXJnZS4NCg0KYGBge3J9DQpmaXRfbm9fcG9zIDwtIHNlbSgNCiAgbW9kZWwgICA9IHBhc3RlKG91dGVyX21vZGVsLCAiSVRTIH4gSlMgKyBXTEIiLCBzZXAgPSAiXG4iKSwNCiAgZGF0YSAgICA9IGRmX3NlbSwNCiAgb3JkZXJlZCA9IG9yZGluYWxfaXRlbXMNCikNCg0KZml0X25vX2pzIDwtIHNlbSgNCiAgbW9kZWwgICA9IHBhc3RlKG91dGVyX21vZGVsLCAiSVRTIH4gUE9TICsgV0xCIiwgc2VwID0gIlxuIiksDQogIGRhdGEgICAgPSBkZl9zZW0sDQogIG9yZGVyZWQgPSBvcmRpbmFsX2l0ZW1zDQopDQoNCmZpdF9ub193bGIgPC0gc2VtKA0KICBtb2RlbCAgID0gcGFzdGUob3V0ZXJfbW9kZWwsICJJVFMgfiBQT1MgKyBKUyIsIHNlcCA9ICJcbiIpLA0KICBkYXRhICAgID0gZGZfc2VtLA0KICBvcmRlcmVkID0gb3JkaW5hbF9pdGVtcw0KKQ0KYGBgDQoNCmBgYHtyfQ0KcjJfZnVsbCAgPC0gbGF2SW5zcGVjdChmaXRfZnVsbCwgICAgd2hhdCA9ICJyMiIpW1siSVRTIl1dDQpyMl9ub19wb3MgPC0gbGF2SW5zcGVjdChmaXRfbm9fcG9zLCB3aGF0ID0gInIyIilbWyJJVFMiXV0NCnIyX25vX2pzICA8LSBsYXZJbnNwZWN0KGZpdF9ub19qcywgIHdoYXQgPSAicjIiKVtbIklUUyJdXQ0KcjJfbm9fd2xiIDwtIGxhdkluc3BlY3QoZml0X25vX3dsYiwgd2hhdCA9ICJyMiIpW1siSVRTIl1dDQoNCmYyIDwtIGZ1bmN0aW9uKHIyX2Z1bGwsIHIyX3JlZHVjZWQpIChyMl9mdWxsIC0gcjJfcmVkdWNlZCkgLyAoMSAtIHIyX2Z1bGwpDQoNCmRhdGEuZnJhbWUoDQogIFByZWRpY3RvciA9IGMoIlBPUyIsICJKUyIsICJXTEIiKSwNCiAgUjJfZnVsbCAgID0gcm91bmQocjJfZnVsbCwgMyksDQogIFIyX3JlZHVjZWQgPSByb3VuZChjKHIyX25vX3BvcywgcjJfbm9fanMsIHIyX25vX3dsYiksIDMpLA0KICBmMiA9IHJvdW5kKGMoDQogICAgZjIocjJfZnVsbCwgcjJfbm9fcG9zKSwNCiAgICBmMihyMl9mdWxsLCByMl9ub19qcyksDQogICAgZjIocjJfZnVsbCwgcjJfbm9fd2xiKQ0KICApLCAzKSwNCiAgSW50ZXJwcmV0YXRpb24gPSBjKA0KICAgIGlmZWxzZShmMihyMl9mdWxsLCByMl9ub19wb3MpID49IDAuMzUsICJMYXJnZSIsDQogICAgICBpZmVsc2UoZjIocjJfZnVsbCwgcjJfbm9fcG9zKSA+PSAwLjE1LCAiTWVkaXVtIiwgIlNtYWxsIikpLA0KICAgIGlmZWxzZShmMihyMl9mdWxsLCByMl9ub19qcykgID49IDAuMzUsICJMYXJnZSIsDQogICAgICBpZmVsc2UoZjIocjJfZnVsbCwgcjJfbm9fanMpICA+PSAwLjE1LCAiTWVkaXVtIiwgIlNtYWxsIikpLA0KICAgIGlmZWxzZShmMihyMl9mdWxsLCByMl9ub193bGIpID49IDAuMzUsICJMYXJnZSIsDQogICAgICBpZmVsc2UoZjIocjJfZnVsbCwgcjJfbm9fd2xiKSA+PSAwLjE1LCAiTWVkaXVtIiwgIlNtYWxsIikpDQogICkNCikNCg0KYGBgDQoNClRoZSBmwrIgZm9yIFBPUyBkZW1vbnN0cmF0ZSBhIHJhdGhlciBpbXBvc3NpYmxlIHJlc3VsdCAoZsKyID0gMTExLjg1NikgYmVjYXVzZSB0aGUgcmVkdWNlZCBtb2RlbCBleGNsdWRpbmcgUE9TIGZhaWxlZCB0byBjb252ZXJnZS4gV2l0aG91dCBQT1MsIHRoZSBzdHJ1Y3R1cmFsIHBhdGhzIGZvciBKUyBhbmQgV0xCIGluZmxhdGVkIHRvIGV4dHJlbWUgdmFsdWVzICgxNDEuMzU2IGFuZCAtMTQ0LjA3OCByZXNwZWN0aXZlbHkpLCBhbmQgdGhlIHJlc2lkdWFsIHZhcmlhbmNlIG9mIElUUyBibGV3IHVwIHRvIDE2Ljg0NiwgcHJvZHVjaW5nIGEgbmVnYXRpdmUgUsKyIG9mIC0xOS4wMjcuIFRoaXMgaW5zdGFiaWxpdHkgaXMgcG9zc2libHkgZHVlIHRvIHRoZSBoaWdoIGludGVyY29ycmVsYXRpb24gYmV0d2VlbiBKUyBhbmQgV0xCIChyID0gMC44MjApLCB3aGljaCBtYWtlcyB0aGUgbW9kZWwgdW5pZGVudGlmaWVkIHdoZW4gUE9TIGlzIHJlbW92ZWQuIENvbnNlcXVlbnRseSwgdGhlIGbCsiB2YWx1ZSBmb3IgUE9TIGNhbm5vdCBiZSBtZWFuaW5nZnVsbHkgaW50ZXJwcmV0ZWQgYW5kIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIGRpc2N1c3Npb24uIEZvciBKUywgdGhlIGbCsiB3YXMgMC4xMjQsIGluZGljYXRpbmcgYSBzbWFsbCBlZmZlY3QuIEZvciBXTEIsIHRoZSBmwrIgd2FzIDAuMjY3LCBpbmRpY2F0aW5nIGEgbWVkaXVtIGVmZmVjdC4gVGhlc2UgcmVzdWx0cyBzdWdnZXN0IHRoYXQgd2hpbGUgYm90aCBKUyBhbmQgV0xCIGNvbnRyaWJ1dGUgdW5pcXVlbHkgdG8gZXhwbGFpbmluZyBJVFMgdmFyaWFuY2UgYmV5b25kIHRoZSBvdGhlciBwcmVkaWN0b3JzLCBXTEIgY2FycmllcyBncmVhdGVyIGluY3JlbWVudGFsIGV4cGxhbmF0b3J5IHBvd2VyLg0KDQojIyBNZWRpYXRpb24NCg0KVGhlIG1lZGlhdGlvbiBhbmFseXNpcyB0ZXN0cyB3aGV0aGVyIEpTIGFuZCBXTEIgYWN0IGFzIG1lZGlhdG9ycyBpbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gUE9TIGFuZCBJVFMuIFBPUyBpcyB0cmVhdGVkIGFzIHRoZSBleG9nZW5vdXMgcHJlZGljdG9yLCBKUyBhbmQgV0xCIGFzIHBvdGVudGlhbCBtZWRpYXRvcnMsIGFuZCBJVFMgYXMgdGhlIG91dGNvbWUuIEluZGlyZWN0IGVmZmVjdHMgYXJlIGVzdGltYXRlZCB1c2luZyBib290c3RyYXAgcmVzYW1wbGluZyAoMTAwMCBpdGVyYXRpb25zKSB3aXRoIGJpYXMtY29ycmVjdGVkIGFjY2VsZXJhdGVkIChCQ2EpIDk1JSBjb25maWRlbmNlIGludGVydmFscy4gQSBtZWRpYXRpb24gZWZmZWN0IGlzIGNvbnNpZGVyZWQgc2lnbmlmaWNhbnQgaWYgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgZXhjbHVkZXMgemVyby4NCg0KYGBge3J9DQptZWRpYXRpb25fbW9kZWwgPC0gIg0KICBKUyAgfiBhMSAqIFBPUw0KICBXTEIgfiBhMiAqIFBPUw0KICBJVFMgfiBiMSAqIEpTICsgYjIgKiBXTEIgKyBjICogUE9TDQoNCiAgaW5kaXJlY3RfanMgICAgOj0gYTEgKiBiMQ0KICBpbmRpcmVjdF93bGIgICA6PSBhMiAqIGIyDQogIHRvdGFsX2luZGlyZWN0IDo9IGExICogYjEgKyBhMiAqIGIyDQogIHRvdGFsICAgICAgICAgIDo9IGMgKyBhMSAqIGIxICsgYTIgKiBiMg0KIg0KDQpmdWxsX21lZGlhdGlvbl9tb2RlbCA8LSBwYXN0ZShvdXRlcl9tb2RlbCwgbWVkaWF0aW9uX21vZGVsLCBzZXAgPSAiXG4iKQ0KDQpmaXRfbWVkaWF0aW9uIDwtIHNlbSgNCiAgbW9kZWwgICAgID0gZnVsbF9tZWRpYXRpb25fbW9kZWwsDQogIGRhdGEgICAgICA9IGRmX3NlbSwNCiAgc2UgICAgICAgID0gImJvb3RzdHJhcCIsDQogIGJvb3RzdHJhcCA9IDEwMDANCikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQpwYXJhbWV0ZXJFc3RpbWF0ZXMoZml0X21lZGlhdGlvbiwgYm9vdC5jaS50eXBlID0gImJjYS5zaW1wbGUiLCBsZXZlbCA9IDAuOTUpIHw+DQogIGZpbHRlcihvcCA9PSAiOj0iKSB8Pg0KICBzZWxlY3QobGFiZWwsIGVzdCwgc2UsIHosIHB2YWx1ZSwgY2kubG93ZXIsIGNpLnVwcGVyKSB8Pg0KICByZW5hbWUoDQogICAgRWZmZWN0ICAgICAgICAgPSBsYWJlbCwNCiAgICBFc3RpbWF0ZSAgICAgICA9IGVzdCwNCiAgICBTRSAgICAgICAgICAgICA9IHNlLA0KICAgIGB6LXZhbHVlYCAgICAgID0geiwNCiAgICBgcC12YWx1ZWAgICAgICA9IHB2YWx1ZSwNCiAgICBgOTUlIENJIExvd2VyYCA9IGNpLmxvd2VyLA0KICAgIGA5NSUgQ0kgVXBwZXJgID0gY2kudXBwZXINCiAgKQ0KYGBgDQoNClRoZSBtZWRpYXRpb24gYW5hbHlzaXMgdGVzdGVkIHdoZXRoZXIgSlMgYW5kIFdMQiBtZWRpYXRlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBQT1MgYW5kIElUUyB1c2luZyBib290c3RyYXAgcmVzYW1wbGluZyB3aXRoIEJDYSA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMuIEEgbWVkaWF0aW9uIGVmZmVjdCBpcyBjb25zaWRlcmVkIHNpZ25pZmljYW50IHdoZW4gdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgZXhjbHVkZXMgemVyby4NCg0KVGhlIGluZGlyZWN0IGVmZmVjdCBvZiBQT1Mgb24gSVRTIHRocm91Z2ggSlMgd2FzIG5vbi1zaWduaWZpY2FudCAozrIgPSAwLjA0OCwgU0UgPSAwLjA1MiwgeiA9IDAuOTE5LCBwID0gMC4zNTgsIDk1JSBDSSBbLTAuMDY2LCAwLjEzN10pLCBhcyB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbCBpbmNsdWRlcyB6ZXJvLiBUaGlzIGluZGljYXRlcyB0aGF0IEpTIGRvZXMgbm90IGZ1bmN0aW9uIGFzIGEgbWVkaWF0b3IgaW4gdGhlIFBPUy1JVFMgcmVsYXRpb25zaGlwLiBUaGUgaW5kaXJlY3QgZWZmZWN0IHRocm91Z2ggV0xCLCBob3dldmVyLCB3YXMgcG9zaXRpdmUgYW5kIHNpZ25pZmljYW50ICjOsiA9IDAuMzA3LCBTRSA9IDAuMDYwLCB6ID0gNS4xMDIsIHAgXDwgMC4wMDEsIDk1JSBDSSBbMC4yMDMsIDAuNDQxXSksIGNvbmZpcm1pbmcgdGhhdCBXTEIgcGFydGlhbGx5IG1lZGlhdGVzIHRoZSBlZmZlY3Qgb2YgUE9TIG9uIElUUy4gVGhlIHRvdGFsIGluZGlyZWN0IGVmZmVjdCB3YXMgYWxzbyBzaWduaWZpY2FudCAozrIgPSAwLjM1NSwgU0UgPSAwLjA2NCwgeiA9IDUuNTQ2LCBwIFw8IDAuMDAxLCA5NSUgQ0kgWzAuMjMxLCAwLjQ4N10pLCBkcml2ZW4gcHJpbWFyaWx5IGJ5IHRoZSBXTEIgcGF0aHdheS4gVGhlIHRvdGFsIGVmZmVjdCBvZiBQT1Mgb24gSVRTIHJlbWFpbmVkIHNpZ25pZmljYW50ICjOsiA9IDAuOTc2LCBTRSA9IDAuMDk1LCB6ID0gMTAuMjQ0LCBwIFw8IDAuMDAxLCA5NSUgQ0kgWzAuODA5LCAxLjE5N10pLCBjb25maXJtaW5nIHRoYXQgUE9TIHJldGFpbnMgYSBzdHJvbmcgZGlyZWN0IGVmZmVjdCBvbiBJVFMgaW5kZXBlbmRlbnQgb2YgdGhlIG1lZGlhdGlvbiBwYXRod2F5cy4NCg0KIyBHcmFuZCBDb25jbHVzaW9uDQoNClRoaXMgc3R1ZHkgdXNlZCBDQi1TRU0gdG8gZXhhbWluZSBob3cgUGVyY2VpdmVkIE9yZ2FuaXphdGlvbmFsIFN1cHBvcnQgKFBPUyksIEpvYiBTYXRpc2ZhY3Rpb24gKEpTKSwgYW5kIFdvcmstTGlmZSBCYWxhbmNlIChXTEIpIGFmZmVjdCBlbXBsb3llZXMnIEludGVudGlvbiB0byBTdGF5IChJVFMpLiBUaGUgYW5hbHlzaXMgY292ZXJlZCB0aHJlZSBzdGFnZXM6IGNoZWNraW5nIGFzc3VtcHRpb25zLCB2YWxpZGF0aW5nIHRoZSBtZWFzdXJlbWVudCBtb2RlbCwgYW5kIHRlc3Rpbmcgc3RydWN0dXJhbCBwYXRocyB3aXRoIG1lZGlhdGlvbi4NCg0KQmVmb3JlIG1vZGVsaW5nLCBtdWx0aXZhcmlhdGUgb3V0bGllcnMgd2VyZSByZW1vdmVkIHVzaW5nIE1haGFsYW5vYmlzIGRpc3RhbmNlLiBUaGUgbm9ybWFsaXR5IGFzc3VtcHRpb24gd2FzIHZpb2xhdGVkIGFjcm9zcyBhbGwgMjEgaW5kaWNhdG9ycywgc28gdGhlIERXTFMgZXN0aW1hdG9yIHdpdGggcm9idXN0IHN0YW5kYXJkIGVycm9ycyB3YXMgdXNlZCB0aHJvdWdob3V0LiBUaGUgS01PIHZhbHVlIG9mIDAuOTUgY29uZmlybWVkIHRoZSBkYXRhIHdlcmUgd2VsbC1zdWl0ZWQgZm9yIGZhY3RvciBhbmFseXNpcywgYW5kIGFsbCBWSUYgdmFsdWVzIHN0YXllZCBiZWxvdyAzLjMsIHJ1bGluZyBvdXQgbXVsdGljb2xsaW5lYXJpdHkuDQoNClRoZSBtZWFzdXJlbWVudCBtb2RlbCBwZXJmb3JtZWQgd2VsbC4gQWxsIGZvdXIgY29uc3RydWN0cyBtZXQgdGhlIEFWRSB0aHJlc2hvbGQgb2YgMC41MCwgcmVsaWFiaWxpdHkgdGhyZXNob2xkcyBvZiAwLjcwLCBhbmQgZmFjdG9yIGxvYWRpbmdzIGF0IG9yIGFib3ZlIDAuNzAuIERpc2NyaW1pbmFudCB2YWxpZGl0eSBoZWxkIHVuZGVyIGJvdGggdGhlIEhUTVQgY3JpdGVyaW9uIChoaWdoZXN0IHJhdGlvID0gMC44MjQsIGJlbG93IDAuODUpIGFuZCB0aGUgRm9ybmVsbC1MYXJja2VyIGNyaXRlcmlvbi4gVGhlIGNvbWJpbmVkIENGQSBmaXQgd2FzIGFjY2VwdGFibGUgKENGSSA9IDAuOTc5LCBUTEkgPSAwLjk3NiwgUk1TRUEgPSAwLjA1MCwgU1JNUiA9IDAuMDQ4KS4NCg0KSW4gdGhlIHN0cnVjdHVyYWwgbW9kZWwsIFBPUyBhbmQgV0xCIGVhY2ggaGFkIGEgc2lnbmlmaWNhbnQgcG9zaXRpdmUgZWZmZWN0IG9uIElUUyAoUE9TOiDOsiA9IDAuNTY0LCBwIFw8IDAuMDAxOyBXTEI6IM6yID0gMC41NjYsIHAgXDwgMC4wMDEpLiBKUyBkaWQgbm90IHNob3cgYSBzaWduaWZpY2FudCBkaXJlY3QgZWZmZWN0IG9uY2UgUE9TIGFuZCBXTEIgd2VyZSBjb250cm9sbGVkIGZvciAozrIgPSAtMC4xMTQsIHAgPSAwLjI3OSkuIFRoZSB0aHJlZSBwcmVkaWN0b3JzIHRvZ2V0aGVyIGV4cGxhaW5lZCA4Mi4zJSBvZiB0aGUgdmFyaWFuY2UgaW4gSVRTLiBFZmZlY3Qgc2l6ZXMgc2hvd2VkIFdMQiBoYWQgYSBtZWRpdW0gaW5jcmVtZW50YWwgY29udHJpYnV0aW9uIChmwrIgPSAwLjI2NykgYW5kIEpTIGhhZCBhIHNtYWxsIG9uZSAoZsKyID0gMC4xMjQpLiBQT1MgY291bGQgbm90IGJlIGV2YWx1YXRlZCBmb3IgZWZmZWN0IHNpemUgZHVlIHRvIG1vZGVsIGluc3RhYmlsaXR5IHVwb24gaXRzIHJlbW92YWwsIHdoaWNoIGl0c2VsZiByZWZsZWN0cyBob3cgY2VudHJhbCBQT1MgaXMgdG8gdGhlIG1vZGVsIHN0cnVjdHVyZS4NCg0KVGhlIG1lZGlhdGlvbiBhbmFseXNpcyBmb3VuZCB0aGF0IFdMQiBzaWduaWZpY2FudGx5IG1lZGlhdGVzIHRoZSBlZmZlY3Qgb2YgUE9TIG9uIElUUyAoaW5kaXJlY3QgZWZmZWN0IM6yID0gMC4zMDcsIDk1JSBDSSBbMC4yMDMsIDAuNDQxXSkuIFRoaXMgbWVhbnMgcGFydCBvZiBob3cgb3JnYW5pemF0aW9uYWwgc3VwcG9ydCBpbmNyZWFzZXMgcmV0ZW50aW9uIGlzIGJ5IGltcHJvdmluZyBlbXBsb3llZXMnIHdvcmstbGlmZSBiYWxhbmNlLiBKUyBkaWQgbm90IG1lZGlhdGUgdGhpcyByZWxhdGlvbnNoaXAgKGluZGlyZWN0IGVmZmVjdCDOsiA9IDAuMDQ4LCA5NSUgQ0kgWy0wLjA2NiwgMC4xMzddKS4gUE9TIGFsc28gcmV0YWluZWQgYSBzdHJvbmcgZGlyZWN0IGVmZmVjdCBvbiBJVFMgKHRvdGFsIGVmZmVjdCDOsiA9IDAuOTc2LCBwIFw8IDAuMDAxKSwgaW5kZXBlbmRlbnQgb2YgdGhlIG1lZGlhdGlvbiBwYXRocy4NCg0KT3ZlcmFsbCwgdGhlIGZpbmRpbmdzIHN1Z2dlc3QgdGhhdCBQT1MgYW5kIFdMQiBhcmUgdGhlIG1vc3QgaW1wb3J0YW50IGRyaXZlcnMgb2YgZW1wbG95ZWUgcmV0ZW50aW9uLiBPcmdhbml6YXRpb25zIGxvb2tpbmcgdG8gcmV0YWluIHN0YWZmIHNob3VsZCBmb2N1cyBvbiBtYWtpbmcgZW1wbG95ZWVzIGZlZWwgc3VwcG9ydGVkIGFuZCBvbiBjcmVhdGluZyBjb25kaXRpb25zIHRoYXQgYWxsb3cgZm9yIHN1c3RhaW5hYmxlIHdvcmstbGlmZSBiYWxhbmNlLiBKUywgd2hpbGUgdmFsdWFibGUsIGRvZXMgbm90IGluZGVwZW5kZW50bHkgcHJlZGljdCByZXRlbnRpb24gb25jZSBzdXBwb3J0IGFuZCBiYWxhbmNlIGFyZSBpbiBwbGFjZS4gVGhpcyBzdHVkeSBzaG93cyB0aGF0IENCLVNFTSwgd2hlbiBidWlsdCBvbiBzb2xpZCBtZWFzdXJlbWVudCB2YWxpZGF0aW9uLCBjYW4gcHJvZHVjZSBib3RoIHN0YXRpc3RpY2FsbHkgc291bmQgYW5kIHByYWN0aWNhbGx5IHVzZWZ1bCBpbnNpZ2h0cyBpbnRvIHdoYXQga2VlcHMgZW1wbG95ZWVzIGluIGFuIG9yZ2FuaXphdGlvbi4NCg==