When to use
SPSS
We use R for almost all data analysis. However,
R is code-based and has a steep learning curve. As
a result, undergraduate students in the lab most often use
SPSS
or jamovi
for
their research projects (e.g., Honors
projects and SROP
projects ), because SPSS
and jamovi
have a point-and-click
interface.
Creating a
SPSS
Syntax File to Import a .csv
Data
File
A .csv
file is a “comma-separated values” file—a file
whose values are separated by commas. The lab will provide you with a
.csv
in your member user folder. You will then need to
create a SPSS
syntax file to import and save the data into
SPSS
format. This data file imports the data and only needs
to be run when there’s a new data set.
Open SPSS
in the search bar
Go to file, open, data, then select .csv data
You might have to change th file type to ‘.csv’ instead of the
default ‘.sav.’ in order for the desired files to show up
Navigate to the desired .csv file
Select data file and select paste
Once the data preview opens, select paste again
A SPSS
syntax file will open, select save as and move
the file to the desired location
Open the syntax file and make sure lab path is saved as the absolute
file path in the (/FILE=
) field (not a
mapped network drive like R:
)
\\lc-rs-store24.hpc.uiowa.edu\lss_itpetersen\Lab\Members\HAWKID\Thesis\Data\srs_idWave.csv
To run your script, select CTRL A and press the green play button to
run the script
In the import script, SPSS
will automatically determine
the type of variable each should be, but it does not always classify
them correctly.
For numeric variables used in analysis, use the following command to
change the variable to numeric
e.g., (tcid AUTO
) to (tcid F4.2
)
At this point, the data file should appear. Next, save the data in
SPSS
format (.sav
) with the below steps:
On the open data file, select save as
and
paste
This will copy and paste the syntax at the end of the syntax
file in the import script. The completed import script will now
read the .csv
file and convert it to an SPSS
data file (.sav
).
At this point, you can proceed here to start
your analysis script!
Example (you will need to update the filepath to your particular
filepath):
GET DATA /TYPE=TXT
/FILE="\\lc-rs-store24.hpc.uiowa.edu\lss_itpetersen\Lab\Members\HAWKID\Thesis\Data\srs_idWave.csv"
/ENCODING='UTF8'
/DELIMITERS=","
/QUALIFIER='"'
/ARRANGEMENT=DELIMITED
/FIRSTCASE=2
/DATATYPEMIN PERCENTAGE=95.0
/VARIABLES=
tcid AUTO
wave AUTO
tc_sex AUTO
tc_ageLV1 F4.2
/MAP.
RESTORE.
CACHE.
EXECUTE.
SAVE OUTFILE='\\lc-rs-store24.hpc.uiowa.edu\lss_itpetersen\Lab\Members\HAWKID\Thesis\Data\srs_idWave.sav'
/COMPRESSED.
Data Management
Add any data management/transformations at the end of your
import.sps
file (after importing your data), so you re-run
the transformations each time you update the data file.
Average Across
Variables
COMPUTE cbcl_externalizingPOM_Average = MEAN(cbcl_externalizingPOM_Father,cbcl_externalizingPOM_Mother,cbcl_externalizingPOM_Secondary).
COMPUTE cbq_inhibitoryControl_Average = MEAN(cbq_inhibitoryControl_Father,cbq_inhibitoryControl_Mother,cbq_inhibitoryControl_Secondary).
EXECUTE.
Rename Variables
RENAME VARIABLES (ses_hollingsheadSES = SES).
Mean-Center
Variables
COMPUTE ses_hollingsheadSES_mc = ses_hollingsheadSES - mean_ses.
COMPUTE adi_nationalRank_mc = adi_nationalRank - mean_adiN.
EXECUTE.
Compute Interaction
Terms
COMPUTE ses_adi_interaction = ses_hollingsheadSES_mc * adi_nationalRank_mc.
EXECUTE.
Save Data File
SAVE OUTFILE='\\lc-rs-store24.hpc.uiowa.edu\lss_itpetersen\Lab\Members\HAWKID\Thesis\Data\srs_idWave.sav'
/COMPRESSED.
Creating a
SPSS
Syntax File for Analysis
To create a new syntax file, select file then new then syntax
Save file as: descriptives.sps
In your syntax file, create comments for your different types of
analyses.
e.g., frequencies, descriptives, correlations
In your new data file, select an analysis and choose paste. In your
despriptives syntax file, the analysis should now be added. For each
subsequent analysis, select paste to add it to the descriptives file
under the appropriate syntax.
Create a new SPSS
syntax file for your analysis. In
this syntax file, add your analysis
Frequencies
FREQUENCIES VARIABLES=tc_sex tc_hispanic tc_race tc_ethnicity
/ORDER=ANALYSIS.
Descriptives
DESCRIPTIVES VARIABLES=ICsim IClim IChg ICcbq ses_hollingsheadSES ADINat EXTBx
/STATISTICS=MEAN STDDEV MIN MAX KURTOSIS SKEWNESS.
Histograms
GRAPH
/HISTOGRAM=ses_hollingsheadSES.
Correlations
CORRELATIONS
/VARIABLES=tc_ageLV1 ses_hollingsheadParent cbq_inhibitoryControl_Average
lim_scoreExcludingPreferencePOM hg_scorePOM sim_goXnoGoPOM cbcl_externalizingPOM_Average
/PRINT=TWOTAIL NOSIG FULL
/MISSING=PAIRWISE.
Multiple
Regression
REGRESSION
/MISSING PAIRWISE
/STATISTICS COEFF OUTS R ANOVA
/CRITERIA=PIN(.05) POUT(.10)
/NOORIGIN
/DEPENDENT outcome
/METHOD=ENTER predictor1 predictor2 predictor3.
Moderation
Calculate means of the predictor and moderator
aggregate outfile * mode addvariables
/predictor_mean = mean(predictor).
aggregate outfile * mode addvariables
/moderator_mean = mean(moderator).
Mean-center the predictor and moderator
compute predictor_MC = predictor - predictor_mean.
compute moderator_MC = moderator - moderator_mean.
execute.
Verify that predictor and moderator are mean-centered (i.e., have
a mean of zero)
DESCRIPTIVES VARIABLES=predictor moderator predictor_MC moderator_MC
/STATISTICS=MEAN STDDEV MIN MAX.
Create the interaction terms
compute predictorXmoderator = predictor_MC * moderator_MC.
execute.
Run moderated multiple regression model
REGRESSION
/MISSING PAIRWISE
/STATISTICS COEFF OUTS R ANOVA
/CRITERIA=PIN(.05) POUT(.10)
/NOORIGIN
/DEPENDENT outcome
/METHOD=ENTER predictor_MC moderator_MC predictorXmoderator covariate1 covariate2.
Create plot of interaction
see McCabe et al. (2018) and following links:
Best Practices
Use SPSS
syntax files (.sps
) for
performing all commands, including importing data ,
computing variables, recoding variables, running analyses, etc. The
benefit of using SPSS
syntax files (and code-based files,
more generally) is that they allow you to reproduce your findings again
with the same data file. This is important so you do not have to
remember all of the steps you followed to generate the analysis. This
also allows you to quickly re-run the analysis if the data file is
updated due to the collection of more data. If you are unsure what
SPSS
command is needed, run the command via “point and
click” in the interface; however, instead of clicking “OK”, click
“Paste”. This will paste the syntax that is used to run the command into
a syntax file.
Have one syntax file for importing data, computing composites,
recoding variables, and saving data (e.g.,
import.sps
).
Have a separate syntax file for generating frequencies, descriptive
statistics, and correlation matrices (e.g.,
descriptives.sps
).
Have a separate syntax file for running analyses (e.g.,
analyses.sps
).
Comment your syntax frequently
to comment use the following convention:
Save your syntax frequently
LS0tCnRpdGxlOiAiU1BTUyIKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoCiAgZWNobyA9IFRSVUUsCiAgZXJyb3IgPSBUUlVFLAogIGNvbW1lbnQgPSAiIikKYGBgCgojIFdoZW4gdG8gdXNlIGBTUFNTYCB7I3doZW5TUFNTfQoKIFdlIHVzZSBbUl0oUi5odG1sKSBmb3IgYWxtb3N0IGFsbCBkYXRhIGFuYWx5c2lzLgogSG93ZXZlciwgW1JdKFIuaHRtbCkgaXMgY29kZS1iYXNlZCBhbmQgaGFzIGEgc3RlZXAgbGVhcm5pbmcgY3VydmUuCiBBcyBhIHJlc3VsdCwgdW5kZXJncmFkdWF0ZSBzdHVkZW50cyBpbiB0aGUgbGFiIG1vc3Qgb2Z0ZW4gdXNlIGBTUFNTYCBvciBbYGphbW92aWBdKGphbW92aS5odG1sKSBmb3IgdGhlaXIgcmVzZWFyY2ggcHJvamVjdHMgKGUuZy4sIFtIb25vcnMgcHJvamVjdHNdKGh0dHBzOi8vZGV2cHN5bGFiLmdpdGh1Yi5pby9MYWJXaWtpL2hvbm9ycy5odG1sKSBhbmQgW1NST1AgcHJvamVjdHNdKGh0dHBzOi8vZGV2cHN5bGFiLmdpdGh1Yi5pby9MYWJXaWtpL2V4cGVjdGF0aW9ucy1TUk9QLmh0bWwpKSwgYmVjYXVzZSBgU1BTU2AgYW5kIFtgamFtb3ZpYF0oamFtb3ZpLmh0bWwpIGhhdmUgYSBwb2ludC1hbmQtY2xpY2sgaW50ZXJmYWNlLgogCiMgQ3JlYXRpbmcgYSBgU1BTU2AgU3ludGF4IEZpbGUgdG8gSW1wb3J0IGEgYC5jc3ZgIERhdGEgRmlsZSB7I2ltcG9ydH0KCkEgYC5jc3ZgIGZpbGUgaXMgYSAiY29tbWEtc2VwYXJhdGVkIHZhbHVlcyIgZmlsZeKAlGEgZmlsZSB3aG9zZSB2YWx1ZXMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMuClRoZSBsYWIgd2lsbCBwcm92aWRlIHlvdSB3aXRoIGEgYC5jc3ZgIGluIHlvdXIgbWVtYmVyIHVzZXIgZm9sZGVyLgpZb3Ugd2lsbCB0aGVuIG5lZWQgdG8gY3JlYXRlIGEgYFNQU1NgIHN5bnRheCBmaWxlIHRvIGltcG9ydCBhbmQgc2F2ZSB0aGUgZGF0YSBpbnRvIGBTUFNTYCBmb3JtYXQuIApUaGlzIGRhdGEgZmlsZSBpbXBvcnRzIHRoZSBkYXRhIGFuZCBvbmx5IG5lZWRzIHRvIGJlIHJ1biB3aGVuIHRoZXJlJ3MgYSBuZXcgZGF0YSBzZXQuCgoxLiBPcGVuIGBTUFNTYCBpbiB0aGUgc2VhcmNoIGJhcgoxLiBHbyB0byBmaWxlLCBvcGVuLCBkYXRhLCB0aGVuIHNlbGVjdCAuY3N2IGRhdGEKICAgLSBZb3UgbWlnaHQgaGF2ZSB0byBjaGFuZ2UgdGggZmlsZSB0eXBlIHRvICcuY3N2JyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0ICcuc2F2LicgaW4gb3JkZXIgZm9yIHRoZSBkZXNpcmVkIGZpbGVzIHRvIHNob3cgdXAKMS4gTmF2aWdhdGUgdG8gdGhlIGRlc2lyZWQgLmNzdiBmaWxlCjEuIFNlbGVjdCBkYXRhIGZpbGUgYW5kIHNlbGVjdCBwYXN0ZQoxLiBPbmNlIHRoZSBkYXRhIHByZXZpZXcgb3BlbnMsIHNlbGVjdCBwYXN0ZSBhZ2FpbgoxLiBBIGBTUFNTYCBzeW50YXggZmlsZSB3aWxsIG9wZW4sIHNlbGVjdCBzYXZlIGFzIGFuZCBtb3ZlIHRoZSBmaWxlIHRvIHRoZSBkZXNpcmVkIGxvY2F0aW9uCiAgICAtIHNhdmUgZmlsZSBhczogYGltcG9ydC5zcHNgCjEuIE9wZW4gdGhlIHN5bnRheCBmaWxlIGFuZCBtYWtlIHN1cmUgbGFiIHBhdGggaXMgc2F2ZWQgYXMgdGhlIGFic29sdXRlIGZpbGUgcGF0aCBpbiB0aGUgKGAvRklMRT1gKSBmaWVsZCAoKipub3QqKiBhIG1hcHBlZCBuZXR3b3JrIGRyaXZlIGxpa2UgYFI6YCkKICAgLSBgXFxsYy1ycy1zdG9yZTI0LmhwYy51aW93YS5lZHVcbHNzX2l0cGV0ZXJzZW5cTGFiXE1lbWJlcnNcSEFXS0lEXFRoZXNpc1xEYXRhXHNyc19pZFdhdmUuY3N2YAoxLiBUbyBydW4geW91ciBzY3JpcHQsIHNlbGVjdCBDVFJMIEEgIGFuZCBwcmVzcyB0aGUgZ3JlZW4gcGxheSBidXR0b24gdG8gcnVuIHRoZSBzY3JpcHQKMS4gSW4gdGhlIGltcG9ydCBzY3JpcHQsIGBTUFNTYCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHZhcmlhYmxlIGVhY2ggc2hvdWxkIGJlLCBidXQgaXQgZG9lcyBub3QgYWx3YXlzIGNsYXNzaWZ5IHRoZW0gY29ycmVjdGx5LgogICAtIEZvciBudW1lcmljIHZhcmlhYmxlcyB1c2VkIGluIGFuYWx5c2lzLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGNoYW5nZSB0aGUgdmFyaWFibGUgdG8gbnVtZXJpYwogICAtIGUuZy4sIChgdGNpZCBBVVRPYCkgdG8gIChgdGNpZCBGNC4yYCkKMS4gQXQgdGhpcyBwb2ludCwgdGhlIGRhdGEgZmlsZSBzaG91bGQgYXBwZWFyLgpOZXh0LCBzYXZlIHRoZSBkYXRhIGluIGBTUFNTYCBmb3JtYXQgKGAuc2F2YCkgd2l0aCB0aGUgYmVsb3cgc3RlcHM6CiAgIC0gT24gdGhlIG9wZW4gZGF0YSBmaWxlLCBzZWxlY3QgYHNhdmUgYXNgIGFuZCBgcGFzdGVgCiAgIC0gVGhpcyB3aWxsIGNvcHkgYW5kIHBhc3RlIHRoZSBzeW50YXggYXQgdGhlICoqZW5kIG9mIHRoZSBzeW50YXggZmlsZSoqIGluIHRoZSBpbXBvcnQgc2NyaXB0LgogICBUaGUgY29tcGxldGVkIGltcG9ydCBzY3JpcHQgd2lsbCBub3cgcmVhZCB0aGUgYC5jc3ZgIGZpbGUgYW5kIGNvbnZlcnQgaXQgdG8gYW4gYFNQU1NgIGRhdGEgZmlsZSAoYC5zYXZgKS4KICAgLSBBdCB0aGlzIHBvaW50LCB5b3UgY2FuIHByb2NlZWQgW2hlcmVdKCNhbmFseXNpcykgdG8gc3RhcnQgeW91ciBhbmFseXNpcyBzY3JpcHQhIAoKRXhhbXBsZSAoeW91IHdpbGwgbmVlZCB0byB1cGRhdGUgdGhlIGZpbGVwYXRoIHRvIHlvdXIgcGFydGljdWxhciBmaWxlcGF0aCk6CgpgYGAKR0VUIERBVEEgIC9UWVBFPVRYVAogIC9GSUxFPSJcXGxjLXJzLXN0b3JlMjQuaHBjLnVpb3dhLmVkdVxsc3NfaXRwZXRlcnNlblxMYWJcTWVtYmVyc1xIQVdLSURcVGhlc2lzXERhdGFcc3JzX2lkV2F2ZS5jc3YiCiAgL0VOQ09ESU5HPSdVVEY4JwogIC9ERUxJTUlURVJTPSIsIgogIC9RVUFMSUZJRVI9JyInCiAgL0FSUkFOR0VNRU5UPURFTElNSVRFRAogIC9GSVJTVENBU0U9MgogIC9EQVRBVFlQRU1JTiBQRVJDRU5UQUdFPTk1LjAKICAvVkFSSUFCTEVTPQogIHRjaWQgQVVUTwogIHdhdmUgQVVUTwogIHRjX3NleCBBVVRPCiAgdGNfYWdlTFYxIEY0LjIKICAvTUFQLgpSRVNUT1JFLgpDQUNIRS4KRVhFQ1VURS4KClNBVkUgT1VURklMRT0nXFxsYy1ycy1zdG9yZTI0LmhwYy51aW93YS5lZHVcbHNzX2l0cGV0ZXJzZW5cTGFiXE1lbWJlcnNcSEFXS0lEXFRoZXNpc1xEYXRhXHNyc19pZFdhdmUuc2F2JwogIC9DT01QUkVTU0VELgpgYGAKCiMgRGF0YSBNYW5hZ2VtZW50IHsjZGF0YU1hbmFnZW1lbnR9CgpBZGQgYW55IGRhdGEgbWFuYWdlbWVudC90cmFuc2Zvcm1hdGlvbnMgYXQgdGhlIGVuZCBvZiB5b3VyIGBpbXBvcnQuc3BzYCBmaWxlIChhZnRlciBpbXBvcnRpbmcgeW91ciBkYXRhKSwgc28geW91IHJlLXJ1biB0aGUgdHJhbnNmb3JtYXRpb25zIGVhY2ggdGltZSB5b3UgdXBkYXRlIHRoZSBkYXRhIGZpbGUuCgojIyBBdmVyYWdlIEFjcm9zcyBWYXJpYWJsZXMgeyNhdmVyYWdlVmFyc30KCmBgYApDT01QVVRFIGNiY2xfZXh0ZXJuYWxpemluZ1BPTV9BdmVyYWdlID0gTUVBTihjYmNsX2V4dGVybmFsaXppbmdQT01fRmF0aGVyLGNiY2xfZXh0ZXJuYWxpemluZ1BPTV9Nb3RoZXIsY2JjbF9leHRlcm5hbGl6aW5nUE9NX1NlY29uZGFyeSkuCkNPTVBVVEUgY2JxX2luaGliaXRvcnlDb250cm9sX0F2ZXJhZ2UgPSBNRUFOKGNicV9pbmhpYml0b3J5Q29udHJvbF9GYXRoZXIsY2JxX2luaGliaXRvcnlDb250cm9sX01vdGhlcixjYnFfaW5oaWJpdG9yeUNvbnRyb2xfU2Vjb25kYXJ5KS4KRVhFQ1VURS4KYGBgCgojIyBSZW5hbWUgVmFyaWFibGVzIHsjcmVuYW1lVmFyc30KCmBgYApSRU5BTUUgVkFSSUFCTEVTIChzZXNfaG9sbGluZ3NoZWFkU0VTID0gU0VTKS4KYGBgCgojIyBNZWFuLUNlbnRlciBWYXJpYWJsZXMgeyNtZWFuQ2VudGVyfQoKYGBgCkNPTVBVVEUgc2VzX2hvbGxpbmdzaGVhZFNFU19tYyA9IHNlc19ob2xsaW5nc2hlYWRTRVMgLSBtZWFuX3Nlcy4KQ09NUFVURSBhZGlfbmF0aW9uYWxSYW5rX21jID0gYWRpX25hdGlvbmFsUmFuayAtIG1lYW5fYWRpTi4KRVhFQ1VURS4KYGBgCgojIyBDb21wdXRlIEludGVyYWN0aW9uIFRlcm1zIHsjaW50ZXJhY3Rpb259CgpgYGAKQ09NUFVURSBzZXNfYWRpX2ludGVyYWN0aW9uID0gIHNlc19ob2xsaW5nc2hlYWRTRVNfbWMgKiBhZGlfbmF0aW9uYWxSYW5rX21jLgpFWEVDVVRFLgpgYGAKCiMjIFNhdmUgRGF0YSBGaWxlIHsjc2F2ZURhdGF9CgpgYGAKU0FWRSBPVVRGSUxFPSdcXGxjLXJzLXN0b3JlMjQuaHBjLnVpb3dhLmVkdVxsc3NfaXRwZXRlcnNlblxMYWJcTWVtYmVyc1xIQVdLSURcVGhlc2lzXERhdGFcc3JzX2lkV2F2ZS5zYXYnCiAgL0NPTVBSRVNTRUQuCmBgYAoKIyBDcmVhdGluZyBhIGBTUFNTYCBTeW50YXggRmlsZSBmb3IgQW5hbHlzaXMgeyNhbmFseXNpc30KCjEuIFRvIGNyZWF0ZSBhIG5ldyBzeW50YXggZmlsZSwgc2VsZWN0IGZpbGUgdGhlbiBuZXcgdGhlbiBzeW50YXgKICAgLSBTYXZlIGZpbGUgYXM6IGBkZXNjcmlwdGl2ZXMuc3BzYAoxLiBJbiB5b3VyIHN5bnRheCBmaWxlLCBjcmVhdGUgY29tbWVudHMgZm9yIHlvdXIgZGlmZmVyZW50IHR5cGVzIG9mIGFuYWx5c2VzLgogICAtIGUuZy4sIGZyZXF1ZW5jaWVzLCBkZXNjcmlwdGl2ZXMsIGNvcnJlbGF0aW9ucwoxLiBJbiB5b3VyIG5ldyBkYXRhIGZpbGUsIHNlbGVjdCBhbiBhbmFseXNpcyBhbmQgY2hvb3NlIHBhc3RlLgpJbiB5b3VyIGRlc3ByaXB0aXZlcyBzeW50YXggZmlsZSwgdGhlIGFuYWx5c2lzIHNob3VsZCBub3cgYmUgYWRkZWQuIEZvciBlYWNoIHN1YnNlcXVlbnQgYW5hbHlzaXMsIHNlbGVjdCBwYXN0ZSB0byBhZGQgaXQgdG8gdGhlIGRlc2NyaXB0aXZlcyBmaWxlIHVuZGVyIHRoZSBhcHByb3ByaWF0ZSBzeW50YXguCjEuIENyZWF0ZSBhIG5ldyBgU1BTU2Agc3ludGF4IGZpbGUgZm9yIHlvdXIgYW5hbHlzaXMuIEluIHRoaXMgc3ludGF4IGZpbGUsIGFkZCB5b3VyIGFuYWx5c2lzCiAgIC0gZS5nLiwgcmVncmVzc2lvbnMKCiMjIEZyZXF1ZW5jaWVzIHsjZnJlcXVlbmNpZXN9CgpgYGAKRlJFUVVFTkNJRVMgVkFSSUFCTEVTPXRjX3NleCB0Y19oaXNwYW5pYyB0Y19yYWNlIHRjX2V0aG5pY2l0eSAKICAvT1JERVI9QU5BTFlTSVMuCmBgYAoKIyMgRGVzY3JpcHRpdmVzIHsjZGVzY3JpcHRpdmVzfQoKYGBgCkRFU0NSSVBUSVZFUyBWQVJJQUJMRVM9SUNzaW0gSUNsaW0gSUNoZyBJQ2NicSBzZXNfaG9sbGluZ3NoZWFkU0VTIEFESU5hdCBFWFRCeCAKICAvU1RBVElTVElDUz1NRUFOIFNURERFViBNSU4gTUFYIEtVUlRPU0lTIFNLRVdORVNTLgpgYGAKCiMjIEhpc3RvZ3JhbXMgeyNoaXN0b2dyYW1zfQoKYGBgCkdSQVBICiAgL0hJU1RPR1JBTT1zZXNfaG9sbGluZ3NoZWFkU0VTLgpgYGAKCiMjIENvcnJlbGF0aW9ucyB7I2NvcnJlbGF0aW9uc30KCmBgYApDT1JSRUxBVElPTlMKICAvVkFSSUFCTEVTPXRjX2FnZUxWMSBzZXNfaG9sbGluZ3NoZWFkUGFyZW50IGNicV9pbmhpYml0b3J5Q29udHJvbF9BdmVyYWdlIAogICAgbGltX3Njb3JlRXhjbHVkaW5nUHJlZmVyZW5jZVBPTSBoZ19zY29yZVBPTSBzaW1fZ29Ybm9Hb1BPTSBjYmNsX2V4dGVybmFsaXppbmdQT01fQXZlcmFnZQogIC9QUklOVD1UV09UQUlMIE5PU0lHIEZVTEwKICAvTUlTU0lORz1QQUlSV0lTRS4KYGBgCgojIyBNdWx0aXBsZSBSZWdyZXNzaW9uIHsjbXVsdGlwbGVSZWdyZXNzaW9ufQoKYGBgClJFR1JFU1NJT04KL01JU1NJTkcgUEFJUldJU0UKL1NUQVRJU1RJQ1MgQ09FRkYgT1VUUyBSIEFOT1ZBCi9DUklURVJJQT1QSU4oLjA1KSBQT1VUKC4xMCkKL05PT1JJR0lOIAovREVQRU5ERU5UIG91dGNvbWUKL01FVEhPRD1FTlRFUiBwcmVkaWN0b3IxIHByZWRpY3RvcjIgcHJlZGljdG9yMy4KYGBgCgojIyBNZWRpYXRpb24geyNtZWRpYXRpb259CgpGaXJzdCwgZG93bmxvYWQgYW5kIHJ1biB0aGUgW2BQUk9DRVNTYCBtYWNyb10oaHR0cHM6Ly93d3cucHJvY2Vzc21hY3JvLm9yZy9kb3dubG9hZC5odG1sKS4KCkJlbG93IGlzIHRoZSBzeW50YXggZm9yIGEgbW9kZWwgd2l0aG91dCBjb3ZhcmlhdGVz4oCUcmVwbGFjZSBgb3V0Y29tZWAgd2l0aCBuYW1lIG9mIG91dGNvbWUgdmFyaWFibGUsIGBwcmVkaWN0b3JgIHdpdGggbmFtZSBvZiBwcmVkaWN0b3IgdmFyaWFibGUsIGFuZCBgbWVkaWF0b3JgIHdpdGggbmFtZSBvZiBtZWRpYXRpbmcgdmFyaWFibGU6CgpgYGAKUFJPQ0VTUyAKICB5PW91dGNvbWUKICAveD1wcmVkaWN0b3IKICAvbT1tZWRpYXRvcjEgbWVkaWF0b3IyIG1lZGlhdG9yMwogIC9tb2RlbD00CiAgL3RvdGFsPTEKICAvZWZmc2l6ZT0xCiAgL3N0YW5kPTEKICAvYm9vdD0xMDAwMAogIC4KYGBgCgpNb2RlbCB3aXRoIGNvdmFyaWF0ZXMgKHAuIDEyNik6CgpgYGAKUFJPQ0VTUyAKICB5PW91dGNvbWUKICAveD1wcmVkaWN0b3IKICAvbT1tZWRpYXRvcjEgbWVkaWF0b3IyIG1lZGlhdG9yMwogIC9jb3Y9Y292YXJpYXRlMSBjb3ZhcmlhdGUyIGNvdmFyaWF0ZTMKICAvbW9kZWw9NAogIC90b3RhbD0xCiAgL2VmZnNpemU9MQogIC9zdGFuZD0xCiAgL2Jvb3Q9MTAwMDAKICAuCmBgYAoKIyMgTW9kZXJhdGlvbiB7I21vZGVyYXRpb259CgoxLiBDYWxjdWxhdGUgbWVhbnMgb2YgdGhlIHByZWRpY3RvciBhbmQgbW9kZXJhdG9yCiAgIGBgYAogICBhZ2dyZWdhdGUgb3V0ZmlsZSAqIG1vZGUgYWRkdmFyaWFibGVzCiAgIC9wcmVkaWN0b3JfbWVhbiA9IG1lYW4ocHJlZGljdG9yKS4KCiAgIGFnZ3JlZ2F0ZSBvdXRmaWxlICogbW9kZSBhZGR2YXJpYWJsZXMKICAgL21vZGVyYXRvcl9tZWFuID0gbWVhbihtb2RlcmF0b3IpLgogICBgYGAKMS4gTWVhbi1jZW50ZXIgdGhlIHByZWRpY3RvciBhbmQgbW9kZXJhdG9yCiAgIGBgYAogICBjb21wdXRlIHByZWRpY3Rvcl9NQyA9IHByZWRpY3RvciAtIHByZWRpY3Rvcl9tZWFuLgogICBjb21wdXRlIG1vZGVyYXRvcl9NQyA9IG1vZGVyYXRvciAtIG1vZGVyYXRvcl9tZWFuLgogICBleGVjdXRlLgogICBgYGAKMS4gVmVyaWZ5IHRoYXQgcHJlZGljdG9yIGFuZCBtb2RlcmF0b3IgYXJlIG1lYW4tY2VudGVyZWQgKGkuZS4sIGhhdmUgYSBtZWFuIG9mIHplcm8pCiAgIGBgYAogICBERVNDUklQVElWRVMgVkFSSUFCTEVTPXByZWRpY3RvciBtb2RlcmF0b3IgcHJlZGljdG9yX01DIG1vZGVyYXRvcl9NQwogICAvU1RBVElTVElDUz1NRUFOIFNURERFViBNSU4gTUFYLgogICBgYGAKMS4gQ3JlYXRlIHRoZSBpbnRlcmFjdGlvbiB0ZXJtcwogICBgYGAKICAgY29tcHV0ZSBwcmVkaWN0b3JYbW9kZXJhdG9yID0gcHJlZGljdG9yX01DICogbW9kZXJhdG9yX01DLgogICBleGVjdXRlLgogICBgYGAKMS4gUnVuIG1vZGVyYXRlZCBtdWx0aXBsZSByZWdyZXNzaW9uIG1vZGVsCiAgIGBgYAogICBSRUdSRVNTSU9OCiAgIC9NSVNTSU5HIFBBSVJXSVNFCiAgIC9TVEFUSVNUSUNTIENPRUZGIE9VVFMgUiBBTk9WQQogICAvQ1JJVEVSSUE9UElOKC4wNSkgUE9VVCguMTApCiAgIC9OT09SSUdJTiAKICAgL0RFUEVOREVOVCBvdXRjb21lCiAgIC9NRVRIT0Q9RU5URVIgcHJlZGljdG9yX01DIG1vZGVyYXRvcl9NQyBwcmVkaWN0b3JYbW9kZXJhdG9yIGNvdmFyaWF0ZTEgY292YXJpYXRlMi4KICAgYGBgCjEuIENyZWF0ZSBwbG90IG9mIGludGVyYWN0aW9uCiAgIC0gc2VlIE1jQ2FiZSBldCBhbC4gKDIwMTgpIGFuZCBmb2xsb3dpbmcgbGlua3M6CiAgICAgIC0gaHR0cHM6Ly9naXRodWIuY29tL2Nvbm5vcmptY2NhYmUvSW50ZXJBY3RpdmUKICAgICAgLSBodHRwczovL2Nvbm5vcmptY2NhYmUuc2hpbnlhcHBzLmlvL2ludGVyYWN0aXZlLyAoYXJjaGl2ZWQgYXQgaHR0cHM6Ly9wZXJtYS5jYy85M0c2LUFMRFApCgojIEJlc3QgUHJhY3RpY2VzIHsjYmVzdFByYWN0aWNlc30KCiAtIFVzZSBgU1BTU2Agc3ludGF4IGZpbGVzIChgLnNwc2ApIGZvciBwZXJmb3JtaW5nIGFsbCBjb21tYW5kcywgaW5jbHVkaW5nIFtpbXBvcnRpbmcgZGF0YV0oI2ltcG9ydCksIGNvbXB1dGluZyB2YXJpYWJsZXMsIHJlY29kaW5nIHZhcmlhYmxlcywgcnVubmluZyBhbmFseXNlcywgZXRjLgogVGhlIGJlbmVmaXQgb2YgdXNpbmcgYFNQU1NgIHN5bnRheCBmaWxlcyAoYW5kIGNvZGUtYmFzZWQgZmlsZXMsIG1vcmUgZ2VuZXJhbGx5KSBpcyB0aGF0IHRoZXkgYWxsb3cgeW91IHRvIHJlcHJvZHVjZSB5b3VyIGZpbmRpbmdzIGFnYWluIHdpdGggdGhlIHNhbWUgZGF0YSBmaWxlLgogVGhpcyBpcyBpbXBvcnRhbnQgc28geW91IGRvIG5vdCBoYXZlIHRvIHJlbWVtYmVyIGFsbCBvZiB0aGUgc3RlcHMgeW91IGZvbGxvd2VkIHRvIGdlbmVyYXRlIHRoZSBhbmFseXNpcy4KIFRoaXMgYWxzbyBhbGxvd3MgeW91IHRvIHF1aWNrbHkgcmUtcnVuIHRoZSBhbmFseXNpcyBpZiB0aGUgZGF0YSBmaWxlIGlzIHVwZGF0ZWQgZHVlIHRvIHRoZSBjb2xsZWN0aW9uIG9mIG1vcmUgZGF0YS4KIElmIHlvdSBhcmUgdW5zdXJlIHdoYXQgYFNQU1NgIGNvbW1hbmQgaXMgbmVlZGVkLCBydW4gdGhlIGNvbW1hbmQgdmlhICJwb2ludCBhbmQgY2xpY2siIGluIHRoZSBpbnRlcmZhY2U7IGhvd2V2ZXIsIGluc3RlYWQgb2YgY2xpY2tpbmcgIk9LIiwgY2xpY2sgIlBhc3RlIi4KIFRoaXMgd2lsbCBwYXN0ZSB0aGUgc3ludGF4IHRoYXQgaXMgdXNlZCB0byBydW4gdGhlIGNvbW1hbmQgaW50byBhIHN5bnRheCBmaWxlLgogICAgLSBIYXZlIG9uZSBzeW50YXggZmlsZSBmb3IgaW1wb3J0aW5nIGRhdGEsIGNvbXB1dGluZyBjb21wb3NpdGVzLCByZWNvZGluZyB2YXJpYWJsZXMsIGFuZCBzYXZpbmcgZGF0YSAoZS5nLiwgYGltcG9ydC5zcHNgKS4KICAgIC0gSGF2ZSBhIHNlcGFyYXRlIHN5bnRheCBmaWxlIGZvciBnZW5lcmF0aW5nIGZyZXF1ZW5jaWVzLCBkZXNjcmlwdGl2ZSBzdGF0aXN0aWNzLCBhbmQgY29ycmVsYXRpb24gbWF0cmljZXMgKGUuZy4sIGBkZXNjcmlwdGl2ZXMuc3BzYCkuCiAgICAtIEhhdmUgYSBzZXBhcmF0ZSBzeW50YXggZmlsZSBmb3IgcnVubmluZyBhbmFseXNlcyAoZS5nLiwgYGFuYWx5c2VzLnNwc2ApLgogICAgLSBDb21tZW50IHlvdXIgc3ludGF4IGZyZXF1ZW50bHkKICAgICAgIC0gdG8gY29tbWVudCB1c2UgdGhlIGZvbGxvd2luZyBjb252ZW50aW9uOgogICAgICAgICAgLSBgKnR5cGUgY29tbWVudC5gCiAgICAtIFNhdmUgeW91ciBzeW50YXggZnJlcXVlbnRseQo=