Last Updated: 06/05/2023
Course Title
PSY:2301 – Introduction to Clinical Psychology (Spring 2023)
Course Meeting Time and
Place
Monday & Wednesday 10:30–11:20 a.m., 100 Phillips Hall (PH)
Course Home
The College of Liberal Arts and Sciences (CLAS) is the home of this
course, and CLAS governs the add and drop deadlines, the “second-grade
only” option (SGO), academic misconduct policies, and other policies and
procedures. Other UI colleges may have different policies.
Instructor
Professor Petersen
Office: 175 Psychological and Brain Sciences Building (PBSB)
E-mail: isaac-t-petersen@uiowa.edu
Office Phone: 467-1014
Student drop-in hours: Monday 11:20–12:20 & Thursday 2–4
Note: I’m here to help you learn and succeed in PSY:2301. Please come to
my office hours to ask questions about course material, assignments,
exams, or professional development (career-related issues), for
instance. I welcome you to discuss any concerns you might have about the
class. I am also available to meet with you by appointment, although I
would appreciate your making every effort to see me during office hours.
The best way to reach me outside of class is by e-mail.
Discussion
Sections
All discussion sections are in 53 VAN. The day and time of the
discussion section differ by section:
A01 |
Monday 3:30–4:20 |
Olivia Adamson |
A02 |
Monday 4:30–5:20 |
Olivia Adamson |
A03 |
Tuesday 8:30–9:20 |
James Lopez |
A04 |
Tuesday 12:30–1:20 |
Gonzalo Quinones |
A05 |
Tuesday 1:30–2:20 |
James Lopez |
A06 |
Wednesday 2:30–3:20 |
Gonzalo Quinones |
A07 |
Wednesday 3:30–4:20 |
Gonzalo Quinones |
A08 |
Thursday 9:30–10:20 |
Olivia Adamson |
A09 |
Thursday 10:30–11:20 |
Olivia Adamson |
A10 |
Friday 1:30–2:20 |
Gonzalo Quinones |
Graduate Teaching
Assistants
The class has three graduate teaching assistants (TAs).
Gonzalo Quinones
Office: 364 Psychological and Brain Sciences Building (PBSB)
Sections: A04, A06, A07, A10
Student drop-in hours: Tuesday 10:00–12:00 and Wednesday
9:00–10:00
E-mail: gonzalo-quinones@uiowa.edu
Olivia Adamson
Office: 364 Psychological and Brain Sciences Building (PBSB)
Sections: A01, A02, A08, A09
Student drop-in hours: Monday 12:00–2:00 (in-person and/or by zoom) and
Thursday 8–9am (over zoom)
E-mail: olivia-adamson@uiowa.edu
James Lopez
Office: 364 Psychological and Brain Sciences Building (PBSB)
Sections: A03, A05
Student drop-in hours: Monday 9:00–10:30
E-mail: james-lopez@uiowa.edu
Prerequisites
The Psychology department has a hierarchical course structure that
requires students to complete certain prerequisites before taking
upper-level classes. The prerequisite for this course is Elementary
Psychology (PSY:1001).
Description of
Course
This course is designed to introduce you to the concepts and methods
of the science of clinical psychology.
It has three areas of emphasis:
- Fundamentals of Scientific Clinical Psychology
- Evidence-Based Psychological Assessment
- Evidence-Based Psychological Intervention
This course will provide an introduction to (a) major theoretical
models and research methods in scientific clinical psychology; (b)
several psychological problems that are particularly relevant to college
students (depression, anxiety, and alcohol abuse); (c) the general
principles underlying the construction, administration, and
interpretation of evidence-based clinical assessments; and (d)
empirically supported approaches to psychological intervention. You
are urged to reconsider your decision to take this class if you are
reluctant to examine these topics in a scientific manner.
Note: Some topics and movies will deal with sensitive or
controversial issues such alcohol problems, depression, anxiety, abuse,
sexual assault, eating disorders, and suicide.
Learning
Objectives
Taking this course should make you a more informed consumer of claims
about contemporary clinical psychology and may assist in your evaluation
of clinical psychology or other related potential career goals. This
course is not designed to provide extensive information on the nature of
psychological disorders (see Abnormal Psychology course) or to provide
you with the skills to assess and treat psychological problems.
Required Textbook
There isn’t a required or recommended textbook. Instead, this course
will include a combination of book chapters, peer-reviewed journal
articles, and popular media articles. The source for all exam questions
will be lecture, discussion, and all required readings for lectures and
section, which will be provided on the course website on ICON. The cost of textbooks has become
so high that I am not comfortable requiring one for this course when I
can cover the material adequately in other ways. There also is no
textbook available that covers the material as we do in class.
Attendance at lectures will be critical as a result, however. If you
miss a lecture or section, you will need to watch the lecture recording
or get notes from a peer, because we do not provide notes or re-present
missed lecture or section material in meetings. Once you have the notes
from a peer, review them carefully on your own, then get into office
hours with me or one of the TAs to address any specific questions that
you have as soon as possible. Feel free to come to office hours with me
or with one of the TAs to discuss how best to study for a course without
a textbook.
Academic Honesty and
Misconduct
All students in CLAS courses are expected to abide by the CLAS
Code of Academic Honesty. Academic misconduct must be reported by
instructors to CLAS according to these
procedures. Please note that collaboration with other classmates on
quizzes and during exams is not permitted. However, I do encourage you
to collaborate with classmates to prepare for exams (e.g.,
informal study groups).
Course Requirements
and Policies
Lecture
We will meet twice weekly for lectures, at the time and location
described above. My powerpoint presentations
for each lecture will be posted on ICON no later than noon the day before
a lecture (though I may continue to refine the slides up until the time
of lecture). Please note: powerpoint presentations are an outline
of my points. It is your responsibility to take notes during
class. I strongly recommend bringing the powerpoint presentations to
class to take notes.
You should feel free to ask questions during lecture, although some
questions may need to be deferred given the size of the class and the
need to complete coverage of specific material during lecture.
Questions and further discussion of class material are always
welcome during office hours, during discussion section, and via
e-mail. Please bear in mind that extensive or complex questions may not
be addressable over e-mail.
Lecture
Recordings
My intention is to record lectures so that you may review them.
Recorded lectures will be posted on the “UICapture” tab in ICON. Recordings will be available up
to 48 hours after class (for Wednesday lectures) or until the Wednesday
class period (for Monday lectures). However, please do not count on
recordings being available, in case I accidentally forget to
initiate the recording or there is a technical malfunction. The
availability of lecture recordings will not be extended beyond 48 hours
after lecture—the recordings are meant to help people keep up with
lectures and for students to retrieve the relevant content if they
missed anything during the live lecture or if they miss the lecture;
they are not meant to be a study method that allows people to fall
behind in class from week to week. If you miss something and are unable
to watch the lecture recording, you can get/review notes with a peer,
and then come to office hours if you have specific questions.
Discussion
Section
In addition to lecture, you also have a weekly discussion section,
except during exam weeks. The day and time of the weekly discussion
section differs based on the section, see above.
Attendance and
Participation
Discussion section attendance and participation are mandatory and
will be worth 8% of your final grade. You must attend section, pay
attention, participate verbally, and complete the required
activities during section to receive any attendance and participation
points, as indicated by your submission of the required written
responses during section at the end of the section session. There
will be 13 discussions during the semester, and you will receive one
point for submitting an appropriate written response at the end of each
section, up to a maximum of 11 points (i.e., you will not receive
extra credit for submitting appropriate responses for all 13
discussions). Thus, you will not be penalized for missing two sections,
although you still will be responsible for the covered material on
exams, etc., and I urge you strongly to attend all sections. This
strategy is designed to facilitate my management of the excuses
associated with an occasional missed section (i.e., no more than two
during the semester). In other words, make sure you attend and
participate in at least 11 of your discussion sections this
semester!!
If you have to a section for an excusable reason (e.g., you are
sick), let your TA know as soon as possible that you will have to miss
class—preferably before class, and no later than 48 hours after class.
It is up to our discretion what is considered an excused absence. If it
is an excused absence, a TA will send you notes from the section you
missed, and you will be able to submit the in-class writing assignment
by emailing it to your TA—you will still need to submit the writing
assignment within one week of the missed discussion section to get
attendence credit for that section. If you miss a section, you can
attend a different section during the same week only with the
permission of the instructor of the different section, but you
will not receive attendance and participation points for doing so
(unless the absence is excused by the instructor).
Lecture attendance is not mandatory, but it is strongly encouraged;
most material presented in lecture is not included in the readings, and
lecture recordings may not always be available. You are responsible
for and will be tested on all material presented in lectures, discussion
sections, and in the required readings. Regular attendance and good
attention to lectures will improve what you get out of this class and is
likely to improve your performance on the exams.
Readings &
Quizzes
Readings and other materials will be posted on ICON. You are expected to do the
readings before discussion section. You will have an online quiz on the
readings to complete in ICON, on
your own, before each discussion section. The quizzes are meant
to help you come to class prepared to contribute so you are
best-positioned to learn and to help others learn. The quizzes are not
timed (you can spend as much time as you need on each quiz up until the
deadline). The deadline for each quiz is 30 minutes before your
scheduled discussion section starts. We will not accept late responses
or multiple submissions. Your lowest quiz score will be dropped. We will
not accept excused absences for quizzes because (a) you have a week to
complete the quiz (and can submit it at any point during that week), and
(b) we drop your lowest quiz score. Each quiz will be weighted the same
in the final grade. Quiz answers will be viewable at the end of the week
(i.e., after the last discussion section has taken their quiz).
Past experience has shown that in order to do well in this class, you
should read the required material, participate actively in class, and go
over your notes each week. There is too much material being
covered in this class to try to study only by frantic preparation
immediately before exams. Note that lecture and section will not
cover all relevant material for the course; you will be expected to know
the required readings for exams.
Workload
This is a 3 semester hour course. Students should therefore expect to
spend 6
additional hours per week (outside of class) reading the articles,
reviewing material from lecture and discussion section, and preparing
for quizzes and exams.
Examinations
There will be 3 exams. The exams will include multiple-choice
questions. Each exam will emphasize information presented for the third
of the class that precedes it. However, some integration of information
across sections will be required for questions on the second and third
exams. Exam questions can come from any of the following sources:
lectures, sections, or required readings. For suggested study tips
for this class, see here.
Missing Exams
Students are allowed to make up exams that have been missed due to
illness, mandatory religious observations, official University
activities, or other unavoidable circumstances. Note: the format of the
make-up exam may differ from the original exam. If you know that you
must be away at the time of an exam for one of these reasons, Professor
Petersen or the TA must be contacted in advance whenever possible to
schedule a make-up exam. In order to take a make-up exam, you must
provide acceptable documentation to be eligible to take it: including
documentation for any report of illness; any other circumstances must be
documented by the University of Iowa Absence
Explanation Form and must be approved by Professor Petersen. In
sum, to be eligible for a make-up exam, Professor Petersen or the TA
must be contacted before the examination whenever possible, and you must
send acceptable form of documentation to Professor Petersen or the
TA.
Grading
Final grades will be assigned at the end of semester on the basis of
your total percentage of points earned on exams, quizzes, and section
participation, as detailed below. Grades will be assigned on an absolute
scale (criterion-referenced grading); course grades will not be curved.
No extra-credit opportunities are available for this course. Please
note: As a matter of fairness to all students, I assign grades based on
performance and do not negotiate grades. Final grades will be assigned
based on the following ranges:
A+ |
97–100% |
A |
93–96 |
A- |
90–92 |
B+ |
87–89 |
B |
83–86 |
B- |
80–82 |
C+ |
75–79 |
C |
70–74 |
C- |
65–69 |
D+ |
60–64 |
D |
55–59 |
D- |
50–54 |
F |
< 50% |
I round up from .5 when determining final grades. For example, a
course percent of 79.50 would receive a B-, whereas a course percent of
79.49 would receive a C+.
The relative contribution of each component to your final grade is as
follows:
- 28% Examination #1
- 28% Examination #2
- 28% Examination #3 (administered only during the class’s Final Exam
time slot)
- 8% Discussion Attendance/Participation
- 8% Reading Quizzes
Tentative Course
Outline (exam dates fixed)
Section Notes
- Sections will not be held during the week of examinations.
Therefore, sections are cancelled on the following dates: Monday 2/27 –
Friday 3/3 and Monday 4/3 – Friday 4/7.
Unit One
Unit One: Fundamentals of Scientific Clinical
Psychology
1/16 |
MLK Day (no class!) |
1/18 |
Introduction and Contemporary Clinical Psychology |
1/23 |
Classification and Diagnosis |
1/25 |
Classification and Diagnosis |
1/30 |
Research Methods in Clinical Psychology (content focus
on sexual assault) |
2/1 |
Research Methods in Clinical Psychology (content focus
on sexual assault) |
2/6 |
Mood Disorders |
2/8 |
Mood Disorders |
2/13 |
Mood Disorders and Suicide |
2/15 |
Anxiety Disorders |
2/20 |
Anxiety Disorders |
2/22 |
Alcohol Use Disorders |
2/27 |
Examination #1 (no sections this week!) |
Unit Two
Unit Two: Evidence-Based Psychological Assessment and
Prediction
3/1 |
Overview of Assessment and Prediction |
3/6 |
Overview of Assessment and Prediction |
3/8 |
Interviewing, Observation, and Self-Monitoring |
3/13 |
Spring Break (no class!) |
3/15 |
Spring Break (no class!) |
3/20 |
Interviewing, Observation, and Self-Monitoring |
3/22 |
Intelligence Testing |
3/27 |
Intelligence Testing |
3/29 |
Personality Assessment |
4/3 |
Personality Assessment; Wrap Up |
4/5 |
Examination #2 (no sections this week!) |
Unit Three
Unit Three: Evidence-Based Psychological
Intervention
4/10 |
Major Approaches to Intervention |
4/12 |
Major Approaches to Intervention |
4/17 |
Cognitive-Behavioral Therapy for Panic Disorder;
Transdiagnostic Treatment for Emotional Disorders |
4/19 |
Evaluation of Interventions |
4/24 |
Evidence-Based Treatments; Influences on Treatment
Outcome |
4/26 |
Dissemination of Evidence-Based Treatments |
5/1 |
Intervention Controversies |
5/3 |
Wrap-Up |
Date and Time of the
Final Exam
The final examination date and time will be announced by the
Registrar generally by the fifth week of classes and it will be
announced on the course ICON site once it is known. Do not plan your
end of the semester travel plans until the final exam schedule is made
public. It is your responsibility to know the date, time, and place of
the final exam. According to Registrar’s final exam policy, students
have a maximum of two weeks after the announced final exam
schedule to request a change if an exam conflict exists or if a
student has more than two exams in one day (see the policy
here).
Course Resources
There are many course resources available to help you succeed in the
class, including:
- Powerpoint slides for lecture
- Powerpoint slides for discussion section
- getting and reviewing missed notes from a peer
- lecture recordings
- study questions after each lecture (see the “Study Questions” folder
under the “Files” tab on ICON)
- Quizlet questions (see the “Quizlet” folder under the “Files” tab on
ICON)
- practice exam questions that we post leading up to the exam (these
will be made available in the “Practice Exam Questions” folder under the
“Files” tab on ICON)
- review your quizzes and the answers
- our guide on how to study for the
class
- TA office hours
- instructor office hours
- peer study groups
Drop Deadline for this
Course
You may drop an individual course before the deadline; after this
deadline you will need collegiate approval. You can look up the drop deadline for
this course here. When you drop a course, a “W” will appear on your
transcript. The mark of “W” is a neutral mark that does not affect your
GPA. Directions for adding or dropping a course and other registration
changes can be found on the Registrar’s
website. Students can find policies on dropping and withdrawing here.
Feedback about the
Course
I welcome feedback at any point during the class. If you have
comments on the class or my teaching, please feel free to meet with me
during office hours.
Student
Complaints
Students with a complaint about a grade or a related matter should
first discuss the situation with the instructor, and finally with the
Director or Chair of the school, department, or program offering the
course. Students should contact CLAS
Undergraduate Programs for support when the matter is not resolved
at the previous level.
Communication: UI
Email
Students are responsible for all official correspondences sent to
their UI email address (uiowa.edu) and must use this address for any
communication with instructors or staff in the UI community.
Health and Safety
The University of Iowa strongly encourages students, faculty, and
staff to be vaccinated against COVID-19. For information about COVID-19
vaccines on campus, please see https://coronavirus.uiowa.edu. If you are feeling sick,
test positive for COVID-19, or may have been exposed to COVID-19, please
refer to the campus guidance for the appropriate action (https://coronavirus.uiowa.edu/returning-campus/showing-symptoms).
Regardless of your vaccination status, if you have symptoms consistent
with COVID-19, please stay home and follow the appropriate
isolation/quarantine guidance. For up-to-date information throughout the
semester, please refer to https://coronavirus.uiowa.edu.
College of Liberal
Arts and Sciences (CLAS) Course Policies
- Attendance
and Absences
University regulations require that students be allowed to make up
examinations which have been missed due to illness or other unavoidable
circumstances. See the section above on “Missing
Exams” for the documentation necessary for an absence to be excused
and to be eligible to take a make-up exam. Students with mandatory
religious obligations or UI authorized activities must discuss their
absences with the instructor or TA as soon as possible. Religious
obligations must be communicated within the first three weeks of
classes.
- Exam
Policies
Other Expectations
of Student Performance
Students have the right to a distraction-free learning environment.
You have the responsibility to help create such a classroom environment.
Please treat other students in the class, the TAs, and the instructor
with respect. Students are expected to help each other learn and to
contribute overall to the learning environment of the course. Arriving
prepared for class is part of this expectation.
Course Requests
We have a centralized location to keep track of requests, forms,
etc., so we can make sure we meet your needs. Course requests include,
for instance, requests to join a peer study group, setting up a time to
review your exam, requesting accommodations, etc. Please submit course
requests (e.g., to join a peer study group) here: https://uiowa.qualtrics.com/jfe/form/SV_1HUyg6ZaR4CcjWu.
If you have accessibility accommodations from Student Disability
Services (SDS), please submit your SDS accommodations letters at this
link.
Resources for
Help
Some of the topics covered in class involve problems that can be
quite common among college students. If you feel that you or someone you
know may be struggling with an academic, emotional, or psychological
problem, the following organizations are available for assistance:
University of Iowa Academic Advising Center |
353-5700, https://advisingcenter.uiowa.edu |
University Counseling Services |
335-7294, https://www.uiowa.edu/ucs |
Student Health Service - Mental Health |
335-8394, https://studenthealth.uiowa.edu/services/psychiatry |
University of Iowa Hospitals and Clinics Adult
Psychiatry Services Clinic |
353-6314, https://www.uihealthcare.org/Psychiatry |
Seashore Clinic (in the UI Department of Psychological
and Brain Sciences) |
335-2467, https://psychology.uiowa.edu/resources/seashore-clinic |
Women’s Resource and Action Center |
335-1486, https://wrac.uiowa.edu |
Rape Victim Advocacy Program |
319-335-6000 or 800-228-1625, https://www.uiowa.edu/~rvap |
Office of Sexual Misconduct |
319-335-6200, https://osmrc.uiowa.edu |
CommUnity |
855-325-4296, https://builtbycommunity.org/crisis |
Community & Family Resources |
351-4357, https://www.cfrhelps.org/ |
If you or someone you know is contemplating suicide, either
call or text the Suicide and Crisis Lifeline at 988, or call 911.
Disclaimer
This syllabus is subject to change. Any changes will be discussed in
class, via email, and/or on ICON.
LS0tCnRpdGxlOiAiQ291cnNlIFN5bGxhYnVzIgotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSAiIikKYGBgCgpMYXN0IFVwZGF0ZWQ6IGByIGZvcm1hdChTeXMuRGF0ZSgpLCAiJW0vJWQvJVkiKWAKCiMgQ291cnNlIFRpdGxlIHsjdGl0bGV9CgpQU1k6MjMwMSDigJMgSW50cm9kdWN0aW9uIHRvIENsaW5pY2FsIFBzeWNob2xvZ3kgKFNwcmluZyAyMDIzKQoKIyBDb3Vyc2UgTWVldGluZyBUaW1lIGFuZCBQbGFjZSB7I2xlY3R1cmVUaW1lfQoKTW9uZGF5ICYgV2VkbmVzZGF5IDEwOjMw4oCTMTE6MjAgYS5tLiwgMTAwIFBoaWxsaXBzIEhhbGwgKFBIKQoKIyBDb3Vyc2UgV2Vic2l0ZSB7I3dlYnNpdGV9CgpodHRwczovL2ljb24udWlvd2EuZWR1CgpUbyBhY2Nlc3MgdGhlIGNvdXJzZSBzaXRlLCBsb2cgaW50byBbSW93YSBDb3Vyc2VzIE9ubGluZSAoSUNPTildKGh0dHBzOi8vaWNvbi51aW93YS5lZHUpIHVzaW5nIHlvdXIgSGF3ayBJRCBhbmQgcGFzc3dvcmQuCgojIENvdXJzZSBIb21lIHsjaG9tZX0KClRoZSBDb2xsZWdlIG9mIExpYmVyYWwgQXJ0cyBhbmQgU2NpZW5jZXMgKENMQVMpIGlzIHRoZSBob21lIG9mIHRoaXMgY291cnNlLCBhbmQgQ0xBUyBnb3Zlcm5zIHRoZSBhZGQgYW5kIGRyb3AgZGVhZGxpbmVzLCB0aGUgInNlY29uZC1ncmFkZSBvbmx5IiBvcHRpb24gKFNHTyksIGFjYWRlbWljIG1pc2NvbmR1Y3QgcG9saWNpZXMsIGFuZCBvdGhlciBwb2xpY2llcyBhbmQgcHJvY2VkdXJlcy4KT3RoZXIgVUkgY29sbGVnZXMgbWF5IGhhdmUgZGlmZmVyZW50IHBvbGljaWVzLgoKIyBJbnN0cnVjdG9yIHsjaW5zdHJ1Y3Rvcn0KClByb2Zlc3NvciBQZXRlcnNlblwKT2ZmaWNlOiAxNzUgUHN5Y2hvbG9naWNhbCBhbmQgQnJhaW4gU2NpZW5jZXMgQnVpbGRpbmcgKFBCU0IpXApFLW1haWw6IFtpc2FhYy10LXBldGVyc2VuQHVpb3dhLmVkdV0obWFpbHRvOmlzYWFjLXQtcGV0ZXJzZW5AdWlvd2EuZWR1KVwKT2ZmaWNlIFBob25lOiA0NjctMTAxNFwKU3R1ZGVudCBkcm9wLWluIGhvdXJzOiBNb25kYXkgMTE6MjDigJMxMjoyMCAmIFRodXJzZGF5IDLigJM0XApOb3RlOiBJJ20gaGVyZSB0byBoZWxwIHlvdSBsZWFybiBhbmQgc3VjY2VlZCBpbiBQU1k6MjMwMS4KUGxlYXNlIGNvbWUgdG8gbXkgb2ZmaWNlIGhvdXJzIHRvIGFzayBxdWVzdGlvbnMgYWJvdXQgY291cnNlIG1hdGVyaWFsLCBhc3NpZ25tZW50cywgZXhhbXMsIG9yIHByb2Zlc3Npb25hbCBkZXZlbG9wbWVudCAoY2FyZWVyLXJlbGF0ZWQgaXNzdWVzKSwgZm9yIGluc3RhbmNlLgpJIHdlbGNvbWUgeW91IHRvIGRpc2N1c3MgYW55IGNvbmNlcm5zIHlvdSBtaWdodCBoYXZlIGFib3V0IHRoZSBjbGFzcy4KSSBhbSBhbHNvIGF2YWlsYWJsZSB0byBtZWV0IHdpdGggeW91IGJ5IGFwcG9pbnRtZW50LCBhbHRob3VnaCBJIHdvdWxkIGFwcHJlY2lhdGUgeW91ciBtYWtpbmcgZXZlcnkgZWZmb3J0IHRvIHNlZSBtZSBkdXJpbmcgb2ZmaWNlIGhvdXJzLgpUaGUgYmVzdCB3YXkgdG8gcmVhY2ggbWUgb3V0c2lkZSBvZiBjbGFzcyBpcyBieSBlLW1haWwuCgojIERpc2N1c3Npb24gU2VjdGlvbnMgeyNzZWN0aW9uc30KCkFsbCBkaXNjdXNzaW9uIHNlY3Rpb25zIGFyZSBpbiA1MyBWQU4uClRoZSBkYXkgYW5kIHRpbWUgb2YgdGhlIGRpc2N1c3Npb24gc2VjdGlvbiBkaWZmZXIgYnkgc2VjdGlvbjoKCnwgU2VjdGlvbiB8IERheS9UaW1lICAgICAgICAgICAgICB8IFRlYWNoaW5nIEFzc2lzdGFudCB8Cnw6LS0tLS0tLS18Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tLS0tLS0tLS18CnwgQTAxICAgICB8IE1vbmRheSAzOjMw4oCTNDoyMCAgICAgIHwgT2xpdmlhIEFkYW1zb24gICAgIHwKfCBBMDIgICAgIHwgTW9uZGF5IDQ6MzDigJM1OjIwICAgICAgfCBPbGl2aWEgQWRhbXNvbiAgICAgfAp8IEEwMyAgICAgfCBUdWVzZGF5IDg6MzDigJM5OjIwICAgICB8IEphbWVzIExvcGV6ICAgICAgICB8CnwgQTA0ICAgICB8IFR1ZXNkYXkgMTI6MzDigJMxOjIwICAgIHwgR29uemFsbyBRdWlub25lcyAgIHwKfCBBMDUgICAgIHwgVHVlc2RheSAxOjMw4oCTMjoyMCAgICAgfCBKYW1lcyBMb3BleiAgICAgICAgfAp8IEEwNiAgICAgfCBXZWRuZXNkYXkgMjozMOKAkzM6MjAgICB8IEdvbnphbG8gUXVpbm9uZXMgICB8CnwgQTA3ICAgICB8IFdlZG5lc2RheSAzOjMw4oCTNDoyMCAgIHwgR29uemFsbyBRdWlub25lcyAgIHwKfCBBMDggICAgIHwgVGh1cnNkYXkgOTozMOKAkzEwOjIwICAgfCBPbGl2aWEgQWRhbXNvbiAgICAgfAp8IEEwOSAgICAgfCBUaHVyc2RheSAxMDozMOKAkzExOjIwICB8IE9saXZpYSBBZGFtc29uICAgICB8CnwgQTEwICAgICB8IEZyaWRheSAxOjMw4oCTMjoyMCAgICAgIHwgR29uemFsbyBRdWlub25lcyAgIHwKCiMgR3JhZHVhdGUgVGVhY2hpbmcgQXNzaXN0YW50cyB7I1RBc30KClRoZSBjbGFzcyBoYXMgdGhyZWUgZ3JhZHVhdGUgdGVhY2hpbmcgYXNzaXN0YW50cyAoVEFzKS4KCkdvbnphbG8gUXVpbm9uZXNcCk9mZmljZTogMzY0IFBzeWNob2xvZ2ljYWwgYW5kIEJyYWluIFNjaWVuY2VzIEJ1aWxkaW5nIChQQlNCKVwKU2VjdGlvbnM6IEEwNCwgQTA2LCBBMDcsIEExMFwKU3R1ZGVudCBkcm9wLWluIGhvdXJzOiBUdWVzZGF5IDEwOjAw4oCTMTI6MDAgYW5kIFdlZG5lc2RheSA5OjAw4oCTMTA6MDBcCkUtbWFpbDogZ29uemFsby1xdWlub25lc0B1aW93YS5lZHUKCk9saXZpYSBBZGFtc29uXApPZmZpY2U6IDM2NCBQc3ljaG9sb2dpY2FsIGFuZCBCcmFpbiBTY2llbmNlcyBCdWlsZGluZyAoUEJTQilcClNlY3Rpb25zOiBBMDEsIEEwMiwgQTA4LCBBMDlcClN0dWRlbnQgZHJvcC1pbiBob3VyczogTW9uZGF5IDEyOjAw4oCTMjowMCAoaW4tcGVyc29uIGFuZC9vciBieSB6b29tKSBhbmQgVGh1cnNkYXkgOOKAkzlhbSAob3ZlciB6b29tKVwKRS1tYWlsOiBvbGl2aWEtYWRhbXNvbkB1aW93YS5lZHUKCkphbWVzIExvcGV6XApPZmZpY2U6IDM2NCBQc3ljaG9sb2dpY2FsIGFuZCBCcmFpbiBTY2llbmNlcyBCdWlsZGluZyAoUEJTQilcClNlY3Rpb25zOiBBMDMsIEEwNVwKU3R1ZGVudCBkcm9wLWluIGhvdXJzOiBNb25kYXkgOTowMOKAkzEwOjMwXApFLW1haWw6IGphbWVzLWxvcGV6QHVpb3dhLmVkdQoKIyBEZXBhcnRtZW50YWwgUmVzb3VyY2VzIHsjZGVwdFJlc291cmNlc30KCkRlcGFydG1lbnQgb2YgUHN5Y2hvbG9naWNhbCBhbmQgQnJhaW4gU2NpZW5jZXM6IFtodHRwczovL3BzeWNob2xvZ3kudWlvd2EuZWR1XShodHRwczovL3BzeWNob2xvZ3kudWlvd2EuZWR1KVwKRGVwYXJ0bWVudCBvZiBQc3ljaG9sb2dpY2FsIGFuZCBCcmFpbiBTY2llbmNlcyBNYWluIE9mZmljZTogRzYwIFBzeWNob2xvZ2ljYWwgYW5kIEJyYWluIFNjaWVuY2VzIEJ1aWxkaW5nICgzMzUtMjQwNilcCkNvb3JkaW5hdG9yIG9mIFVuZGVyZ3JhZHVhdGUgU3R1ZGllczogUHJvZmVzc29yIFdpbmRzY2hpdGwgKFtwYXVsLXdpbmRzY2hpdGxAdWlvd2EuZWR1XShtYWlsdG86cGF1bC13aW5kc2NoaXRsQHVpb3dhLmVkdSk7IDMzNS0zNjgxKVwKQWNhZGVtaWMgQ29vcmRpbmF0b3I6IFByb2Zlc3NvciBKb2huc29uIChbZGVicmEtam9obnNvbkB1aW93YS5lZHVdKG1haWx0bzpkZWJyYS1qb2huc29uQHVpb3dhLmVkdSk7IDMzNS0wMTM1KVwKQ2hhaXIgb2YgRGVwYXJ0bWVudDogUHJvZmVzc29yIEJsdW1iZXJnIChbbWFyay1ibHVtYmVyZ0B1aW93YS5lZHVdKG1haWx0bzptYXJrLWJsdW1iZXJnQHVpb3dhLmVkdSk7IDMzNS0yNDI0KQoKIyBQcmVyZXF1aXNpdGVzIHsjcHJlcmVxc30KClRoZSBQc3ljaG9sb2d5IGRlcGFydG1lbnQgaGFzIGEgaGllcmFyY2hpY2FsIGNvdXJzZSBzdHJ1Y3R1cmUgdGhhdCByZXF1aXJlcyBzdHVkZW50cyB0byBjb21wbGV0ZSBjZXJ0YWluIHByZXJlcXVpc2l0ZXMgYmVmb3JlIHRha2luZyB1cHBlci1sZXZlbCBjbGFzc2VzLgpUaGUgcHJlcmVxdWlzaXRlIGZvciB0aGlzIGNvdXJzZSBpcyBFbGVtZW50YXJ5IFBzeWNob2xvZ3kgKFBTWToxMDAxKS4KCiMgRGVzY3JpcHRpb24gb2YgQ291cnNlIHsjZGVzY3JpcHRpb259CgpUaGlzIGNvdXJzZSBpcyBkZXNpZ25lZCB0byBpbnRyb2R1Y2UgeW91IHRvIHRoZSBjb25jZXB0cyBhbmQgbWV0aG9kcyBvZiB0aGUgc2NpZW5jZSBvZiBjbGluaWNhbCBwc3ljaG9sb2d5LgoKSXQgaGFzIHRocmVlIGFyZWFzIG9mIGVtcGhhc2lzOgoKMS4gRnVuZGFtZW50YWxzIG9mIFNjaWVudGlmaWMgQ2xpbmljYWwgUHN5Y2hvbG9neQoxLiBFdmlkZW5jZS1CYXNlZCBQc3ljaG9sb2dpY2FsIEFzc2Vzc21lbnQKMS4gRXZpZGVuY2UtQmFzZWQgUHN5Y2hvbG9naWNhbCBJbnRlcnZlbnRpb24KClRoaXMgY291cnNlIHdpbGwgcHJvdmlkZSBhbiBpbnRyb2R1Y3Rpb24gdG8gKGEpIG1ham9yIHRoZW9yZXRpY2FsIG1vZGVscyBhbmQgcmVzZWFyY2ggbWV0aG9kcyBpbiBzY2llbnRpZmljIGNsaW5pY2FsIHBzeWNob2xvZ3k7IChiKSBzZXZlcmFsIHBzeWNob2xvZ2ljYWwgcHJvYmxlbXMgdGhhdCBhcmUgcGFydGljdWxhcmx5IHJlbGV2YW50IHRvIGNvbGxlZ2Ugc3R1ZGVudHMgKGRlcHJlc3Npb24sIGFueGlldHksIGFuZCBhbGNvaG9sIGFidXNlKTsgKGMpIHRoZSBnZW5lcmFsIHByaW5jaXBsZXMgdW5kZXJseWluZyB0aGUgY29uc3RydWN0aW9uLCBhZG1pbmlzdHJhdGlvbiwgYW5kIGludGVycHJldGF0aW9uIG9mIGV2aWRlbmNlLWJhc2VkIGNsaW5pY2FsIGFzc2Vzc21lbnRzOyBhbmQgKGQpIGVtcGlyaWNhbGx5IHN1cHBvcnRlZCBhcHByb2FjaGVzIHRvIHBzeWNob2xvZ2ljYWwgaW50ZXJ2ZW50aW9uLgoqWW91IGFyZSB1cmdlZCB0byByZWNvbnNpZGVyIHlvdXIgZGVjaXNpb24gdG8gdGFrZSB0aGlzIGNsYXNzIGlmIHlvdSBhcmUgcmVsdWN0YW50IHRvIGV4YW1pbmUgdGhlc2UgdG9waWNzIGluIGEgc2NpZW50aWZpYyBtYW5uZXIuKgoKTm90ZTogU29tZSB0b3BpY3MgYW5kIG1vdmllcyB3aWxsIGRlYWwgd2l0aCBzZW5zaXRpdmUgb3IgY29udHJvdmVyc2lhbCBpc3N1ZXMgc3VjaCBhbGNvaG9sIHByb2JsZW1zLCBkZXByZXNzaW9uLCBhbnhpZXR5LCBhYnVzZSwgc2V4dWFsIGFzc2F1bHQsIGVhdGluZyBkaXNvcmRlcnMsIGFuZCBzdWljaWRlLgoKIyBMZWFybmluZyBPYmplY3RpdmVzIHsjb2JqZWN0aXZlc30KClRha2luZyB0aGlzIGNvdXJzZSBzaG91bGQgbWFrZSB5b3UgYSBtb3JlIGluZm9ybWVkIGNvbnN1bWVyIG9mIGNsYWltcyBhYm91dCBjb250ZW1wb3JhcnkgY2xpbmljYWwgcHN5Y2hvbG9neSBhbmQgbWF5IGFzc2lzdCBpbiB5b3VyIGV2YWx1YXRpb24gb2YgY2xpbmljYWwgcHN5Y2hvbG9neSBvciBvdGhlciByZWxhdGVkIHBvdGVudGlhbCBjYXJlZXIgZ29hbHMuClRoaXMgY291cnNlIGlzIG5vdCBkZXNpZ25lZCB0byBwcm92aWRlIGV4dGVuc2l2ZSBpbmZvcm1hdGlvbiBvbiB0aGUgbmF0dXJlIG9mIHBzeWNob2xvZ2ljYWwgZGlzb3JkZXJzIChzZWUgQWJub3JtYWwgUHN5Y2hvbG9neSBjb3Vyc2UpIG9yIHRvIHByb3ZpZGUgeW91IHdpdGggdGhlIHNraWxscyB0byBhc3Nlc3MgYW5kIHRyZWF0IHBzeWNob2xvZ2ljYWwgcHJvYmxlbXMuCgojIFJlcXVpcmVkIFRleHRib29rIHsjdGV4dGJvb2t9CgpUaGVyZSBpc24ndCBhIHJlcXVpcmVkIG9yIHJlY29tbWVuZGVkIHRleHRib29rLgpJbnN0ZWFkLCB0aGlzIGNvdXJzZSB3aWxsIGluY2x1ZGUgYSBjb21iaW5hdGlvbiBvZiBib29rIGNoYXB0ZXJzLCBwZWVyLXJldmlld2VkIGpvdXJuYWwgYXJ0aWNsZXMsIGFuZCBwb3B1bGFyIG1lZGlhIGFydGljbGVzLgpUaGUgc291cmNlIGZvciBhbGwgZXhhbSBxdWVzdGlvbnMgd2lsbCBiZSBsZWN0dXJlLCBkaXNjdXNzaW9uLCBhbmQgYWxsIHJlcXVpcmVkIHJlYWRpbmdzIGZvciBsZWN0dXJlcyBhbmQgc2VjdGlvbiwgd2hpY2ggd2lsbCBiZSBwcm92aWRlZCBvbiB0aGUgY291cnNlIHdlYnNpdGUgb24gW0lDT05dKGh0dHBzOi8vaWNvbi51aW93YS5lZHUpLgpUaGUgY29zdCBvZiB0ZXh0Ym9va3MgaGFzIGJlY29tZSBzbyBoaWdoIHRoYXQgSSBhbSBub3QgY29tZm9ydGFibGUgcmVxdWlyaW5nIG9uZSBmb3IgdGhpcyBjb3Vyc2Ugd2hlbiBJIGNhbiBjb3ZlciB0aGUgbWF0ZXJpYWwgYWRlcXVhdGVseSBpbiBvdGhlciB3YXlzLgpUaGVyZSBhbHNvIGlzIG5vIHRleHRib29rIGF2YWlsYWJsZSB0aGF0IGNvdmVycyB0aGUgbWF0ZXJpYWwgYXMgd2UgZG8gaW4gY2xhc3MuCkF0dGVuZGFuY2UgYXQgbGVjdHVyZXMgd2lsbCBiZSBjcml0aWNhbCBhcyBhIHJlc3VsdCwgaG93ZXZlci4KSWYgeW91IG1pc3MgYSBsZWN0dXJlIG9yIHNlY3Rpb24sIHlvdSB3aWxsIG5lZWQgdG8gd2F0Y2ggdGhlIGxlY3R1cmUgcmVjb3JkaW5nIG9yIGdldCBub3RlcyBmcm9tIGEgcGVlciwgYmVjYXVzZSB3ZSBkbyBub3QgcHJvdmlkZSBub3RlcyBvciByZS1wcmVzZW50IG1pc3NlZCBsZWN0dXJlIG9yIHNlY3Rpb24gbWF0ZXJpYWwgaW4gbWVldGluZ3MuCk9uY2UgeW91IGhhdmUgdGhlIG5vdGVzIGZyb20gYSBwZWVyLCByZXZpZXcgdGhlbSBjYXJlZnVsbHkgb24geW91ciBvd24sIHRoZW4gZ2V0IGludG8gb2ZmaWNlIGhvdXJzIHdpdGggbWUgb3Igb25lIG9mIHRoZSBUQXMgdG8gYWRkcmVzcyBhbnkgc3BlY2lmaWMgcXVlc3Rpb25zIHRoYXQgeW91IGhhdmUgYXMgc29vbiBhcyBwb3NzaWJsZS4KRmVlbCBmcmVlIHRvIGNvbWUgdG8gb2ZmaWNlIGhvdXJzIHdpdGggbWUgb3Igd2l0aCBvbmUgb2YgdGhlIFRBcyB0byBkaXNjdXNzIGhvdyBiZXN0IHRvIHN0dWR5IGZvciBhIGNvdXJzZSB3aXRob3V0IGEgdGV4dGJvb2suCgojIEFjYWRlbWljIEhvbmVzdHkgYW5kIE1pc2NvbmR1Y3QgeyNhY2FkZW1pY0hvbmVzdHl9CgpBbGwgc3R1ZGVudHMgaW4gQ0xBUyBjb3Vyc2VzIGFyZSBleHBlY3RlZCB0byBhYmlkZSBieSB0aGUgW0NMQVMgQ29kZSBvZiBBY2FkZW1pYyBIb25lc3R5XShodHRwczovL2NsYXMudWlvd2EuZWR1L3N0dWRlbnRzL2hhbmRib29rL2FjYWRlbWljLWZyYXVkLWhvbm9yLWNvZGUpLgpBY2FkZW1pYyBtaXNjb25kdWN0IG11c3QgYmUgcmVwb3J0ZWQgYnkgaW5zdHJ1Y3RvcnMgdG8gQ0xBUyBhY2NvcmRpbmcgdG8gW3RoZXNlIHByb2NlZHVyZXNdKGh0dHBzOi8vY2xhcy51aW93YS5lZHUvc3R1ZGVudHMvaGFuZGJvb2svYWNhZGVtaWMtZnJhdWQtaG9ub3ItY29kZSkuClBsZWFzZSBub3RlIHRoYXQgY29sbGFib3JhdGlvbiB3aXRoIG90aGVyIGNsYXNzbWF0ZXMgb24gcXVpenplcyBhbmQgZHVyaW5nIGV4YW1zIGlzIG5vdCBwZXJtaXR0ZWQuCkhvd2V2ZXIsIEkgZG8gZW5jb3VyYWdlIHlvdSB0byBjb2xsYWJvcmF0ZSB3aXRoIGNsYXNzbWF0ZXMgdG8gKnByZXBhcmUqIGZvciBleGFtcyAoZS5nLiwgaW5mb3JtYWwgc3R1ZHkgZ3JvdXBzKS4KCiMgQ291cnNlIFJlcXVpcmVtZW50cyBhbmQgUG9saWNpZXMgeyNyZXF1aXJlbWVudHN9CgojIyBMZWN0dXJlIHsjbGVjdHVyZX0KCldlIHdpbGwgbWVldCB0d2ljZSB3ZWVrbHkgZm9yIGxlY3R1cmVzLCBhdCB0aGUgdGltZSBhbmQgbG9jYXRpb24gZGVzY3JpYmVkIFthYm92ZV0oI2xlY3R1cmVUaW1lKS4KTXkgcG93ZXJwb2ludCBwcmVzZW50YXRpb25zIGZvciBlYWNoIGxlY3R1cmUgd2lsbCBiZSBwb3N0ZWQgb24gW0lDT05dKGh0dHBzOi8vaWNvbi51aW93YS5lZHUpIG5vIGxhdGVyIHRoYW4gbm9vbiB0aGUgZGF5IGJlZm9yZSBhIGxlY3R1cmUgKHRob3VnaCBJIG1heSBjb250aW51ZSB0byByZWZpbmUgdGhlIHNsaWRlcyB1cCB1bnRpbCB0aGUgdGltZSBvZiBsZWN0dXJlKS4KPHU+UGxlYXNlIG5vdGU6PC91PiBwb3dlcnBvaW50IHByZXNlbnRhdGlvbnMgYXJlIGFuIG91dGxpbmUgb2YgbXkgcG9pbnRzLiAKPHU+SXQgaXMgeW91ciByZXNwb25zaWJpbGl0eSB0byB0YWtlIG5vdGVzIGR1cmluZyBjbGFzcy48L3U+Ckkgc3Ryb25nbHkgcmVjb21tZW5kIGJyaW5naW5nIHRoZSBwb3dlcnBvaW50IHByZXNlbnRhdGlvbnMgdG8gY2xhc3MgdG8gdGFrZSBub3Rlcy4KCllvdSBzaG91bGQgZmVlbCBmcmVlIHRvIGFzayBxdWVzdGlvbnMgZHVyaW5nIGxlY3R1cmUsIGFsdGhvdWdoIHNvbWUgcXVlc3Rpb25zIG1heSBuZWVkIHRvIGJlIGRlZmVycmVkIGdpdmVuIHRoZSBzaXplIG9mIHRoZSBjbGFzcyBhbmQgdGhlIG5lZWQgdG8gY29tcGxldGUgY292ZXJhZ2Ugb2Ygc3BlY2lmaWMgbWF0ZXJpYWwgZHVyaW5nIGxlY3R1cmUuCjx1PlF1ZXN0aW9ucyBhbmQgZnVydGhlciBkaXNjdXNzaW9uIG9mIGNsYXNzIG1hdGVyaWFsIGFyZSBhbHdheXMgd2VsY29tZTwvdT4gZHVyaW5nIG9mZmljZSBob3VycywgZHVyaW5nIGRpc2N1c3Npb24gc2VjdGlvbiwgYW5kIHZpYSBlLW1haWwuClBsZWFzZSBiZWFyIGluIG1pbmQgdGhhdCBleHRlbnNpdmUgb3IgY29tcGxleCBxdWVzdGlvbnMgbWF5IG5vdCBiZSBhZGRyZXNzYWJsZSBvdmVyIGUtbWFpbC4KCiMjIyBMZWN0dXJlIFJlY29yZGluZ3MgeyNyZWNvcmRpbmdzfQoKTXkgaW50ZW50aW9uIGlzIHRvIHJlY29yZCBsZWN0dXJlcyBzbyB0aGF0IHlvdSBtYXkgcmV2aWV3IHRoZW0uClJlY29yZGVkIGxlY3R1cmVzIHdpbGwgYmUgcG9zdGVkIG9uIHRoZSAiVUlDYXB0dXJlIiB0YWIgaW4gW0lDT05dKGh0dHBzOi8vaWNvbi51aW93YS5lZHUpLgpSZWNvcmRpbmdzIHdpbGwgYmUgYXZhaWxhYmxlIHVwIHRvIDQ4IGhvdXJzIGFmdGVyIGNsYXNzIChmb3IgV2VkbmVzZGF5IGxlY3R1cmVzKSBvciB1bnRpbCB0aGUgV2VkbmVzZGF5IGNsYXNzIHBlcmlvZCAoZm9yIE1vbmRheSBsZWN0dXJlcykuCkhvd2V2ZXIsIDx1PnBsZWFzZSBkbyBub3QgY291bnQgb24gcmVjb3JkaW5ncyBiZWluZyBhdmFpbGFibGU8L3U+LCBpbiBjYXNlIEkgYWNjaWRlbnRhbGx5IGZvcmdldCB0byBpbml0aWF0ZSB0aGUgcmVjb3JkaW5nIG9yIHRoZXJlIGlzIGEgdGVjaG5pY2FsIG1hbGZ1bmN0aW9uLgpUaGUgYXZhaWxhYmlsaXR5IG9mIGxlY3R1cmUgcmVjb3JkaW5ncyB3aWxsIG5vdCBiZSBleHRlbmRlZCBiZXlvbmQgNDggaG91cnMgYWZ0ZXIgbGVjdHVyZeKAlHRoZSByZWNvcmRpbmdzIGFyZSBtZWFudCB0byBoZWxwIHBlb3BsZSBrZWVwIHVwIHdpdGggbGVjdHVyZXMgYW5kIGZvciBzdHVkZW50cyB0byByZXRyaWV2ZSB0aGUgcmVsZXZhbnQgY29udGVudCBpZiB0aGV5IG1pc3NlZCBhbnl0aGluZyBkdXJpbmcgdGhlIGxpdmUgbGVjdHVyZSBvciBpZiB0aGV5IG1pc3MgdGhlIGxlY3R1cmU7IHRoZXkgYXJlIG5vdCBtZWFudCB0byBiZSBhIHN0dWR5IG1ldGhvZCB0aGF0IGFsbG93cyBwZW9wbGUgdG8gZmFsbCBiZWhpbmQgaW4gY2xhc3MgZnJvbSB3ZWVrIHRvIHdlZWsuCklmIHlvdSBtaXNzIHNvbWV0aGluZyBhbmQgYXJlIHVuYWJsZSB0byB3YXRjaCB0aGUgbGVjdHVyZSByZWNvcmRpbmcsIHlvdSBjYW4gZ2V0L3JldmlldyBub3RlcyB3aXRoIGEgcGVlciwgYW5kIHRoZW4gY29tZSB0byBvZmZpY2UgaG91cnMgaWYgeW91IGhhdmUgc3BlY2lmaWMgcXVlc3Rpb25zLgoKIyMgRGlzY3Vzc2lvbiBTZWN0aW9uIHsjZGlzY3Vzc2lvblNlY3Rpb259CgpJbiBhZGRpdGlvbiB0byBsZWN0dXJlLCB5b3UgYWxzbyBoYXZlIGEgd2Vla2x5IGRpc2N1c3Npb24gc2VjdGlvbiwgZXhjZXB0IGR1cmluZyBleGFtIHdlZWtzLgpUaGUgZGF5IGFuZCB0aW1lIG9mIHRoZSB3ZWVrbHkgZGlzY3Vzc2lvbiBzZWN0aW9uIGRpZmZlcnMgYmFzZWQgb24gdGhlIHNlY3Rpb24sIHNlZSBbYWJvdmVdKCNzZWN0aW9ucykuCgojIyBBdHRlbmRhbmNlIGFuZCBQYXJ0aWNpcGF0aW9uIHsjYXR0ZW5kYW5jZVBhcnRpY2lwYXRpb259CgpEaXNjdXNzaW9uIHNlY3Rpb24gYXR0ZW5kYW5jZSBhbmQgcGFydGljaXBhdGlvbiBhcmUgbWFuZGF0b3J5IGFuZCB3aWxsIGJlIHdvcnRoIDglIG9mIHlvdXIgZmluYWwgZ3JhZGUuCllvdSBtdXN0IGF0dGVuZCBzZWN0aW9uLCBwYXkgYXR0ZW50aW9uLCBwYXJ0aWNpcGF0ZSB2ZXJiYWxseSwgPHU+YW5kPC91PiBjb21wbGV0ZSB0aGUgcmVxdWlyZWQgYWN0aXZpdGllcyBkdXJpbmcgc2VjdGlvbiB0byByZWNlaXZlIGFueSBhdHRlbmRhbmNlIGFuZCBwYXJ0aWNpcGF0aW9uIHBvaW50cywgYXMgaW5kaWNhdGVkIGJ5IHlvdXIgPHU+c3VibWlzc2lvbiBvZiB0aGUgcmVxdWlyZWQgd3JpdHRlbiByZXNwb25zZXMgZHVyaW5nIHNlY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGUgc2VjdGlvbiBzZXNzaW9uPC91Pi4KVGhlcmUgd2lsbCBiZSAxMyBkaXNjdXNzaW9ucyBkdXJpbmcgdGhlIHNlbWVzdGVyLCBhbmQgeW91IHdpbGwgcmVjZWl2ZSBvbmUgcG9pbnQgZm9yIHN1Ym1pdHRpbmcgYW4gYXBwcm9wcmlhdGUgd3JpdHRlbiByZXNwb25zZSBhdCB0aGUgZW5kIG9mIGVhY2ggc2VjdGlvbiwgdXAgdG8gYSA8dT5tYXhpbXVtPC91PiBvZiAxMSBwb2ludHMgKGkuZS4sIHlvdSB3aWxsIG5vdCByZWNlaXZlIGV4dHJhIGNyZWRpdCBmb3Igc3VibWl0dGluZyBhcHByb3ByaWF0ZSByZXNwb25zZXMgZm9yIGFsbCAxMyBkaXNjdXNzaW9ucykuClRodXMsIHlvdSB3aWxsIG5vdCBiZSBwZW5hbGl6ZWQgZm9yIG1pc3NpbmcgdHdvIHNlY3Rpb25zLCBhbHRob3VnaCB5b3Ugc3RpbGwgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgdGhlIGNvdmVyZWQgbWF0ZXJpYWwgb24gZXhhbXMsIGV0Yy4sIGFuZCBJIHVyZ2UgeW91IHN0cm9uZ2x5IHRvIGF0dGVuZCBhbGwgc2VjdGlvbnMuClRoaXMgc3RyYXRlZ3kgaXMgZGVzaWduZWQgdG8gZmFjaWxpdGF0ZSBteSBtYW5hZ2VtZW50IG9mIHRoZSBleGN1c2VzIGFzc29jaWF0ZWQgd2l0aCBhbiBvY2Nhc2lvbmFsIG1pc3NlZCBzZWN0aW9uIChpLmUuLCBubyBtb3JlIHRoYW4gdHdvIGR1cmluZyB0aGUgc2VtZXN0ZXIpLgpJbiBvdGhlciB3b3JkcywgbWFrZSBzdXJlIHlvdSBhdHRlbmQgYW5kIHBhcnRpY2lwYXRlIGluIGF0IGxlYXN0IDExIG9mIHlvdXIgZGlzY3Vzc2lvbiBzZWN0aW9ucyB0aGlzIHNlbWVzdGVyISEKCklmIHlvdSBoYXZlIHRvIGEgc2VjdGlvbiBmb3IgYW4gZXhjdXNhYmxlIHJlYXNvbiAoZS5nLiwgeW91IGFyZSBzaWNrKSwgbGV0IHlvdXIgVEEga25vdyBhcyBzb29uIGFzIHBvc3NpYmxlIHRoYXQgeW91IHdpbGwgaGF2ZSB0byBtaXNzIGNsYXNz4oCUcHJlZmVyYWJseSBiZWZvcmUgY2xhc3MsIGFuZCBubyBsYXRlciB0aGFuIDQ4IGhvdXJzIGFmdGVyIGNsYXNzLgpJdCBpcyB1cCB0byBvdXIgZGlzY3JldGlvbiB3aGF0IGlzIGNvbnNpZGVyZWQgYW4gZXhjdXNlZCBhYnNlbmNlLgpJZiBpdCBpcyBhbiBleGN1c2VkIGFic2VuY2UsIGEgVEEgd2lsbCBzZW5kIHlvdSBub3RlcyBmcm9tIHRoZSBzZWN0aW9uIHlvdSBtaXNzZWQsIGFuZCB5b3Ugd2lsbCBiZSBhYmxlIHRvIHN1Ym1pdCB0aGUgaW4tY2xhc3Mgd3JpdGluZyBhc3NpZ25tZW50IGJ5IGVtYWlsaW5nIGl0IHRvIHlvdXIgVEHigJQ8dT55b3Ugd2lsbCBzdGlsbCBuZWVkIHRvIHN1Ym1pdCB0aGUgd3JpdGluZyBhc3NpZ25tZW50IHdpdGhpbiBvbmUgd2VlayBvZiB0aGUgbWlzc2VkIGRpc2N1c3Npb24gc2VjdGlvbiB0byBnZXQgYXR0ZW5kZW5jZSBjcmVkaXQgZm9yIHRoYXQgc2VjdGlvbjwvdT4uCklmIHlvdSBtaXNzIGEgc2VjdGlvbiwgeW91IGNhbiBhdHRlbmQgYSBkaWZmZXJlbnQgc2VjdGlvbiBkdXJpbmcgdGhlIHNhbWUgd2VlayA8dT5vbmx5IHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGluc3RydWN0b3Igb2YgdGhlIGRpZmZlcmVudCBzZWN0aW9uPC91PiwgPHU+YnV0IHlvdSB3aWxsIG5vdCByZWNlaXZlIGF0dGVuZGFuY2UgYW5kIHBhcnRpY2lwYXRpb24gcG9pbnRzIGZvciBkb2luZyBzbzwvdT4gKHVubGVzcyB0aGUgYWJzZW5jZSBpcyBleGN1c2VkIGJ5IHRoZSBpbnN0cnVjdG9yKS4KCkxlY3R1cmUgYXR0ZW5kYW5jZSBpcyBub3QgbWFuZGF0b3J5LCBidXQgaXQgaXMgc3Ryb25nbHkgZW5jb3VyYWdlZDsgbW9zdCBtYXRlcmlhbCBwcmVzZW50ZWQgaW4gbGVjdHVyZSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIHJlYWRpbmdzLCBhbmQgbGVjdHVyZSByZWNvcmRpbmdzIG1heSBub3QgYWx3YXlzIGJlIGF2YWlsYWJsZS4KPHU+WW91IGFyZSByZXNwb25zaWJsZSBmb3IgYW5kIHdpbGwgYmUgdGVzdGVkIG9uIGFsbCBtYXRlcmlhbCBwcmVzZW50ZWQgaW4gbGVjdHVyZXMsIGRpc2N1c3Npb24gc2VjdGlvbnMsIGFuZCBpbiB0aGUgcmVxdWlyZWQgcmVhZGluZ3M8L3U+LgpSZWd1bGFyIGF0dGVuZGFuY2UgYW5kIGdvb2QgYXR0ZW50aW9uIHRvIGxlY3R1cmVzIHdpbGwgaW1wcm92ZSB3aGF0IHlvdSBnZXQgb3V0IG9mIHRoaXMgY2xhc3MgYW5kIGlzIGxpa2VseSB0byBpbXByb3ZlIHlvdXIgcGVyZm9ybWFuY2Ugb24gdGhlIGV4YW1zLgoKIyMgUmVhZGluZ3MgJiBRdWl6emVzIHsjcmVhZGluZ1F1aXp6ZXN9CgpSZWFkaW5ncyBhbmQgb3RoZXIgbWF0ZXJpYWxzIHdpbGwgYmUgcG9zdGVkIG9uIFtJQ09OXShodHRwczovL2ljb24udWlvd2EuZWR1KS4KWW91IGFyZSBleHBlY3RlZCB0byBkbyB0aGUgcmVhZGluZ3MgYmVmb3JlIGRpc2N1c3Npb24gc2VjdGlvbi4KWW91IHdpbGwgaGF2ZSBhbiBvbmxpbmUgcXVpeiBvbiB0aGUgcmVhZGluZ3MgdG8gY29tcGxldGUgaW4gW0lDT05dKGh0dHBzOi8vaWNvbi51aW93YS5lZHUpLCBvbiB5b3VyIG93biwgPHU+YmVmb3JlPC91PiBlYWNoIGRpc2N1c3Npb24gc2VjdGlvbi4KVGhlIHF1aXp6ZXMgYXJlIG1lYW50IHRvIGhlbHAgeW91IGNvbWUgdG8gY2xhc3MgcHJlcGFyZWQgdG8gY29udHJpYnV0ZSBzbyB5b3UgYXJlIGJlc3QtcG9zaXRpb25lZCB0byBsZWFybiBhbmQgdG8gaGVscCBvdGhlcnMgbGVhcm4uClRoZSBxdWl6emVzIGFyZSBub3QgdGltZWQgKHlvdSBjYW4gc3BlbmQgYXMgbXVjaCB0aW1lIGFzIHlvdSBuZWVkIG9uIGVhY2ggcXVpeiB1cCB1bnRpbCB0aGUgZGVhZGxpbmUpLgpUaGUgZGVhZGxpbmUgZm9yIGVhY2ggcXVpeiBpcyAzMCBtaW51dGVzIGJlZm9yZSB5b3VyIHNjaGVkdWxlZCBkaXNjdXNzaW9uIHNlY3Rpb24gc3RhcnRzLgpXZSB3aWxsIG5vdCBhY2NlcHQgbGF0ZSByZXNwb25zZXMgb3IgbXVsdGlwbGUgc3VibWlzc2lvbnMuCllvdXIgbG93ZXN0IHF1aXogc2NvcmUgd2lsbCBiZSBkcm9wcGVkLgpXZSB3aWxsIG5vdCBhY2NlcHQgZXhjdXNlZCBhYnNlbmNlcyBmb3IgcXVpenplcyBiZWNhdXNlIChhKSB5b3UgaGF2ZSBhIHdlZWsgdG8gY29tcGxldGUgdGhlIHF1aXogKGFuZCBjYW4gc3VibWl0IGl0IGF0IGFueSBwb2ludCBkdXJpbmcgdGhhdCB3ZWVrKSwgYW5kIChiKSB3ZSBkcm9wIHlvdXIgbG93ZXN0IHF1aXogc2NvcmUuCkVhY2ggcXVpeiB3aWxsIGJlIHdlaWdodGVkIHRoZSBzYW1lIGluIHRoZSBmaW5hbCBncmFkZS4KUXVpeiBhbnN3ZXJzIHdpbGwgYmUgdmlld2FibGUgYXQgdGhlIGVuZCBvZiB0aGUgd2VlayAoaS5lLiwgYWZ0ZXIgdGhlIGxhc3QgZGlzY3Vzc2lvbiBzZWN0aW9uIGhhcyB0YWtlbiB0aGVpciBxdWl6KS4KClBhc3QgZXhwZXJpZW5jZSBoYXMgc2hvd24gdGhhdCBpbiBvcmRlciB0byBkbyB3ZWxsIGluIHRoaXMgY2xhc3MsIHlvdSBzaG91bGQgcmVhZCB0aGUgcmVxdWlyZWQgbWF0ZXJpYWwsIHBhcnRpY2lwYXRlIGFjdGl2ZWx5IGluIGNsYXNzLCBhbmQgZ28gb3ZlciB5b3VyIG5vdGVzIDx1PmVhY2ggd2VlazwvdT4uClRoZXJlIGlzIHRvbyBtdWNoIG1hdGVyaWFsIGJlaW5nIGNvdmVyZWQgaW4gdGhpcyBjbGFzcyB0byB0cnkgdG8gc3R1ZHkgb25seSBieSBmcmFudGljIHByZXBhcmF0aW9uIGltbWVkaWF0ZWx5IGJlZm9yZSBleGFtcy4KTm90ZSB0aGF0IGxlY3R1cmUgYW5kIHNlY3Rpb24gd2lsbCA8dT5ub3Q8L3U+IGNvdmVyIGFsbCByZWxldmFudCBtYXRlcmlhbCBmb3IgdGhlIGNvdXJzZTsgeW91IHdpbGwgYmUgZXhwZWN0ZWQgdG8ga25vdyB0aGUgPHU+cmVxdWlyZWQ8L3U+IHJlYWRpbmdzIGZvciBleGFtcy4KCiMjIFdvcmtsb2FkIHsjd29ya2xvYWR9CgpUaGlzIGlzIGEgMyBzZW1lc3RlciBob3VyIGNvdXJzZS4KU3R1ZGVudHMgc2hvdWxkIHRoZXJlZm9yZSBleHBlY3QgdG8gc3BlbmQgWzYgYWRkaXRpb25hbCBob3VycyBwZXIgd2Vla10oaHR0cHM6Ly9jbGFzLnVpb3dhLmVkdS9mYWN1bHR5L3N0dWRlbnQtd29ya2xvYWQtZ3VpZGVsaW5lcykgKG91dHNpZGUgb2YgY2xhc3MpIHJlYWRpbmcgdGhlIGFydGljbGVzLCByZXZpZXdpbmcgbWF0ZXJpYWwgZnJvbSBsZWN0dXJlIGFuZCBkaXNjdXNzaW9uIHNlY3Rpb24sIGFuZCBwcmVwYXJpbmcgZm9yIHF1aXp6ZXMgYW5kIGV4YW1zLgoKIyMgRXhhbWluYXRpb25zIHsjZXhhbXN9CgpUaGVyZSB3aWxsIGJlIDMgZXhhbXMuClRoZSBleGFtcyB3aWxsIGluY2x1ZGUgbXVsdGlwbGUtY2hvaWNlIHF1ZXN0aW9ucy4KRWFjaCBleGFtIHdpbGwgZW1waGFzaXplIGluZm9ybWF0aW9uIHByZXNlbnRlZCBmb3IgdGhlIHRoaXJkIG9mIHRoZSBjbGFzcyB0aGF0IHByZWNlZGVzIGl0LgpIb3dldmVyLCBzb21lIGludGVncmF0aW9uIG9mIGluZm9ybWF0aW9uIGFjcm9zcyBzZWN0aW9ucyB3aWxsIGJlIHJlcXVpcmVkIGZvciBxdWVzdGlvbnMgb24gdGhlIHNlY29uZCBhbmQgdGhpcmQgZXhhbXMuCkV4YW0gcXVlc3Rpb25zIGNhbiBjb21lIGZyb20gPHU+YW55IG9mIHRoZSBmb2xsb3dpbmcgc291cmNlczogbGVjdHVyZXMsIHNlY3Rpb25zLCBvciByZXF1aXJlZCByZWFkaW5nczwvdT4uCkZvciBzdWdnZXN0ZWQgc3R1ZHkgdGlwcyBmb3IgdGhpcyBjbGFzcywgc2VlIFtoZXJlXShob3dUb1N0dWR5Lmh0bWwpLgoKIyMjIE1pc3NpbmcgRXhhbXMgeyNtaXNzaW5nRXhhbXN9CgpTdHVkZW50cyBhcmUgYWxsb3dlZCB0byBtYWtlIHVwIGV4YW1zIHRoYXQgaGF2ZSBiZWVuIG1pc3NlZCBkdWUgdG8gaWxsbmVzcywgbWFuZGF0b3J5IHJlbGlnaW91cyBvYnNlcnZhdGlvbnMsIG9mZmljaWFsIFVuaXZlcnNpdHkgYWN0aXZpdGllcywgb3Igb3RoZXIgdW5hdm9pZGFibGUgY2lyY3Vtc3RhbmNlcy4KTm90ZTogdGhlIGZvcm1hdCBvZiB0aGUgbWFrZS11cCBleGFtIG1heSBkaWZmZXIgZnJvbSB0aGUgb3JpZ2luYWwgZXhhbS4KSWYgeW91IGtub3cgdGhhdCB5b3UgbXVzdCBiZSBhd2F5IGF0IHRoZSB0aW1lIG9mIGFuIGV4YW0gZm9yIG9uZSBvZiB0aGVzZSByZWFzb25zLCBQcm9mZXNzb3IgUGV0ZXJzZW4gb3IgdGhlIFRBIG11c3QgYmUgY29udGFjdGVkIGluIGFkdmFuY2Ugd2hlbmV2ZXIgcG9zc2libGUgdG8gc2NoZWR1bGUgYSBtYWtlLXVwIGV4YW0uCkluIG9yZGVyIHRvIHRha2UgYSBtYWtlLXVwIGV4YW0sIHlvdSBtdXN0IHByb3ZpZGUgYWNjZXB0YWJsZSBkb2N1bWVudGF0aW9uIHRvIGJlIGVsaWdpYmxlIHRvIHRha2UgaXQ6IGluY2x1ZGluZyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcmVwb3J0IG9mIGlsbG5lc3M7IGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIG11c3QgYmUgZG9jdW1lbnRlZCBieSB0aGUgVW5pdmVyc2l0eSBvZiBJb3dhIFtBYnNlbmNlIEV4cGxhbmF0aW9uIEZvcm1dKGh0dHBzOi8vY2xhcy51aW93YS5lZHUvZmFjdWx0eS9zdHVkZW50LWF0dGVuZGFuY2UtYW5kLWFic2VuY2VzKSBhbmQgbXVzdCBiZSBhcHByb3ZlZCBieSBQcm9mZXNzb3IgUGV0ZXJzZW4uCjx1PkluIHN1bSwgdG8gYmUgZWxpZ2libGUgZm9yIGEgbWFrZS11cCBleGFtLCBQcm9mZXNzb3IgUGV0ZXJzZW4gb3IgdGhlIFRBIG11c3QgYmUgY29udGFjdGVkIGJlZm9yZSB0aGUgZXhhbWluYXRpb24gd2hlbmV2ZXIgcG9zc2libGUsIGFuZCB5b3UgbXVzdCBzZW5kIGFjY2VwdGFibGUgZm9ybSBvZiBkb2N1bWVudGF0aW9uIHRvIFByb2Zlc3NvciBQZXRlcnNlbiBvciB0aGUgVEE8L3U+LgoKIyBHcmFkaW5nIHsjZ3JhZGluZ30KCkZpbmFsIGdyYWRlcyB3aWxsIGJlIGFzc2lnbmVkIGF0IHRoZSBlbmQgb2Ygc2VtZXN0ZXIgb24gdGhlIGJhc2lzIG9mIHlvdXIgdG90YWwgcGVyY2VudGFnZSBvZiBwb2ludHMgZWFybmVkIG9uIGV4YW1zLCBxdWl6emVzLCBhbmQgc2VjdGlvbiBwYXJ0aWNpcGF0aW9uLCBhcyBkZXRhaWxlZCBiZWxvdy4KR3JhZGVzIHdpbGwgYmUgYXNzaWduZWQgb24gYW4gYWJzb2x1dGUgc2NhbGUgKGNyaXRlcmlvbi1yZWZlcmVuY2VkIGdyYWRpbmcpOyBjb3Vyc2UgZ3JhZGVzIHdpbGwgbm90IGJlIGN1cnZlZC4KTm8gZXh0cmEtY3JlZGl0IG9wcG9ydHVuaXRpZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhpcyBjb3Vyc2UuClBsZWFzZSBub3RlOiBBcyBhIG1hdHRlciBvZiBmYWlybmVzcyB0byBhbGwgc3R1ZGVudHMsIEkgYXNzaWduIGdyYWRlcyBiYXNlZCBvbiBwZXJmb3JtYW5jZSBhbmQgZG8gbm90IG5lZ290aWF0ZSBncmFkZXMuCkZpbmFsIGdyYWRlcyB3aWxsIGJlIGFzc2lnbmVkIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgcmFuZ2VzOgoKfCBHcmFkZSB8IFBlcmNlbnQgfAp8Oi0tLS0tLXw6LS0tLS0tLS18CnwgQSsgICAgfCA5N+KAkzEwMCUgfCAKfCBBICAgICB8IDkz4oCTOTYgICB8CnwgQS0gICAgfCA5MOKAkzkyICAgfAp8IEIrICAgIHwgODfigJM4OSAgIHwKfCBCICAgICB8IDgz4oCTODYgICB8CnwgQi0gICAgfCA4MOKAkzgyICAgfAp8IEMrICAgIHwgNzXigJM3OSAgIHwKfCBDICAgICB8IDcw4oCTNzQgICB8CnwgQy0gICAgfCA2NeKAkzY5ICAgfAp8IEQrICAgIHwgNjDigJM2NCAgIHwKfCBEICAgICB8IDU14oCTNTkgICB8CnwgRC0gICAgfCA1MOKAkzU0ICAgfAp8IEYgICAgIHwgPCA1MCUgICB8CgpJIHJvdW5kIHVwIGZyb20gLjUgd2hlbiBkZXRlcm1pbmluZyBmaW5hbCBncmFkZXMuCkZvciBleGFtcGxlLCBhIGNvdXJzZSBwZXJjZW50IG9mIDc5LjUwIHdvdWxkIHJlY2VpdmUgYSBCLSwgd2hlcmVhcyBhIGNvdXJzZSBwZXJjZW50IG9mIDc5LjQ5IHdvdWxkIHJlY2VpdmUgYSBDKy4KClRoZSByZWxhdGl2ZSBjb250cmlidXRpb24gb2YgZWFjaCBjb21wb25lbnQgdG8geW91ciBmaW5hbCBncmFkZSBpcyBhcyBmb2xsb3dzOgoKIC0gMjglCUV4YW1pbmF0aW9uICMxCiAtIDI4JQlFeGFtaW5hdGlvbiAjMgogLSAyOCUJRXhhbWluYXRpb24gIzMgKGFkbWluaXN0ZXJlZCBvbmx5IGR1cmluZyB0aGUgY2xhc3MncyBGaW5hbCBFeGFtIHRpbWUgc2xvdCkKIC0gOCUgCURpc2N1c3Npb24gQXR0ZW5kYW5jZS9QYXJ0aWNpcGF0aW9uCiAtIDglIAlSZWFkaW5nIFF1aXp6ZXMKCiMgVGVudGF0aXZlIENvdXJzZSBPdXRsaW5lIChleGFtIGRhdGVzIGZpeGVkKSB7I291dGxpbmV9CgojIyBTZWN0aW9uIE5vdGVzIHsjc2VjdGlvbk5vdGVzfQoKLSBTZWN0aW9ucyB3aWxsIG5vdCBiZSBoZWxkIGR1cmluZyB0aGUgd2VlayBvZiBleGFtaW5hdGlvbnMuClRoZXJlZm9yZSwgc2VjdGlvbnMgYXJlIGNhbmNlbGxlZCBvbiB0aGUgZm9sbG93aW5nIGRhdGVzOiBNb25kYXkgMi8yNyDigJMgRnJpZGF5IDMvMyBhbmQgTW9uZGF5IDQvMyDigJMgRnJpZGF5IDQvNy4KCiMjIFVuaXQgT25lIHsjdW5pdDF9CgoqKlVuaXQgT25lOiBGdW5kYW1lbnRhbHMgb2YgU2NpZW50aWZpYyBDbGluaWNhbCBQc3ljaG9sb2d5KioKCnwgRGF0ZSB8IFRvcGljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8Oi0tLS0tfDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCAxLzE2IHwgTUxLIERheSAobm8gY2xhc3MhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgMS8xOCB8IEludHJvZHVjdGlvbiBhbmQgQ29udGVtcG9yYXJ5IENsaW5pY2FsIFBzeWNob2xvZ3kgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IDEvMjMgfCBDbGFzc2lmaWNhdGlvbiBhbmQgRGlhZ25vc2lzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAxLzI1IHwgQ2xhc3NpZmljYXRpb24gYW5kIERpYWdub3NpcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgMS8zMCB8IFJlc2VhcmNoIE1ldGhvZHMgaW4gQ2xpbmljYWwgUHN5Y2hvbG9neSAoY29udGVudCBmb2N1cyBvbiBzZXh1YWwgYXNzYXVsdCkgfAp8IDIvMSAgfCBSZXNlYXJjaCBNZXRob2RzIGluIENsaW5pY2FsIFBzeWNob2xvZ3kgKGNvbnRlbnQgZm9jdXMgb24gc2V4dWFsIGFzc2F1bHQpIHwKfCAyLzYgIHwgTW9vZCBEaXNvcmRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgMi84ICB8IE1vb2QgRGlzb3JkZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IDIvMTMgfCBNb29kIERpc29yZGVycyBhbmQgU3VpY2lkZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAyLzE1IHwgQW54aWV0eSBEaXNvcmRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgMi8yMCB8IEFueGlldHkgRGlzb3JkZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IDIvMjIgfCBBbGNvaG9sIFVzZSBEaXNvcmRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAyLzI3IHwgRXhhbWluYXRpb24gIzEgKG5vIHNlY3Rpb25zIHRoaXMgd2VlayEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CgojIyBVbml0IFR3byB7I3VuaXQyfQoKKipVbml0IFR3bzogRXZpZGVuY2UtQmFzZWQgUHN5Y2hvbG9naWNhbCBBc3Nlc3NtZW50IGFuZCBQcmVkaWN0aW9uKioKCnwgRGF0ZSB8IFRvcGljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8Oi0tLS0tfDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCAzLzEgIHwgT3ZlcnZpZXcgb2YgQXNzZXNzbWVudCBhbmQgUHJlZGljdGlvbiAgICAgICAgICB8CnwgMy82ICB8IE92ZXJ2aWV3IG9mIEFzc2Vzc21lbnQgYW5kIFByZWRpY3Rpb24gICAgICAgICAgfAp8IDMvOCAgfCBJbnRlcnZpZXdpbmcsIE9ic2VydmF0aW9uLCBhbmQgU2VsZi1Nb25pdG9yaW5nIHwKfCAzLzEzIHwgU3ByaW5nIEJyZWFrIChubyBjbGFzcyEpICAgICAgICAgICAgICAgICAgICAgICB8CnwgMy8xNSB8IFNwcmluZyBCcmVhayAobm8gY2xhc3MhKSAgICAgICAgICAgICAgICAgICAgICAgfAp8IDMvMjAgfCBJbnRlcnZpZXdpbmcsIE9ic2VydmF0aW9uLCBhbmQgU2VsZi1Nb25pdG9yaW5nIHwKfCAzLzIyIHwgSW50ZWxsaWdlbmNlIFRlc3RpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgMy8yNyB8IEludGVsbGlnZW5jZSBUZXN0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IDMvMjkgfCBQZXJzb25hbGl0eSBBc3Nlc3NtZW50ICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCA0LzMgIHwgUGVyc29uYWxpdHkgQXNzZXNzbWVudDsgV3JhcCBVcCAgICAgICAgICAgICAgICB8CnwgNC81ICB8IEV4YW1pbmF0aW9uICMyIChubyBzZWN0aW9ucyB0aGlzIHdlZWshKSAgICAgICAgfAoKIyMgVW5pdCBUaHJlZSB7I3VuaXQzfQoKKipVbml0IFRocmVlOiBFdmlkZW5jZS1CYXNlZCBQc3ljaG9sb2dpY2FsIEludGVydmVudGlvbioqCgp8IERhdGUgfCBUb3BpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfDotLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgNC8xMCB8IE1ham9yIEFwcHJvYWNoZXMgdG8gSW50ZXJ2ZW50aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IDQvMTIgfCBNYWpvciBBcHByb2FjaGVzIHRvIEludGVydmVudGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCA0LzE3IHwgQ29nbml0aXZlLUJlaGF2aW9yYWwgVGhlcmFweSBmb3IgUGFuaWMgRGlzb3JkZXI7IFRyYW5zZGlhZ25vc3RpYyBUcmVhdG1lbnQgZm9yIEVtb3Rpb25hbCBEaXNvcmRlcnMgfAp8IDQvMTkgfCBFdmFsdWF0aW9uIG9mIEludGVydmVudGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCA0LzI0IHwgRXZpZGVuY2UtQmFzZWQgVHJlYXRtZW50czsgSW5mbHVlbmNlcyBvbiBUcmVhdG1lbnQgT3V0Y29tZSB8CnwgNC8yNiB8IERpc3NlbWluYXRpb24gb2YgRXZpZGVuY2UtQmFzZWQgVHJlYXRtZW50cyAgICAgICAgICAgICAgICAgfAp8IDUvMSAgfCBJbnRlcnZlbnRpb24gQ29udHJvdmVyc2llcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCA1LzMgIHwgV3JhcC1VcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CgojIERhdGUgYW5kIFRpbWUgb2YgdGhlIEZpbmFsIEV4YW0geyNmaW5hbEV4YW19CgpUaGUgZmluYWwgZXhhbWluYXRpb24gZGF0ZSBhbmQgdGltZSB3aWxsIGJlIGFubm91bmNlZCBieSB0aGUgUmVnaXN0cmFyIGdlbmVyYWxseSBieSB0aGUgZmlmdGggd2VlayBvZiBjbGFzc2VzIGFuZCBpdCB3aWxsIGJlIGFubm91bmNlZCBvbiB0aGUgY291cnNlIElDT04gc2l0ZSBvbmNlIGl0IGlzIGtub3duLgo8dT5EbyBub3QgcGxhbiB5b3VyIGVuZCBvZiB0aGUgc2VtZXN0ZXIgdHJhdmVsIHBsYW5zIHVudGlsIHRoZSBmaW5hbCBleGFtIHNjaGVkdWxlIGlzIG1hZGUgcHVibGljLgpJdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGtub3cgdGhlIGRhdGUsIHRpbWUsIGFuZCBwbGFjZSBvZiB0aGUgZmluYWwgZXhhbS48L3U+CkFjY29yZGluZyB0byBSZWdpc3RyYXIncyBmaW5hbCBleGFtIHBvbGljeSwgc3R1ZGVudHMgPHU+aGF2ZSBhIG1heGltdW0gb2YgdHdvIHdlZWtzIGFmdGVyIHRoZSBhbm5vdW5jZWQgZmluYWwgZXhhbSBzY2hlZHVsZTwvdT4gdG8gcmVxdWVzdCBhIGNoYW5nZSBpZiBhbiBleGFtIGNvbmZsaWN0IGV4aXN0cyBvciBpZiBhIHN0dWRlbnQgaGFzIG1vcmUgdGhhbiB0d28gZXhhbXMgaW4gb25lIGRheSAoc2VlIHRoZSBbcG9saWN5XShodHRwczovL3JlZ2lzdHJhci51aW93YS5lZHUvbWFrZXVwLWZpbmFsLWV4YW1pbmF0aW9uLXBvbGljaWVzKSBoZXJlKS4KCiMgQ291cnNlIFJlc291cmNlcyB7I2NvdXJzZVJlc291cmNlc30KClRoZXJlIGFyZSBtYW55IGNvdXJzZSByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHN1Y2NlZWQgaW4gdGhlIGNsYXNzLCBpbmNsdWRpbmc6CgotIFBvd2VycG9pbnQgc2xpZGVzIGZvciBsZWN0dXJlCi0gUG93ZXJwb2ludCBzbGlkZXMgZm9yIGRpc2N1c3Npb24gc2VjdGlvbgotIGdldHRpbmcgYW5kIHJldmlld2luZyBtaXNzZWQgbm90ZXMgZnJvbSBhIHBlZXIKLSBbbGVjdHVyZSByZWNvcmRpbmdzXSgjcmVjb3JkaW5ncykKLSBzdHVkeSBxdWVzdGlvbnMgYWZ0ZXIgZWFjaCBsZWN0dXJlIChzZWUgdGhlICJTdHVkeSBRdWVzdGlvbnMiIGZvbGRlciB1bmRlciB0aGUgIkZpbGVzIiB0YWIgb24gW0lDT05dKGh0dHBzOi8vaWNvbi51aW93YS5lZHUpKQotIFF1aXpsZXQgcXVlc3Rpb25zIChzZWUgdGhlICJRdWl6bGV0IiBmb2xkZXIgdW5kZXIgdGhlICJGaWxlcyIgdGFiIG9uIElDT04pCi0gcHJhY3RpY2UgZXhhbSBxdWVzdGlvbnMgdGhhdCB3ZSBwb3N0IGxlYWRpbmcgdXAgdG8gdGhlIGV4YW0gKHRoZXNlIHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgaW4gdGhlICJQcmFjdGljZSBFeGFtIFF1ZXN0aW9ucyIgZm9sZGVyIHVuZGVyIHRoZSAiRmlsZXMiIHRhYiBvbiBbSUNPTl0oaHR0cHM6Ly9pY29uLnVpb3dhLmVkdSkpCi0gcmV2aWV3IHlvdXIgcXVpenplcyBhbmQgdGhlIGFuc3dlcnMKLSBvdXIgZ3VpZGUgb24gW2hvdyB0byBzdHVkeSBmb3IgdGhlIGNsYXNzXShob3dUb1N0dWR5Lmh0bWwpCi0gVEEgb2ZmaWNlIGhvdXJzCi0gaW5zdHJ1Y3RvciBvZmZpY2UgaG91cnMKLSBbcGVlciBzdHVkeSBncm91cHNdKCNyZXF1ZXN0cykKCiMgRHJvcCBEZWFkbGluZSBmb3IgdGhpcyBDb3Vyc2UgeyNkcm9wRGVhZGxpbmV9CgpZb3UgbWF5IGRyb3AgYW4gaW5kaXZpZHVhbCBjb3Vyc2UgYmVmb3JlIHRoZSBkZWFkbGluZTsgYWZ0ZXIgdGhpcyBkZWFkbGluZSB5b3Ugd2lsbCBuZWVkIGNvbGxlZ2lhdGUgYXBwcm92YWwuCllvdSBjYW4gbG9vayB1cCB0aGUgW2Ryb3AgZGVhZGxpbmUgZm9yIHRoaXMgY291cnNlXShodHRwczovL3JlZ2lzdHJhci51aW93YS5lZHUvY291cnNlLWRlYWRsaW5lcykgaGVyZS4KV2hlbiB5b3UgZHJvcCBhIGNvdXJzZSwgYSAiVyIgd2lsbCBhcHBlYXIgb24geW91ciB0cmFuc2NyaXB0LgpUaGUgbWFyayBvZiAiVyIgaXMgYSBuZXV0cmFsIG1hcmsgdGhhdCBkb2VzIG5vdCBhZmZlY3QgeW91ciBHUEEuCkRpcmVjdGlvbnMgZm9yIGFkZGluZyBvciBkcm9wcGluZyBhIGNvdXJzZSBhbmQgb3RoZXIgcmVnaXN0cmF0aW9uIGNoYW5nZXMgY2FuIGJlIGZvdW5kIG9uIHRoZSBbUmVnaXN0cmFyJ3Mgd2Vic2l0ZV0oaHR0cHM6Ly9yZWdpc3RyYXIudWlvd2EuZWR1L2NoYW5nZS1yZWdpc3RyYXRpb24tbXl1aSkuClN0dWRlbnRzIGNhbiBmaW5kIHBvbGljaWVzIG9uIGRyb3BwaW5nIGFuZCB3aXRoZHJhd2luZyBbaGVyZV0oaHR0cHM6Ly9jbGFzLnVpb3dhLmVkdS9zdHVkZW50cy9zdHVkZW50cy1hY2FkZW1pYy1wb2xpY2llcy9yZWdpc3RyYXRpb24tcG9saWNpZXMjZHJvcHBpbmcpLgoKIyBGZWVkYmFjayBhYm91dCB0aGUgQ291cnNlIHsjZmVlZGJhY2t9CgpJIHdlbGNvbWUgZmVlZGJhY2sgYXQgYW55IHBvaW50IGR1cmluZyB0aGUgY2xhc3MuCklmIHlvdSBoYXZlIGNvbW1lbnRzIG9uIHRoZSBjbGFzcyBvciBteSB0ZWFjaGluZywgcGxlYXNlIGZlZWwgZnJlZSB0byBtZWV0IHdpdGggbWUgZHVyaW5nIG9mZmljZSBob3Vycy4KCiMjIFN0dWRlbnQgQ29tcGxhaW50cyB7I2NvbXBsYWludHN9CgpTdHVkZW50cyB3aXRoIGEgY29tcGxhaW50IGFib3V0IGEgZ3JhZGUgb3IgYSByZWxhdGVkIG1hdHRlciBzaG91bGQgZmlyc3QgZGlzY3VzcyB0aGUgc2l0dWF0aW9uIHdpdGggdGhlIGluc3RydWN0b3IsIGFuZCBmaW5hbGx5IHdpdGggdGhlIERpcmVjdG9yIG9yIENoYWlyIG9mIHRoZSBzY2hvb2wsIGRlcGFydG1lbnQsIG9yIHByb2dyYW0gb2ZmZXJpbmcgdGhlIGNvdXJzZS4KU3R1ZGVudHMgc2hvdWxkIGNvbnRhY3QgW0NMQVMgVW5kZXJncmFkdWF0ZSBQcm9ncmFtc10oaHR0cHM6Ly9jbGFzLnVpb3dhLmVkdS9zdHVkZW50cy9oYW5kYm9vay9zdHVkZW50LXJpZ2h0cy1yZXNwb25zaWJpbGl0aWVzI3JpZ2h0cykgZm9yIHN1cHBvcnQgd2hlbiB0aGUgbWF0dGVyIGlzIG5vdCByZXNvbHZlZCBhdCB0aGUgcHJldmlvdXMgbGV2ZWwuCgojIENvbW11bmljYXRpb246IFVJIEVtYWlsIHsjZW1haWx9CgpTdHVkZW50cyBhcmUgcmVzcG9uc2libGUgZm9yIGFsbCBvZmZpY2lhbCBjb3JyZXNwb25kZW5jZXMgc2VudCB0byB0aGVpciBVSSBlbWFpbCBhZGRyZXNzICh1aW93YS5lZHUpIGFuZCBtdXN0IHVzZSB0aGlzIGFkZHJlc3MgZm9yIGFueSBjb21tdW5pY2F0aW9uIHdpdGggaW5zdHJ1Y3RvcnMgb3Igc3RhZmYgaW4gdGhlIFVJIGNvbW11bml0eS4KCiMgSGVhbHRoIGFuZCBTYWZldHkgeyNoZWFsdGh9CgpUaGUgVW5pdmVyc2l0eSBvZiBJb3dhIHN0cm9uZ2x5IGVuY291cmFnZXMgc3R1ZGVudHMsIGZhY3VsdHksIGFuZCBzdGFmZiB0byBiZSB2YWNjaW5hdGVkIGFnYWluc3QgQ09WSUQtMTkuCkZvciBpbmZvcm1hdGlvbiBhYm91dCBDT1ZJRC0xOSB2YWNjaW5lcyBvbiBjYW1wdXMsIHBsZWFzZSBzZWUgaHR0cHM6Ly9jb3JvbmF2aXJ1cy51aW93YS5lZHUuCklmIHlvdSBhcmUgZmVlbGluZyBzaWNrLCB0ZXN0IHBvc2l0aXZlIGZvciBDT1ZJRC0xOSwgb3IgbWF5IGhhdmUgYmVlbiBleHBvc2VkIHRvIENPVklELTE5LCBwbGVhc2UgcmVmZXIgdG8gdGhlIGNhbXB1cyBndWlkYW5jZSBmb3IgdGhlIGFwcHJvcHJpYXRlIGFjdGlvbiAoaHR0cHM6Ly9jb3JvbmF2aXJ1cy51aW93YS5lZHUvcmV0dXJuaW5nLWNhbXB1cy9zaG93aW5nLXN5bXB0b21zKS4KUmVnYXJkbGVzcyBvZiB5b3VyIHZhY2NpbmF0aW9uIHN0YXR1cywgaWYgeW91IGhhdmUgc3ltcHRvbXMgY29uc2lzdGVudCB3aXRoIENPVklELTE5LCBwbGVhc2Ugc3RheSBob21lIGFuZCBmb2xsb3cgdGhlIGFwcHJvcHJpYXRlIGlzb2xhdGlvbi9xdWFyYW50aW5lIGd1aWRhbmNlLgpGb3IgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbiB0aHJvdWdob3V0IHRoZSBzZW1lc3RlciwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vY29yb25hdmlydXMudWlvd2EuZWR1LgoKIyBDb2xsZWdlIG9mIExpYmVyYWwgQXJ0cyBhbmQgU2NpZW5jZXMgKENMQVMpIENvdXJzZSBQb2xpY2llcyB7I2NsYXNQb2xpY2llc30KCi0gW0F0dGVuZGFuY2UgYW5kIEFic2VuY2VzXShodHRwczovL2NsYXMudWlvd2EuZWR1L2ZhY3VsdHkvc3R1ZGVudC1hdHRlbmRhbmNlLWFuZC1hYnNlbmNlcylcClVuaXZlcnNpdHkgcmVndWxhdGlvbnMgcmVxdWlyZSB0aGF0IHN0dWRlbnRzIGJlIGFsbG93ZWQgdG8gbWFrZSB1cCBleGFtaW5hdGlvbnMgd2hpY2ggaGF2ZSBiZWVuIG1pc3NlZCBkdWUgdG8gaWxsbmVzcyBvciBvdGhlciB1bmF2b2lkYWJsZSBjaXJjdW1zdGFuY2VzLgpTZWUgdGhlIHNlY3Rpb24gYWJvdmUgb24gIltNaXNzaW5nIEV4YW1zXSgjbWlzc2luZ0V4YW1zKSIgZm9yIHRoZSBkb2N1bWVudGF0aW9uIG5lY2Vzc2FyeSBmb3IgYW4gYWJzZW5jZSB0byBiZSBleGN1c2VkIGFuZCB0byBiZSBlbGlnaWJsZSB0byB0YWtlIGEgbWFrZS11cCBleGFtLgpTdHVkZW50cyB3aXRoIG1hbmRhdG9yeSByZWxpZ2lvdXMgb2JsaWdhdGlvbnMgb3IgVUkgYXV0aG9yaXplZCBhY3Rpdml0aWVzIG11c3QgZGlzY3VzcyB0aGVpciBhYnNlbmNlcyB3aXRoIHRoZSBpbnN0cnVjdG9yIG9yIFRBIGFzIHNvb24gYXMgcG9zc2libGUuClJlbGlnaW91cyBvYmxpZ2F0aW9ucyBtdXN0IGJlIGNvbW11bmljYXRlZCB3aXRoaW4gdGhlIGZpcnN0IHRocmVlIHdlZWtzIG9mIGNsYXNzZXMuCi0gW0V4YW0gUG9saWNpZXNdKGh0dHBzOi8vY2xhcy51aW93YS5lZHUvZmFjdWx0eS9leGFtaW5hdGlvbi1wb2xpY2llcy1hbmQtYmVzdC1wcmFjdGljZXMpCgojIyBPdGhlciBFeHBlY3RhdGlvbnMgb2YgU3R1ZGVudCBQZXJmb3JtYW5jZSB7I290aGVyRXhwZWN0YXRpb25zfQoKU3R1ZGVudHMgaGF2ZSB0aGUgcmlnaHQgdG8gYSBkaXN0cmFjdGlvbi1mcmVlIGxlYXJuaW5nIGVudmlyb25tZW50LgpZb3UgaGF2ZSB0aGUgcmVzcG9uc2liaWxpdHkgdG8gaGVscCBjcmVhdGUgc3VjaCBhIGNsYXNzcm9vbSBlbnZpcm9ubWVudC4KUGxlYXNlIHRyZWF0IG90aGVyIHN0dWRlbnRzIGluIHRoZSBjbGFzcywgdGhlIFRBcywgYW5kIHRoZSBpbnN0cnVjdG9yIHdpdGggcmVzcGVjdC4KU3R1ZGVudHMgYXJlIGV4cGVjdGVkIHRvIGhlbHAgZWFjaCBvdGhlciBsZWFybiBhbmQgdG8gY29udHJpYnV0ZSBvdmVyYWxsIHRvIHRoZSBsZWFybmluZyBlbnZpcm9ubWVudCBvZiB0aGUgY291cnNlLgpBcnJpdmluZyBwcmVwYXJlZCBmb3IgY2xhc3MgaXMgcGFydCBvZiB0aGlzIGV4cGVjdGF0aW9uLgoKIyBVbml2ZXJzaXR5IFBvbGljaWVzIHsjVUlvd2FQb2xpY2llc30KCi0gW0FjY29tbW9kYXRpb25zIGZvciBTdHVkZW50cyB3aXRoIERpc2FiaWxpdGllc10oaHR0cHM6Ly9wcm92b3N0LnVpb3dhLmVkdS90ZWFjaGluZy1yZXNvdXJjZXMvY291cnNlLXN5bGxhYmktaW5mb3JtYXRpb24jYWNjb21tb2RhdGlvbnMtZm9yLXN0dWRlbnRzLXdpdGgtZGlzYWJpbGl0aWVzKQotIFtCYXNpYyBOZWVkcyBhbmQgU3VwcG9ydCBmb3IgU3R1ZGVudHNdKGh0dHBzOi8vcHJvdm9zdC51aW93YS5lZHUvdGVhY2hpbmctcmVzb3VyY2VzL2NvdXJzZS1zeWxsYWJpLWluZm9ybWF0aW9uI2Jhc2ljLW5lZWRzLWFuZC1zdXBwb3J0LWZvci1zdHVkZW50cykKLSBbQ2xhc3Nyb29tIEV4cGVjdGF0aW9uc10oaHR0cHM6Ly9wcm92b3N0LnVpb3dhLmVkdS90ZWFjaGluZy1yZXNvdXJjZXMvY291cnNlLXN5bGxhYmktaW5mb3JtYXRpb24jY2xhc3Nyb29tLWV4cGVjdGF0aW9ucykKLSBbRXhhbSBNYWtlLXVwIE93aW5nIHRvIEFic2VuY2VdKGh0dHBzOi8vb3BzbWFudWFsLnVpb3dhLmVkdS9zdHVkZW50cy9hYnNlbmNlcy1jbGFzcyM4LjEpCi0gW0ZyZWUgU3BlZWNoIGFuZCBFeHByZXNzaW9uXShodHRwczovL3Byb3Zvc3QudWlvd2EuZWR1L3RlYWNoaW5nLXJlc291cmNlcy9jb3Vyc2Utc3lsbGFiaS1pbmZvcm1hdGlvbiNmcmVlLXNwZWVjaC1hbmQtZXhwcmVzc2lvbikKLSBbTWVudGFsIEhlYWx0aF0oaHR0cHM6Ly9wcm92b3N0LnVpb3dhLmVkdS90ZWFjaGluZy1yZXNvdXJjZXMvY291cnNlLXN5bGxhYmktaW5mb3JtYXRpb24jbWVudGFsLWhlYWx0aCkKLSBbTWlsaXRhcnkgU2VydmljZSBPYmxpZ2F0aW9uc10oaHR0cHM6Ly9vcHNtYW51YWwudWlvd2EuZWR1L3N0dWRlbnRzL2Fic2VuY2VzLWNsYXNzIzguMykKLSBbTm9uLWRpc2NyaW1pbmF0aW9uXShodHRwczovL3Byb3Zvc3QudWlvd2EuZWR1L3RlYWNoaW5nLXJlc291cmNlcy9jb3Vyc2Utc3lsbGFiaS1pbmZvcm1hdGlvbiNub24tZGlzY3JpbWluYXRpb24tc3RhdGVtZW50KQotIFtSZWxpZ2lvdXMgSG9seSBEYXlzXShodHRwczovL29wc21hbnVhbC51aW93YS5lZHUvc3R1ZGVudHMvYWJzZW5jZXMtY2xhc3MjOC4yKQotIFtTZXh1YWwgSGFyYXNzbWVudC9NaXNjb25kdWN0IGFuZCBTdXBwb3J0aXZlIE1lYXN1cmVzXShodHRwczovL3Byb3Zvc3QudWlvd2EuZWR1L3RlYWNoaW5nLXJlc291cmNlcy9jb3Vyc2Utc3lsbGFiaS1pbmZvcm1hdGlvbiNzZXh1YWwtaGFyYXNzbWVudC0tc2V4dWFsLW1pc2NvbmR1Y3QtYW5kLXN1cHBvcnRpdmUtbWVhc3VyZXMpCi0gW1NoYXJpbmcgb2YgQ2xhc3MgUmVjb3JkaW5nc10oaHR0cHM6Ly9wcm92b3N0LnVpb3dhLmVkdS90ZWFjaGluZy1yZXNvdXJjZXMvY291cnNlLXN5bGxhYmktaW5mb3JtYXRpb24jc2hhcmluZy1vZi1jbGFzcy1yZWNvcmRpbmdzLWlmLWFwcHJvcHJpYXRlKQoKIyBDb3Vyc2UgUmVxdWVzdHMgeyNyZXF1ZXN0c30KCldlIGhhdmUgYSBjZW50cmFsaXplZCBsb2NhdGlvbiB0byBrZWVwIHRyYWNrIG9mIHJlcXVlc3RzLCBmb3JtcywgZXRjLiwgc28gd2UgY2FuIG1ha2Ugc3VyZSB3ZSBtZWV0IHlvdXIgbmVlZHMuCkNvdXJzZSByZXF1ZXN0cyBpbmNsdWRlLCBmb3IgaW5zdGFuY2UsIHJlcXVlc3RzIHRvIGpvaW4gYSBwZWVyIHN0dWR5IGdyb3VwLCBzZXR0aW5nIHVwIGEgdGltZSB0byByZXZpZXcgeW91ciBleGFtLCByZXF1ZXN0aW5nIGFjY29tbW9kYXRpb25zLCBldGMuClBsZWFzZSBzdWJtaXQgY291cnNlIHJlcXVlc3RzIChlLmcuLCB0byBqb2luIGEgcGVlciBzdHVkeSBncm91cCkgaGVyZTogaHR0cHM6Ly91aW93YS5xdWFsdHJpY3MuY29tL2pmZS9mb3JtL1NWXzFIVXlnNlphUjRDY2pXdS4KSWYgeW91IGhhdmUgYWNjZXNzaWJpbGl0eSBhY2NvbW1vZGF0aW9ucyBmcm9tIFN0dWRlbnQgRGlzYWJpbGl0eSBTZXJ2aWNlcyAoU0RTKSwgcGxlYXNlIHN1Ym1pdCB5b3VyIFNEUyBhY2NvbW1vZGF0aW9ucyBsZXR0ZXJzIGF0IHRoaXMgbGluay4KCiMgUmVzb3VyY2VzIGZvciBIZWxwIHsjcmVzb3VyY2VzfQoKLSBEcm9wLWluIHN0dWR5IGdyb3VwcyBhbmQgb25lLW9uLW9uZSB0dXRvcmluZzogb2ZmaWNlIGhvdXJzIHdpdGggVEEgb3IgaW5zdHJ1Y3RvcgotIEZvcm1hbCB0dXRvcmluZzogVHV0b3IgSW93YTogaHR0cHM6Ly90dXRvci51aW93YS5lZHUKLSBBY2FkZW1pYyBhY2NvbW1vZGF0aW9uczogaHR0cHM6Ly9zZHMuc3R1ZGVudGxpZmUudWlvd2EuZWR1Ci0gU3R1ZGVudCBjYXJlIGFuZCBhc3Npc3RhbmNlOiBodHRwczovL2Jhc2ljbmVlZHMudWlvd2EuZWR1L3Jlc291cmNlcy9zdHVkZW50LWNhcmUtYW5kLWFzc2lzdGFuY2UKClNvbWUgb2YgdGhlIHRvcGljcyBjb3ZlcmVkIGluIGNsYXNzIGludm9sdmUgcHJvYmxlbXMgdGhhdCBjYW4gYmUgcXVpdGUgY29tbW9uIGFtb25nIGNvbGxlZ2Ugc3R1ZGVudHMuCklmIHlvdSBmZWVsIHRoYXQgeW91IG9yIHNvbWVvbmUgeW91IGtub3cgbWF5IGJlIHN0cnVnZ2xpbmcgd2l0aCBhbiBhY2FkZW1pYywgZW1vdGlvbmFsLCBvciBwc3ljaG9sb2dpY2FsIHByb2JsZW0sIHRoZSBmb2xsb3dpbmcgb3JnYW5pemF0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciBhc3Npc3RhbmNlOgoKfCBTZXJ2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvbnRhY3QgSW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgVW5pdmVyc2l0eSBvZiBJb3dhIEFjYWRlbWljIEFkdmlzaW5nIENlbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzNTMtNTcwMCwgaHR0cHM6Ly9hZHZpc2luZ2NlbnRlci51aW93YS5lZHUgICAgICAgICAgICAgICAgICAgICAgIHwKfCBVbml2ZXJzaXR5IENvdW5zZWxpbmcgU2VydmljZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMzNS03Mjk0LCBodHRwczovL3d3dy51aW93YS5lZHUvdWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFN0dWRlbnQgSGVhbHRoIFNlcnZpY2UgLSBNZW50YWwgSGVhbHRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzM1LTgzOTQsIGh0dHBzOi8vc3R1ZGVudGhlYWx0aC51aW93YS5lZHUvc2VydmljZXMvcHN5Y2hpYXRyeSAgICB8CnwgVW5pdmVyc2l0eSBvZiBJb3dhIEhvc3BpdGFscyBhbmQgQ2xpbmljcyBBZHVsdCBQc3ljaGlhdHJ5IFNlcnZpY2VzIENsaW5pYyAgfCAzNTMtNjMxNCwgaHR0cHM6Ly93d3cudWloZWFsdGhjYXJlLm9yZy9Qc3ljaGlhdHJ5ICAgICAgICAgICAgICAgIHwKfCBTZWFzaG9yZSBDbGluaWMgKGluIHRoZSBVSSBEZXBhcnRtZW50IG9mIFBzeWNob2xvZ2ljYWwgYW5kIEJyYWluIFNjaWVuY2VzKSB8IDMzNS0yNDY3LCBodHRwczovL3BzeWNob2xvZ3kudWlvd2EuZWR1L3Jlc291cmNlcy9zZWFzaG9yZS1jbGluaWMgfAp8IFdvbWVuJ3MgUmVzb3VyY2UgYW5kIEFjdGlvbiBDZW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzM1LTE0ODYsIGh0dHBzOi8vd3JhYy51aW93YS5lZHUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgUmFwZSBWaWN0aW0gQWR2b2NhY3kgUHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMTktMzM1LTYwMDAgb3IgODAwLTIyOC0xNjI1LCBodHRwczovL3d3dy51aW93YS5lZHUvfnJ2YXAgICAgICAgIHwKfCBPZmZpY2Ugb2YgU2V4dWFsIE1pc2NvbmR1Y3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMxOS0zMzUtNjIwMCwgaHR0cHM6Ly9vc21yYy51aW93YS5lZHUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IENvbW1Vbml0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgODU1LTMyNS00Mjk2LCBodHRwczovL2J1aWx0Ynljb21tdW5pdHkub3JnL2NyaXNpcyAgICAgICAgICAgICAgICB8CnwgQ29tbXVuaXR5ICYgRmFtaWx5IFJlc291cmNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzNTEtNDM1NywgaHR0cHM6Ly93d3cuY2ZyaGVscHMub3JnLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKCjx1PklmIHlvdSBvciBzb21lb25lIHlvdSBrbm93IGlzIGNvbnRlbXBsYXRpbmcgc3VpY2lkZTwvdT4sIGVpdGhlciBjYWxsIG9yIHRleHQgdGhlIFN1aWNpZGUgYW5kIENyaXNpcyBMaWZlbGluZSBhdCA5ODgsIG9yIGNhbGwgOTExLgoKIyBEaXNjbGFpbWVyIHsjZGlzY2xhaW1lcn0KClRoaXMgc3lsbGFidXMgaXMgc3ViamVjdCB0byBjaGFuZ2UuCkFueSBjaGFuZ2VzIHdpbGwgYmUgZGlzY3Vzc2VkIGluIGNsYXNzLCB2aWEgZW1haWwsIGFuZC9vciBvbiBbSUNPTl0oaHR0cHM6Ly9pY29uLnVpb3dhLmVkdSkuCg==