Skip to content

Instantly share code, notes, and snippets.

@sean-smith
Last active April 2, 2021 23:50
Show Gist options
  • Save sean-smith/0a947c6af987c3f35b12d0aa3b995fa1 to your computer and use it in GitHub Desktop.
Save sean-smith/0a947c6af987c3f35b12d0aa3b995fa1 to your computer and use it in GitHub Desktop.
LS-Dyna Setup on SOCA

Setup LS-Dyna on SOCA 2.6.1

Part 1: LS-Dyna Installation

  1. First download the correct binary,

You can download the LS-Dyna binaries here (password protected): https://ftp.lstc.com/user/mpp-dyna/

Screen Shot 2021-04-02 at 4 45 41 PM

Note: You'll want to make sure you're using the MPP binaries and not the SMP ones for multi-instance runs. These are contained in two seperate folders on the FTP server. Navigate to mpp-dyna/ instead of ls-dyna/ to grab them.

You'll need to download two files, as shown in the example below, you'll need the binary as well as the sharelib for each version you want. In this example I'm using Intel MPI 4.1.3 but the same applies for Open MPI.

$ cd /fsx
$ mkdir -p ls-dyna && cd ls-dyna
$ wget https://ftp.lstc.com/user/mpp-dyna/R11.0.0/x86-64/ifort_160_avx2/ls-dyna_mpp_s_R11_0_0_x64_centos65_ifort160_avx2_intelmpi-413_sharelib.tar.gz_extractor.sh --user user --password computer
$ wget https://ftp.lstc.com/user/mpp-dyna/R11.0.0/x86-64/ifort_160_avx2/ls-dyna_mpp_s_R11_0_0_x64_centos65_ifort160_avx2_intelmpi-413.tar.gz_extractor.sh --user user --password computer
  1. Install LS-Dyna by running the extractor script in the /fsx/ls-dyna directory. This will open the terms and conditions, type 'q' to continue and then select 'y' to agree then 'n' to not create a new folder.
$ bash ls-dyna_mpp_s_R11_0_0_x64_centos65_ifort160_avx2_intelmpi-413_sharelib.tar.gz_extractor.sh
# you should now see the extracted file, make sure to copy this path for later use.
$ ls 
ls-dyna_mpp_s_r7_1_3_107967_x64_redhat54_ifort131_avx2_intelmpi-413

Part 2: SOCA Setup

  1. Import the application profile by going to Application Management > Import/Export, then download the file linked here (Ctrl+S or Command+S) as soca_app_LS-Dyna.json and upload it like so:

99740958-e02c9580-2a84-11eb-91b8-eb40c589e555

Optional: wget https://gist.githubusercontent.com/sean-smith/0a947c6af987c3f35b12d0aa3b995fa1/raw/b713fd8560b728c74dfd44829b3ce87e43d243b4/soca_app_LS-Dyna.json

  1. Navigate to Application Management > Edit Application Profile > LS-Dyna > Step 1: Design the form

Change the following values in the GUI form:

  • binary_location point this to the path of the LS-Dyna install, see step 1
  • scratch_location make sure you have /fsx mounted
  • MPI Install MPI as a module file on an ami
  • fsx_id Make sure this is a valid FSx filesystem in your account
  • custom_ami this AMI needs to have intelmpi/openmpi (depending on what you're using) installed. See below

image

  1. Create a file /apps/lstc/license on the scheduler instance for the license server that contains the following:
#LICENSE_TYPE:network
#LICENSE_SERVER:31111@10.0.0.1

Submit your first job

  1. Create a directory in the home directory with the .key file(s). This is important as the first step in the script is to copy that entire directory up to /fsx and then it runs the job from there.
  2. Submit the job, you can use the web based simulator and submit it as follows:

Screen Shot 2021-02-23 at 11 32 46 AM

Input Parameters

Once you choose your input files, you’ll be presented with a screen that looks like:

  1. Choose Compute most of the time. this is a c5.24xlarge instance. It has 48 cores and 192 GB of RAM.
  2. Change the number of cores but make sure it’s a multiple of 48 (to utilize all the cores on the instance)
  3. You can change the job name to suite your liking, it defaults to the input file name. This will change the output directory as well. Job output is written to: /fsx/[job_name]_[jobid]_[host]
  4. Input Location: Leave as is.
  5. Queue: Use On Demand this ensure the instances are launched when your job is submitted then terminated when the job exits. The “Always On” queue is for debugging application configuration and is beyond the scope of this guide.
  6. Application Parameters:
    1. Binary Location: Select the version you want to run. Note we’ve benchmarked a bunch of different binaries and found that the best binaries are 9.3.1 for version 9 and 7.1.3 for version 7. See table below for different versions.
    2. Memory: Leave this as 2G. This is the decomposition memory.
    3. Memory 2: Leave this as 400M
    4. Scratch Location: Leave this as /fsx
    5. Version of MPI: Change this to match the binary’s MPI version. This must match!

Input Parameters

View job progress

After you submit you'll be taken to a screen with a job queue, the job will be in submitted, before it goes to capacity provisioning then running. If it doesn't start see this page.

108901938-57b41880-75d0-11eb-86b6-d8e0d75977a8

View the job output

  1. Navigate to /fsx and search by the job ID:

108902030-70bcc980-75d0-11eb-8376-3624d4452ab1

  1. Go to the folder it created. You'll see a bunch of files, runtime info is contained in output.log, click "view or edit icon on that page to see the results:

image

  1. In the output.log you'll see:

image

Appendix

PBS Script

Note this is what gets added by the JSON file, however if you need to use it independent of SOCA or without the GUI, you can start with this script.

#!/bin/bash
#PBS -N %job_name%
#PBS -P %project_name%
# https://awslabs.github.io/scale-out-computing-on-aws/tutorials/integration-ec2-job-parameters/
#PBS -l instance_type=%instance_type%
#PBS -l instance_ami=%custom_ami%
#PBS -l ht_support=False
#PBS -l fsx_lustre=%fsx_id%
#PBS -q %queue_name%
#PBS -l system_metrics=True

INPUT_FILE=%input_file%

SCRATCH=%scratch_location%

# Create Working Directory
TMP_DIR=${SCRATCH}/${PBS_JOBNAME}_${PBS_JOBID}
mkdir -p $TMP_DIR
cp -R $(dirname "${INPUT_FILE}")/* $TMP_DIR
cd $TMP_DIR

# MPI Variables
export OMP_DYNAMIC=off
export KMP_AFFINITY="granularity=thread,balanced"
export I_MPI_FALLBACK=0
export I_MPI_PIN_PROCS=allcores
export I_MPI_PIN_MODE=lib
export I_MPI_EAGER_THRESHOLD=134000
export I_MPI_PIN_AFFINITY=sock
export I_MPI_ADJUST_COLLECTIVES="bcast:1\;alltoall:1\;allreduce:1-1024,2-500000"
export I_MPI_PIN_DOMAIN=omp

####### LICENSE ##########
export LSTC_FILE="/apps/lstc/license"
####### LICENSE ##########

cores=%cpus%
instances=$(cat $PBS_NODEFILE | uniq | wc -l)
ppn=$(echo ${cores}/${instances} | bc)
memory=%memory%
memory2=%memory2%
mpi=%mpi_version%

module load $mpi

if [[ $mpi =~ "intelmpi" ]]
then
   mpiargs="-n ${cores} -ppn ${ppn} -hostfile $PBS_NODEFILE"
elif [[ $mpi =~ "openmpi/1.5.1" ]]
then
   mpiargs="-np ${cores} -hostfile $PBS_NODEFILE"
else
   mpiargs="-np ${cores} --map-by ppr:${ppn}:node -hostfile $PBS_NODEFILE --nooversubscribe"
fi

echo "MPI=$mpi" >> output.log
echo "BINARY=%binary_location%" >> output.log
echo "INSTANCES=${instances}" >> output.log
echo "MPIARGS=${mpiargs}" >> output.log

$(which mpirun) ${mpiargs} %binary_location% I=%input_file% MEMORY=${memory} MEMORY2=${memory2} NCPU=${cores} >> output.log 2>&1

# Copy data back to /fsx
if [ $SCRATCH != "/fsx" ]
then
  echo "Writing output to /fsx/$TMPDIR"
  cp -R $TMP_DIR /fsx
fi

Install IntelMPI on a custom AMI:

2019.7

#!/bin/bash
sudo su -

INTELMPI_VERSION="2019.7.217"
INTELMPI_URL="https://registrationcenter-download.intel.com/akdlm/irc_nas/tec/16546/l_mpi_2019.7.217.tgz"
INTELMPI_VERSION='2019.7.217'
INTELMPI_MODULEFILE="/opt/intel/impi/${INTELMPI_VERSION}/intel64/modulefiles/mpi"
INTELMPI_MODULEFILE_DIR="/opt/intel/impi/${INTELMPI_VERSION}/intel64/modulefiles"

wget $INTELMPI_URL
tar -xf l_mpi_$INTELMPI_VERSION.tgz
cd l_mpi_$INTELMPI_VERSION/
./install.sh -s silent.cfg --accept_eula

# create modulefile
mv $INTELMPI_MODULEFILE $INTELMPI_MODULEFILE_DIR/intelmpi
echo "$INTELMPI_MODULEFILE_DIR" >> /usr/share/Modules/init/.modulespath

exit

Install Open MPI on a custom AMI:

sudo yum update -y
curl -O https://efa-installer.amazonaws.com/aws-efa-installer-latest.tar.gz
tar -xf aws-efa-installer-latest.tar.gz
cd aws-efa-installer
sudo ./efa_installer.sh -y
{"Instructions:": "https://awslabs.github.io/scale-out-computing-on-aws/web-interface/import-export-application-profiles", "profile_form": "WwogIHsKICAgICJ0eXBlIjogImhlYWRlciIsCiAgICAic3VidHlwZSI6ICJoNCIsCiAgICAibGFiZWwiOiAiUmVjb21tZW5kZWQgUGFyYW1ldGVycyIKICB9LAogIHsKICAgICJ0eXBlIjogInNlbGVjdCIsCiAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgImxhYmVsIjogIldoYXQgdHlwZSBvZiBpbnN0YW5jZSBkbyB5b3Ugd2FudCB0byB1c2U/IChpbnN0YW5jZV90eXBlKSIsCiAgICAiZGVzY3JpcHRpb24iOiAiRUMyIGluc3RhbmNlIHR5cGUgdG8gcHJvdmlzaW9uLiBUaGlzIHdpbGwgYmUgdXNlZCBhbG9uZyB3aXRoIGNwdXMgdG8gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2Ygbm9kZXMgdG8gcHJvdmlzaW9uIiwKICAgICJjbGFzc05hbWUiOiAiZm9ybS1jb250cm9sIiwKICAgICJuYW1lIjogImluc3RhbmNlX3R5cGUiLAogICAgInZhbHVlcyI6IFsKICAgICAgewogICAgICAgICJsYWJlbCI6ICJDb21wdXRlIE9wdGltaXplZCAoYzUuMjR4bGFyZ2UpICg0OCBDUFVzLCAxOTJHQiBSQU0pIiwKICAgICAgICAidmFsdWUiOiAiYzUuMjR4bGFyZ2UiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAibGFiZWwiOiAiQ29tcHV0ZSBPcHRpbWl6ZWQgQU1EIChjNWEuMjR4bGFyZ2UpICg0OCB2Y3B1cywgMTkyIEdCIFJBTSkgKHVzZSBvbiBub24tYXZ4MikiLAogICAgICAgICJ2YWx1ZSI6ICJjNWEuMjR4bGFyZ2UiCiAgICAgIH0KICAgIF0KICB9LAogIHsKICAgICJ0eXBlIjogInRleHQiLAogICAgInJlcXVpcmVkIjogdHJ1ZSwKICAgICJsYWJlbCI6ICJIb3cgbWFueSBDUFVzIGRvIHlvdSB3YW50ID8gKGNwdXMpIiwKICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgQ1BVcyB0byBhbGxvY2F0ZSB0byB0aGUgc2ltdWxhdGlvbi4gVGhpcyB3aWxsIGJlIHVzZWQgYWxvbmcgd2l0aCBpbnN0YW5jZV90eXBlIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIG5vZGVzIHRvIHByb3Zpc2lvbiIsCiAgICAicGxhY2Vob2xkZXIiOiAiTnVtYmVyIG9mIEVDMiBpbnN0YW5jZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY2FsY3VsYXRlZCBiYXNlZCBvbiBJbnN0YW5jZSBUeXBlIGFuZCBDUFVzIGNvdW50IiwKICAgICJjbGFzc05hbWUiOiAiZm9ybS1jb250cm9sIiwKICAgICJuYW1lIjogImNwdXMiLAogICAgInZhbHVlIjogIjQ4IiwKICAgICJzdWJ0eXBlIjogInRleHQiLAogICAgIm1heGxlbmd0aCI6IDI1NQogIH0sCiAgewogICAgInR5cGUiOiAidGV4dCIsCiAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgImxhYmVsIjogIkpvYiBOYW1lIChqb2JfbmFtZSkiLAogICAgInBsYWNlaG9sZGVyIjogIkRvIG5vdCB1c2Ugc3BhY2VzIiwKICAgICJjbGFzc05hbWUiOiAiZm9ybS1jb250cm9sIiwKICAgICJuYW1lIjogImpvYl9uYW1lIiwKICAgICJzdWJ0eXBlIjogInRleHQiLAogICAgIm1heGxlbmd0aCI6IDI1NQogIH0sCiAgewogICAgInR5cGUiOiAidGV4dCIsCiAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgImxhYmVsIjogIklucHV0IGxvY2F0aW9uIChpbnB1dF9maWxlKSIsCiAgICAiZGVzY3JpcHRpb24iOiAiaW5wdXRfZmlsZSBpcyBhIHJlc2VydmVkIG5hbWUgb24gU09DQS4gVGhlIHZhbHVlIHdpbGwgYXV0b21hdGljYWxseSBiZSByZXBsYWNlZCBieSB0aGUgaW5wdXQgbG9jYXRpb24gcHJvdmlkZWQgYnkgdGhlIHVzZXIuIFlvdSBNVVNUIGhhdmUgaXQgYW5kIHBhcmFtZXRlciBuYW1lIE1VU1QgYmUgaW5wdXRfbmFtZSIsCiAgICAicGxhY2Vob2xkZXIiOiAiKERvIG5vdCBkZWxldGUpIFRoaXMgZW50cnkgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHByZS1wb3B1bGF0ZWQgd2l0aCB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaW5wdXQgZmlsZS4iLAogICAgImNsYXNzTmFtZSI6ICJmb3JtLWNvbnRyb2wiLAogICAgIm5hbWUiOiAiaW5wdXRfZmlsZSIsCiAgICAic3VidHlwZSI6ICJ0ZXh0IiwKICAgICJtYXhsZW5ndGgiOiAyNTUKICB9LAogIHsKICAgICJ0eXBlIjogInNlbGVjdCIsCiAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgImxhYmVsIjogIkRvIHlvdSB3YW50IHRvIGxpbWl0IGhvdyBsb25nIHRoZSBqb2Igd2lsbCBiZSBydW5uaW5nPyAod2FsbF90aW1lKSIsCiAgICAiZGVzY3JpcHRpb24iOiAiVXNlIEhIOk1NOlNTIGZvcm1hdCAoaG91cnM6bWludXRlczpzZWNvbmRzKS4gRm9yIGV4YW1wbGUgOTAgbWludXRlcyBpcyAwMDo5MDowMCBvciAwMTozMDowMCIsCiAgICAiY2xhc3NOYW1lIjogImZvcm0tY29udHJvbCIsCiAgICAibmFtZSI6ICJ3YWxsX3RpbWUiLAogICAgInZhbHVlcyI6IFsKICAgICAgewogICAgICAgICJsYWJlbCI6ICJObyBtb3JlIHRoYW4gMSBob3VyIiwKICAgICAgICAidmFsdWUiOiAiMDE6MDA6MDAiLAogICAgICAgICJzZWxlY3RlZCI6IHRydWUKICAgICAgfSwKICAgICAgewogICAgICAgICJsYWJlbCI6ICJObyBtb3JlIHRoYW4gNSBob3VycyIsCiAgICAgICAgInZhbHVlIjogIjA1OjAwOjAwIgogICAgICB9LAogICAgICB7CiAgICAgICAgImxhYmVsIjogIk5vIG1vcmUgdGhhbiAxIGRheSIsCiAgICAgICAgInZhbHVlIjogIjI0OjAwOjAwIgogICAgICB9LAogICAgICB7CiAgICAgICAgImxhYmVsIjogIk5vIG1vcmUgdGhhbiAxIG1vbnRoIiwKICAgICAgICAidmFsdWUiOiAiNzQwOjAwOjAwIgogICAgICB9CiAgICBdCiAgfSwKICB7CiAgICAidHlwZSI6ICJzZWxlY3QiLAogICAgInJlcXVpcmVkIjogdHJ1ZSwKICAgICJsYWJlbCI6ICJXaGF0IHF1ZXVlIGRvIHlvdSB3YW50IHRvIHVzZT8gKHF1ZXVlX25hbWUpIiwKICAgICJjbGFzc05hbWUiOiAiZm9ybS1jb250cm9sIiwKICAgICJuYW1lIjogInF1ZXVlX25hbWUiLAogICAgInZhbHVlcyI6IFsKICAgICAgewogICAgICAgICJsYWJlbCI6ICJPbiBEZW1hbmQiLAogICAgICAgICJ2YWx1ZSI6ICJub3JtYWwiLAogICAgICAgICJzZWxlY3RlZCI6IHRydWUKICAgICAgfSwKICAgICAgewogICAgICAgICJsYWJlbCI6ICJBbHdheXMgT24iLAogICAgICAgICJ2YWx1ZSI6ICJhbHdheXNvbiIKICAgICAgfQogICAgXQogIH0sCiAgewogICAgInR5cGUiOiAiaGlkZGVuIiwKICAgICJuYW1lIjogImZzeF9pZCIsCiAgICAidmFsdWUiOiAiZnMtMDJlZDk5NzBlYWQ0NGNiMGIuZnN4LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIgogIH0sCiAgewogICAgInR5cGUiOiAiaGlkZGVuIiwKICAgICJuYW1lIjogImN1c3RvbV9hbWkiLAogICAgInZhbHVlIjogImFtaS0wZjY1ZTIwYTJmZjIyNWQyZSIKICB9LAogIHsKICAgICJ0eXBlIjogImhlYWRlciIsCiAgICAic3VidHlwZSI6ICJoNCIsCiAgICAibGFiZWwiOiAiQXBwbGljYXRpb24gcGFyYW1ldGVycyIKICB9LAogIHsKICAgICJ0eXBlIjogInNlbGVjdCIsCiAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgImxhYmVsIjogIldoYXQgdmVyc2lvbiBvZiB0aGUgc29sdmVyIGRvIHlvdSB3YW50IHRvIHVzZSA/IChiaW5hcnlfbG9jYXRpb24pIiwKICAgICJkZXNjcmlwdGlvbiI6ICJQYXRoIHRvIHRoZSBzb2x2ZXIgZXhlY3V0YWJsZS9iaW5hcnkuIEl0J3MgdXN1YWxseSBsb2NhdGVkIHdpdGhpbiB0aGUgXCJiaW5cIiBmb2xkZXIgb2YgeW91ciBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IiwKICAgICJjbGFzc05hbWUiOiAiZm9ybS1jb250cm9sIiwKICAgICJuYW1lIjogImJpbmFyeV9sb2NhdGlvbiIsCiAgICAidmFsdWVzIjogWwogICAgICB7CiAgICAgICAgImxhYmVsIjogIjcuMS4zICsgYXZ4MiArb3Blbm1waSAxLjguMyAobGF0ZXN0KSIsCiAgICAgICAgInZhbHVlIjogIi9hcHBzL3NvZnR3YXJlL3ZlcnNpb24yMDIwL2Jpbi9zb2x2ZXIuZXhlIgogICAgICB9LAogICAgICB7CiAgICAgICAgImxhYmVsIjogIjkuMy4xICsgYXZ4MiArb3Blbm1waSAxLjguMyAoZmFzdGVzdCkiLAogICAgICAgICJ2YWx1ZSI6ICIvYXBwcy9zb2Z0d2FyZS92ZXJzaW9uQkVUQS9iaW4vc29sdmVyLmV4ZSIKICAgICAgfQogICAgXQogIH0sCiAgewogICAgInR5cGUiOiAicGFyYWdyYXBoIiwKICAgICJzdWJ0eXBlIjogInAiLAogICAgImxhYmVsIjogIkZvciBkb2N1bWVudGF0aW9uLCBwbGVhc2UgcmVmZXIgdG8gPGEgaHJlZj1cIiNcIj53aWtpLm15Y29tcGFueS50bGQvZG9jdW1lbnRhdGlvbi9ob3ctdG8tbGF1bmNoLXRoaXMtYXBwbGljYXRpb248L2E+IgogIH0sCiAgewogICAgInR5cGUiOiAidGV4dCIsCiAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgImxhYmVsIjogIk1lbW9yeSAxPyAobWVtb3J5KSIsCiAgICAicGxhY2Vob2xkZXIiOiAiRW50ZXIgdmFsdWUgZm9yIHBhcmFtMSIsCiAgICAiY2xhc3NOYW1lIjogImZvcm0tY29udHJvbCIsCiAgICAibmFtZSI6ICJwYXJhbTEiLAogICAgInZhbHVlIjogIjJHQiIsCiAgICAic3VidHlwZSI6ICJ0ZXh0IgogIH0sCiAgewogICAgInR5cGUiOiAidGV4dCIsCiAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgImxhYmVsIjogIk1lbW9yeSAyPyAobWVtb3J5MikiLAogICAgInBsYWNlaG9sZGVyIjogIkVudGVyIHZhbHVlIGZvciBwYXJhbTIiLAogICAgImNsYXNzTmFtZSI6ICJmb3JtLWNvbnRyb2wiLAogICAgIm5hbWUiOiAibWVtb3J5MiIsCiAgICAidmFsdWUiOiAiNDAwTSIsCiAgICAic3VidHlwZSI6ICJ0ZXh0IgogIH0sCiAgewogICAgInR5cGUiOiAic2VsZWN0IiwKICAgICJyZXF1aXJlZCI6IGZhbHNlLAogICAgImxhYmVsIjogIjxsYWJlbCBmb3I9XCJtcGlfdmVyc2lvblwiIGNsYXNzPVwiZm9ybWJ1aWxkZXItc2VsZWN0LWxhYmVsXCI+V2hhdCB2ZXJzaW9uIG9mIE1QSSBkbyB5b3Ugd2FudCB0byB1c2U/IChtcGlfdmVyc2lvbik8c3BhbiBjbGFzcz1cImZvcm1idWlsZGVyLXJlcXVpcmVkXCI+Kjwvc3Bhbj48c3BhbiBjbGFzcz1cInRvb2x0aXAtZWxlbWVudFwiIHRvb2x0aXA9XCJDaG9vc2UgYmV0d2VlbiBPcGVuIE1QSSBhbmQgSW50ZWwgTVBJLiBVc2UgT3BlbiBNUEkgMS41LjEgZm9yIDcuMC4wIGFuZCAxLjguMyBmb3IgOS4xLjFcIj4/PC9zcGFuPjwvbGFiZWw+IiwKICAgICJjbGFzc05hbWUiOiAiZm9ybS1jb250cm9sIiwKICAgICJuYW1lIjogIm1waV92ZXJzaW9uIiwKICAgICJ2YWx1ZXMiOiBbCiAgICAgIHsKICAgICAgICAibGFiZWwiOiAiT3Blbk1QSSAxLjguMyIsCiAgICAgICAgInZhbHVlIjogIm9wZW5tcGkvMS44LjMiLAogICAgICAgICJzZWxlY3RlZCI6IHRydWUKICAgICAgfSwKICAgICAgewogICAgICAgICJsYWJlbCI6ICJJbnRlbCBNUEkgMjAxOS43IiwKICAgICAgICAidmFsdWUiOiAiaW50ZWxtcGkiCiAgICAgIH0KICAgIF0KICB9LAogIHsKICAgICJ0eXBlIjogInRleHQiLAogICAgInJlcXVpcmVkIjogdHJ1ZSwKICAgICJsYWJlbCI6ICJTY3JhdGNoIExvY2F0aW9uPyAoc2NyYXRjaF9sb2NhdGlvbikiLAogICAgImNsYXNzTmFtZSI6ICJmb3JtLWNvbnRyb2wiLAogICAgIm5hbWUiOiAic2NyYXRjaF9sb2NhdGlvbiIsCiAgICAidmFsdWUiOiAiL2ZzeCIsCiAgICAic3VidHlwZSI6ICJ0ZXh0IgogIH0KXQ==", "profile_job": "CgoKIyEvYmluL2Jhc2gKI1BCUyAtTiAlam9iX25hbWUlCiNQQlMgLVAgJXByb2plY3RfbmFtZSUKIyBodHRwczovL2F3c2xhYnMuZ2l0aHViLmlvL3NjYWxlLW91dC1jb21wdXRpbmctb24tYXdzL3R1dG9yaWFscy9pbnRlZ3JhdGlvbi1lYzItam9iLXBhcmFtZXRlcnMvCiNQQlMgLWwgaW5zdGFuY2VfdHlwZT0laW5zdGFuY2VfdHlwZSUKI1BCUyAtbCBpbnN0YW5jZV9hbWk9JWN1c3RvbV9hbWklCiNQQlMgLWwgaHRfc3VwcG9ydD1GYWxzZQojUEJTIC1sIGZzeF9sdXN0cmU9JWZzeF9pZCUKI1BCUyAtcSAlcXVldWVfbmFtZSUKI1BCUyAtbCBzeXN0ZW1fbWV0cmljcz1UcnVlCiMgI1BCUyAtbCBzdWJuZXRfaWQ9c3VibmV0LTA5MWM4N2UxMTcyMjljOGYxCgpJTlBVVF9GSUxFPSVpbnB1dF9maWxlJQoKU0NSQVRDSD0lc2NyYXRjaF9sb2NhdGlvbiUKCiMgQ3JlYXRlIFdvcmtpbmcgRGlyZWN0b3J5ClRNUF9ESVI9JHtTQ1JBVENIfS8ke1BCU19KT0JOQU1FfV8ke1BCU19KT0JJRH0KbWtkaXIgLXAgJFRNUF9ESVIKY3AgLVIgJChkaXJuYW1lICIke0lOUFVUX0ZJTEV9IikvKiAkVE1QX0RJUgpjZCAkVE1QX0RJUgoKIyBNUEkgVmFyaWFibGVzCmV4cG9ydCBPTVBfRFlOQU1JQz1vZmYKZXhwb3J0IEtNUF9BRkZJTklUWT0iZ3JhbnVsYXJpdHk9dGhyZWFkLGJhbGFuY2VkIgpleHBvcnQgSV9NUElfRkFMTEJBQ0s9MApleHBvcnQgSV9NUElfUElOX1BST0NTPWFsbGNvcmVzCmV4cG9ydCBJX01QSV9QSU5fTU9ERT1saWIKZXhwb3J0IElfTVBJX0VBR0VSX1RIUkVTSE9MRD0xMzQwMDAKZXhwb3J0IElfTVBJX1BJTl9BRkZJTklUWT1zb2NrCmV4cG9ydCBJX01QSV9BREpVU1RfQ09MTEVDVElWRVM9ImJjYXN0OjFcO2FsbHRvYWxsOjFcO2FsbHJlZHVjZToxLTEwMjQsMi01MDAwMDAiCmV4cG9ydCBJX01QSV9QSU5fRE9NQUlOPW9tcAoKIyMjIyMjIyBMSUNFTlNFICMjIyMjIyMjIyMKZXhwb3J0IExTVENfRklMRT0iL2FwcHMvbHN0Yy9saWNlbnNlIgojZXhwb3J0IExJQ0VOU0VfVFlQRT0ibmV0d29yayIKI2V4cG9ydCBMSUNFTlNFX1NFUlZFUj0iMzExMTFANTAuMTEyLjE3NC4xMDIiCiNleHBvcnQgTFNUQ19MSUNFTlNFPSJuZXR3b3JrIgojZXhwb3J0IExTVENfTElDRU5TRV9TRVJWRVI9IjMxMDEwQDEwLjAuMS4xMTEiCiMjIyMjIyMgTElDRU5TRSAjIyMjIyMjIyMjCgpjb3Jlcz0lY3B1cyUKaW5zdGFuY2VzPSQoY2F0ICRQQlNfTk9ERUZJTEUgfCB1bmlxIHwgd2MgLWwpCnBwbj0kKGVjaG8gJHtjb3Jlc30vJHtpbnN0YW5jZXN9IHwgYmMpCm1lbW9yeT0lbWVtb3J5JQptZW1vcnkyPSVtZW1vcnkyJQptcGk9JW1waV92ZXJzaW9uJQoKbW9kdWxlIGxvYWQgJG1waQoKaWYgW1sgJG1waSA9fiAiaW50ZWxtcGkiIF1dCnRoZW4KICAgbXBpYXJncz0iLW4gJHtjb3Jlc30gLXBwbiAke3Bwbn0gLWhvc3RmaWxlICRQQlNfTk9ERUZJTEUiCmVsaWYgW1sgJG1waSA9fiAib3Blbm1waS8xLjUuMSIgXV0KdGhlbgogICBtcGlhcmdzPSItbnAgJHtjb3Jlc30gLWhvc3RmaWxlICRQQlNfTk9ERUZJTEUiCmVsc2UKICAgbXBpYXJncz0iLW5wICR7Y29yZXN9IC0tbWFwLWJ5IHBwcjoke3Bwbn06bm9kZSAtaG9zdGZpbGUgJFBCU19OT0RFRklMRSAtLW5vb3ZlcnN1YnNjcmliZSIKZmkKCmVjaG8gIk1QST0kbXBpIiA+PiBvdXRwdXQubG9nCmVjaG8gIkJJTkFSWT0lYmluYXJ5X2xvY2F0aW9uJSIgPj4gb3V0cHV0LmxvZwplY2hvICJJTlNUQU5DRVM9JHtpbnN0YW5jZXN9IiA+PiBvdXRwdXQubG9nCmVjaG8gIk1QSUFSR1M9JHttcGlhcmdzfSIgPj4gb3V0cHV0LmxvZwoKJCh3aGljaCBtcGlydW4pICR7bXBpYXJnc30gJWJpbmFyeV9sb2NhdGlvbiUgST0laW5wdXRfZmlsZSUgTUVNT1JZPSR7bWVtb3J5fSBNRU1PUlkyPSR7bWVtb3J5Mn0gTkNQVT0ke2NvcmVzfSA+PiBvdXRwdXQubG9nIDI+JjEKCiMgQ29weSBkYXRhIGJhY2sgdG8gL2ZzeAppZiBbICRTQ1JBVENIICE9ICIvZnN4IiBdCnRoZW4KICBlY2hvICJXcml0aW5nIG91dHB1dCB0byAvZnN4LyRUTVBESVIiCiAgY3AgLVIgJFRNUF9ESVIgL2ZzeApmaQoKCg==", "profile_interpreter": "qsub", "profile_thumbnail": "data:image/png;base64,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"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment