1 Research Question & Response Variable

What is your research question and your response variable? Give a detailed answer.

In this case, our research goal is to assess the individual and interactive effects of post-operative analgesia (POPM), physical therapy frequency (PTF), mobilization timing (TM), and patient education (PEP) on the recovery time of surgical patients. As such, our response variable is defined as the number of days required for a patient to return to clinical baseline following a common operative procedure.

2 Factors, Levels, and Design Choice

List your factors and their levels. What is your design choice? Discuss any constraints or restrictions on randomization. Report your design table which includes run randomization. Discuss how you should employ randomization and blocking in this experiment.

The factors in this experiment are intended to examine differences in two approaches for four common clinical situations encountered during the course of surgical rehabilitation. For post-operative analgesia (POPM), patients were assigned to receive non-opioid (NSAID & acetaminophen cycling) or opioid analgesia (oxycodone). For physical therapy frequency (PTF), patients were enrolled in either daily or alternating (every other day) physical therapy sessions. Additionally, for mobilization timing (TM), patients were instructed to begin physical therapy sessions either 24 (rapid) or 72 hours (delayed) post-procedure. Lastly, for patient education (PEP), patients were provided with two common forms of clinical education: pamphlets or audiovisual instruction.

For this trial, a complete 2^4 factorial was employed. Notably, baseline physical health has been shown to have a profound impact on surgical recovery time. To mitigate this variability we employed a randomized complete block design, grouping participants into three blocks: poor, fair, and good physical health. This constraint was necessary because baseline health condition could not be randomly assigned, as it could lead to confounded results. Consequently, all 16 treatment conditions were performed across each of the three blocks, resulting in 48 total experimental runs. Patients were randomly assigned to each of the 16 conditions within each block, ensuring that any external factors were balanced across all treatment levels.

3 Analysis Results

Write a comprehensive paragraph on the results of your statistical analysis. Use APA style. Refer to the interaction plots if necessary.

A 2⁴ factorial ANOVA with blocking was conducted to examine the effects of post-operative pain management protocol (POPM), physical therapy frequency (PTF), timing of mobilization (TM), and type of patient education (PEP) on patient recovery time (days), controlling for baseline health status (Block). The overall model was statistically significant, F(17, 30) = 16.94, p < .001. Blocking on baseline health was highly significant, F(2, 30) = 66.27, p < .001, confirming that patients’ pre-surgical health status substantially influenced recovery time and that blocking was a necessary and effective design choice. The main effect of pain management protocol was significant, F(1, 30) = 37.17, p < .001, as was physical therapy frequency, F(1, 30) = 20.14, p < .001, and patient education, F(1, 30) = 6.69, p = .015. The most notable finding was the highly significant Pain Management × PT Frequency interaction, F(1, 30) = 74.85, p < .001, indicating that the effect of pain management on recovery time depends on the frequency of physical therapy received. As shown in the stratified interaction plots, this crossing pattern was consistent across all three baseline health groups, suggesting the interaction is robust and not driven by any particular patient subgroup. Additionally, a significant three-way interaction among pain management, mobilization timing, and patient education was observed, F(1, 30) = 7.14, p = .012. Timing of mobilization alone did not reach significance, F(1, 30) = 1.14, p = .295. Since Timing of Mobilization and Patient Education had the weakest interaction An interaction plot was split into health blocks. This showed that Poor Health block had a significant interaction between Mobilization and Patient Eduacation where as good health the lines are parallel.

Response : response
                 Df Sum Sq Mean Sq F value    Pr(>F)    
MODEL            17 65.382  3.8460 16.9385 6.105e-11 ***
 Block            2 30.096 15.0479 66.2740 9.820e-12 ***
 POPM             1  8.440  8.4399 37.1712 1.064e-06 ***
 PTF              1  4.573  4.5732 20.1414 9.847e-05 ***
 POPM:PTF         1 16.994 16.9943 74.8466 1.192e-09 ***
 TM               1  0.258  0.2578  1.1356   0.29509    
 POPM:TM          1  0.719  0.7186  3.1650   0.08537 .  
 PTF:TM           1  0.325  0.3246  1.4298   0.24116    
 POPM:PTF:TM      1  0.262  0.2621  1.1544   0.29120    
 PEP              1  1.518  1.5184  6.6875   0.01481 *  
 POPM:PEP         1  0.065  0.0648  0.2852   0.59723    
 PTF:PEP          1  0.180  0.1797  0.7912   0.38081    
 POPM:PTF:PEP     1  0.197  0.1967  0.8664   0.35940    
 TM:PEP           1  0.000  0.0001  0.0005   0.98183    
 POPM:TM:PEP      1  1.621  1.6206  7.1373   0.01208 *  
 PTF:TM:PEP       1  0.131  0.1306  0.5751   0.45417    
 POPM:PTF:TM:PEP  1  0.004  0.0043  0.0191   0.89096    
RESIDUALS        30  6.812  0.2271                      
CORRECTED TOTAL  47 72.193                              
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

[1] 0.1384528

-- gpr: Power Analysis for F-tests -----------------------------
  Test:                anova.fixed.special
  Analysis:            Post Hoc: Compute achieved power
------------------------------------------------------------------
  Effect size (f):     0.1385
  Alpha (α):           0.050000
  Power (1-β):         0.1555782
  Beta (β):            0.8444
  Noncentrality (λ):   0.9201199
  Critical F:          4.0517487
  Numerator df:        1
  Denominator df:      46
  Sample size per group: 24
  Total sample size:     48
------------------------------------------------------------------

4 Power

Calculate the post-hoc power for this design. Use the effect size from your output.

The four-way interaction effect size is eta2=0.1384528. Degrees of freedom for the power calculation is df=1.

With a Cohen’s F of 0.1385 the achived power for this experiment is only 0.1557. This mean WE achieved a power of 15.57%. This design was extremely underpowered for detecting the four-way interaction.This means that even if the four-way interaction truly exists, this design would fail to detect it approximately 84% of the time. Future designs should conduct an a priori power analysis to determine the required sample size before data collection

5 Residual Analysis

Are your assumptions met? Use the plots to support your argument.

The residual histogram shows a relatively normal distribution, albeit with a slight left skew. However, the skew is not enough to violate assumptions of normality.

Residuals across all three health blocks appear randomly scattered around zero with no systematic trends across run order, suggesting the independence and constant variance assumptions are reasonably met. The slightly greater spread in the Poor Health block is consistent with the clinical expectation that patients in poor baseline health exhibit more variable recovery trajectories.

6 Factorial Regularities

Do the results of your factorial experiment display sparsity, heredity, and hierarchy? Support your answer with your results.

Of the total 15 effects, only 6 show a significant result, indicating sparsity. These significant effects are from POPM, PTF, and PEP for main effects, and POPM:PTF, POPM:TM, POMP:TM:PEP for interaction effects. Of the main effects, POMP and PTF are significant with p < .001 , while PEP is significant at the p = .05 level. The POPM:PTF interaction is significant with p < .001, POPM:TM is significant at the p = 0.1 level, and POPM:TM:PEP is significant at the p = .05 level. Here we see hierarchy at play, as main effects are larger overall than interaction effects are. Finally, within the interaction effects, all have at least one significant parent term included, indicating heredity.

7 Limitations & What You’d Do Next

Discuss issues you see with this design. Do you have issues with Confounding effects? Are there design weaknesses? Give follow up experiment ideas.

Patient education was reduced to pamphlets versus audiovisual instruction, omitting potentially important delivery factors such as health literacy, language barriers, family involvement, and patient engagement. Second, the design does not account for patient compliance a patient assigned to daily physical therapy may not attend all sessions, and a patient receiving audiovisual education may not engage with it meaningfully. This creats a gap between assigned and received treatment that could bias results toward the null. Third, mobilization timing failed to reach significance despite strong clinical evidence from Enhanced Recovery After Surgery (ERAS) protocols supporting early mobilization as one of the most impactful post-surgical interventions. This may reflect insufficient power with only 16 observations per block to detect its effect at the chosen effect size.

For follow-up work, a response surface methodology (RSM) design could optimize the significant factors beyond binary levels identifying the ideal PT frequency and analgesia dosing combination that minimizes recovery time. Future studies should also consider a split-plot design if analgesia protocols are set at the ward level rather than individually assigned, as this would better reflect real clinical workflow. Expanding the blocking structure to include additional patient characteristics such as age group or surgical complexity would further strengthen internal validity and generalizability

LS0tCnRpdGxlOiAiU1RBMzIwIEZpbmFsIEV4YW0gVGVhbSAyIgphdXRob3I6ICJTdGV2ZSBKZWFuLUJhcHRpc3RlLCBKYW1lcyBTYW5kZXJzLCBHYWxlZSBHcmVpc2xlciIKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDogCiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRvY19jb2xsYXBzZWQ6IHllcwogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMKICAgIHNtb290aF9zY3JvbGw6IHllcwogICAgdGhlbWU6IGx1bWVuCiAgcGRmX2RvY3VtZW50OiAKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICBmaWdfd2lkdGg6IDMKICAgIGZpZ19oZWlnaHQ6IDMKICB3b3JkX2RvY3VtZW50OiAKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIGtlZXBfbWQ6IHllcwplZGl0b3Jfb3B0aW9uczogCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQotLS0KCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0KI1RPQzo6YmVmb3JlIHsKICBjb250ZW50OiAiVGFibGUgb2YgQ29udGVudHMiOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtc2l6ZTogMS4yZW07CiAgZGlzcGxheTogYmxvY2s7CiAgY29sb3I6IG5hdnk7CiAgbWFyZ2luLWJvdHRvbTogMTBweDsKfQoKCmRpdiNUT0MgbGkgeyAgICAgLyogdGFibGUgb2YgY29udGVudCAgKi8KICAgIGxpc3Qtc3R5bGU6dXBwZXItcm9tYW47CiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7CiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpub25lOwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowOwp9CgpoMS50aXRsZSB7ICAgIC8qIGxldmVsIDEgaGVhZGVyIG9mIHRpdGxlICAqLwogIGZvbnQtc2l6ZTogMjJweDsKICBmb250LXdlaWdodDogYm9sZDsKICBjb2xvcjogRGFya1JlZDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOwp9CgpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogIGZvbnQtc2l6ZTogMTVweDsKICBmb250LXdlaWdodDogYm9sZDsKICBmb250LWZhbWlseTogc3lzdGVtLXVpOwogIGNvbG9yOiBuYXZ5OwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgZm9udC1zaXplOiAxOHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsKICBjb2xvcjogRGFya0JsdWU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgpoMSB7IC8qIEhlYWRlciAxIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgICBmb250LXNpemU6IDIwcHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IGRhcmtyZWQ7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpoMiB7IC8qIEhlYWRlciAyIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IG5hdnk7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpoMyB7IC8qIEhlYWRlciAzIC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgICBmb250LXNpemU6IDE2cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IG5hdnk7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpoNCB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgICBmb250LXNpemU6IDE0cHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBkYXJrcmVkOwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKLyogQWRkIGRvdHMgYWZ0ZXIgbnVtYmVyZWQgaGVhZGVycyAqLwouaGVhZGVyLXNlY3Rpb24tbnVtYmVyOjphZnRlciB7CiAgY29udGVudDogIi4iOwoKYm9keSB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0KCi5oaWdobGlnaHRtZSB7IGJhY2tncm91bmQtY29sb3I6eWVsbG93OyB9CgpwIHsgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgfQoKfQpgYGAKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEYsIGNvbW1lbnQ9TkEsIHdhcm5pbmc9RikKCiMgU2V0dXAgYW5kIERlc2lnbiBEZWZpbml0aW9uCmlmKCFyZXF1aXJlKGdwcikpIGRldnRvb2xzOjppbnN0YWxsX2dpdGh1Yigic3RldmVqYjEvZ3ByIikKIyBMb2FkIHJlcXVpcmVkIGxpYnJhcmllcwpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShlZmZlY3RzKSAgICAjIEZvciBpbnRlcmFjdGlvbiBwbG90cwpsaWJyYXJ5KHNhc0xNKQpsaWJyYXJ5KEZyRjIpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoZWZmZWN0c2l6ZSkKbGlicmFyeShrYWJsZUV4dHJhKQpsaWJyYXJ5KGdwcikKCmBgYAoKIyBSZXNlYXJjaCBRdWVzdGlvbiAmIFJlc3BvbnNlIFZhcmlhYmxlCgpXaGF0IGlzIHlvdXIgcmVzZWFyY2ggcXVlc3Rpb24gYW5kIHlvdXIgcmVzcG9uc2UgdmFyaWFibGU/IEdpdmUgYSBkZXRhaWxlZCBhbnN3ZXIuCgpJbiB0aGlzIGNhc2UsIG91ciByZXNlYXJjaCBnb2FsIGlzIHRvIGFzc2VzcyB0aGUgaW5kaXZpZHVhbCBhbmQgaW50ZXJhY3RpdmUgZWZmZWN0cyBvZiBwb3N0LW9wZXJhdGl2ZSBhbmFsZ2VzaWEgKFBPUE0pLCBwaHlzaWNhbCB0aGVyYXB5IGZyZXF1ZW5jeSAoUFRGKSwgbW9iaWxpemF0aW9uIHRpbWluZyAoVE0pLCBhbmQgcGF0aWVudCBlZHVjYXRpb24gKFBFUCkgb24gdGhlIHJlY292ZXJ5IHRpbWUgb2Ygc3VyZ2ljYWwgcGF0aWVudHMuIEFzIHN1Y2gsIG91ciByZXNwb25zZSB2YXJpYWJsZSBpcyBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgZGF5cyByZXF1aXJlZCBmb3IgYSBwYXRpZW50IHRvIHJldHVybiB0byBjbGluaWNhbCBiYXNlbGluZSBmb2xsb3dpbmcgYSBjb21tb24gb3BlcmF0aXZlIHByb2NlZHVyZS4KCiMgRmFjdG9ycywgTGV2ZWxzLCBhbmQgRGVzaWduIENob2ljZQoKTGlzdCB5b3VyIGZhY3RvcnMgYW5kIHRoZWlyIGxldmVscy4gV2hhdCBpcyB5b3VyIGRlc2lnbiBjaG9pY2U/IERpc2N1c3MgYW55IGNvbnN0cmFpbnRzIG9yIHJlc3RyaWN0aW9ucyBvbiByYW5kb21pemF0aW9uLiBSZXBvcnQgeW91ciBkZXNpZ24gdGFibGUgd2hpY2ggaW5jbHVkZXMgcnVuIHJhbmRvbWl6YXRpb24uIERpc2N1c3MgaG93IHlvdSBzaG91bGQgZW1wbG95IHJhbmRvbWl6YXRpb24gYW5kIGJsb2NraW5nIGluIHRoaXMgZXhwZXJpbWVudC4KClRoZSBmYWN0b3JzIGluIHRoaXMgZXhwZXJpbWVudCBhcmUgaW50ZW5kZWQgdG8gZXhhbWluZSBkaWZmZXJlbmNlcyBpbiB0d28gYXBwcm9hY2hlcyBmb3IgZm91ciBjb21tb24gY2xpbmljYWwgc2l0dWF0aW9ucyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIGNvdXJzZSBvZiBzdXJnaWNhbCByZWhhYmlsaXRhdGlvbi4gRm9yIHBvc3Qtb3BlcmF0aXZlIGFuYWxnZXNpYSAoUE9QTSksIHBhdGllbnRzIHdlcmUgYXNzaWduZWQgdG8gcmVjZWl2ZSBub24tb3Bpb2lkIChOU0FJRCAmIGFjZXRhbWlub3BoZW4gY3ljbGluZykgb3Igb3Bpb2lkIGFuYWxnZXNpYSAob3h5Y29kb25lKS4gRm9yIHBoeXNpY2FsIHRoZXJhcHkgZnJlcXVlbmN5IChQVEYpLCBwYXRpZW50cyB3ZXJlIGVucm9sbGVkIGluIGVpdGhlciBkYWlseSBvciBhbHRlcm5hdGluZyAoZXZlcnkgb3RoZXIgZGF5KSBwaHlzaWNhbCB0aGVyYXB5IHNlc3Npb25zLiBBZGRpdGlvbmFsbHksIGZvciBtb2JpbGl6YXRpb24gdGltaW5nIChUTSksIHBhdGllbnRzIHdlcmUgaW5zdHJ1Y3RlZCB0byBiZWdpbiBwaHlzaWNhbCB0aGVyYXB5IHNlc3Npb25zIGVpdGhlciAyNCAocmFwaWQpIG9yIDcyIGhvdXJzIChkZWxheWVkKSBwb3N0LXByb2NlZHVyZS4gTGFzdGx5LCBmb3IgcGF0aWVudCBlZHVjYXRpb24gKFBFUCksIHBhdGllbnRzIHdlcmUgcHJvdmlkZWQgd2l0aCB0d28gY29tbW9uIGZvcm1zIG9mIGNsaW5pY2FsIGVkdWNhdGlvbjogcGFtcGhsZXRzIG9yIGF1ZGlvdmlzdWFsIGluc3RydWN0aW9uLgoKIApGb3IgdGhpcyB0cmlhbCwgYSBjb21wbGV0ZSAyXjQgZmFjdG9yaWFsIHdhcyBlbXBsb3llZC4gTm90YWJseSwgYmFzZWxpbmUgcGh5c2ljYWwgaGVhbHRoIGhhcyBiZWVuIHNob3duIHRvIGhhdmUgYSBwcm9mb3VuZCBpbXBhY3Qgb24gc3VyZ2ljYWwgcmVjb3ZlcnkgdGltZS4gVG8gbWl0aWdhdGUgdGhpcyB2YXJpYWJpbGl0eSB3ZSBlbXBsb3llZCBhIHJhbmRvbWl6ZWQgY29tcGxldGUgYmxvY2sgZGVzaWduLCBncm91cGluZyBwYXJ0aWNpcGFudHMgaW50byB0aHJlZSBibG9ja3M6IHBvb3IsIGZhaXIsIGFuZCBnb29kIHBoeXNpY2FsIGhlYWx0aC4gVGhpcyBjb25zdHJhaW50IHdhcyBuZWNlc3NhcnkgYmVjYXVzZSBiYXNlbGluZSBoZWFsdGggY29uZGl0aW9uIGNvdWxkIG5vdCBiZSByYW5kb21seSBhc3NpZ25lZCwgYXMgaXQgY291bGQgbGVhZCB0byBjb25mb3VuZGVkIHJlc3VsdHMuIENvbnNlcXVlbnRseSwgYWxsIDE2IHRyZWF0bWVudCBjb25kaXRpb25zIHdlcmUgcGVyZm9ybWVkIGFjcm9zcyBlYWNoIG9mIHRoZSB0aHJlZSBibG9ja3MsIHJlc3VsdGluZyBpbiA0OCB0b3RhbCBleHBlcmltZW50YWwgcnVucy4gUGF0aWVudHMgd2VyZSByYW5kb21seSBhc3NpZ25lZCB0byBlYWNoIG9mIHRoZSAxNiBjb25kaXRpb25zIHdpdGhpbiBlYWNoIGJsb2NrLCBlbnN1cmluZyB0aGF0IGFueSBleHRlcm5hbCBmYWN0b3JzIHdlcmUgYmFsYW5jZWQgYWNyb3NzIGFsbCB0cmVhdG1lbnQgbGV2ZWxzLgoKYGBge3IgZGVzaWduLCBpbmNsdWRlPUZ9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBEZWZpbmUgRmFjdG9ycyBhbmQgTGV2ZWxzCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzZXQuc2VlZCgxMjMpICMgUmVwcm9kdWNpYmlsaXR5CiMgRXhhbXBsZTogMl40IGZhY3RvcmlhbCB3aXRoIG9wdGlvbmFsIGJsb2NraW5nCgpiYXNlX2Rlc2lnbiA8LSBleHBhbmQuZ3JpZCgKICBQT1BNID0gYygiTG93IiwgIkhpZ2giKSwKICBQVEYgPSBjKCJMb3ciLCAiSGlnaCIpLAogIFRNID0gYygiTG93IiwgIkhpZ2giKSwKICBQRVAgPSBjKCJMb3ciLCAiSGlnaCIpCikKCiNDcmVhdGUgYmxvY2tpbmcgdmFyaWFibGUgb24gcmVwbGljYXRpb24KCmRlc2lnbiA8LSBiYXNlX2Rlc2lnbltyZXAoMTpucm93KGJhc2VfZGVzaWduKSwgdGltZXMgPSAzKSwgXQoKZGVzaWduJEJsb2NrIDwtIHJlcChjKCJQb29yIEhlYWx0aCIsICJGYWlyIEhlYWx0aCIsICJHb29kIEhlYWx0aCIpLCAKICAgICAgICAgICAgICAgICAgICBlYWNoID0gbnJvdyhiYXNlX2Rlc2lnbikpCgojcmFuZG9taXphdGlvbiB3aXRoaW4gYmxvY2sKCmRlc2lnbiA8LSBkZXNpZ24gJT4lCiAgZ3JvdXBfYnkoQmxvY2spICU+JQogIG11dGF0ZShSdW5PcmRlciA9IHNhbXBsZSgxOm4oKSkpICU+JQogIHVuZ3JvdXAoKQoKZGVzaWduIDwtIGRlc2lnbiAlPiUKICBhcnJhbmdlKEJsb2NrLCBSdW5PcmRlcikgJT4lCiAgbXV0YXRlKEdsb2JhbFJ1biA9IHJvd19udW1iZXIoKSkKCgpkZXNpZ24gJT4lCiAga2JsKGNhcHRpb249IjJeNCBVbnJlcGxpY2F0ZWQgRmFjdG9yaWFsLVJhbmRvbWl6YXRpb24gU2NoZWR1bGUiLCBhbGlnbj0iYyIpICU+JQogIGthYmxlX2NsYXNzaWMoZnVsbF93aWR0aD1GKSAlPiUKICBjb2x1bW5fc3BlYyg1LCB3aWR0aD0iM2NtIikKYGBgCgpgYGB7ciBzaW11bGF0aW9uIGRhdGEsIGluY2x1ZGU9Rn0Kc2V0LnNlZWQoMTIzKSAjIFJlcHJvZHVjaWJpbGl0eQojIFNpbXVsYXRlIFJlc3BvbnNlIERhdGEKIyBEZWZpbmUgdHJ1ZSBlZmZlY3RzCm11ID0gNi40CmVmZmVjdF9BID0gLjUKZWZmZWN0X0IgPSAtLjMKZWZmZWN0X0MgPSAwCmVmZmVjdF9EID0gLS4xCmludGVyYWN0aW9uX0FCID0gLjYKaW50ZXJhY3Rpb25fQUNEID0gLS4yCgojIENvbnZlcnQgZmFjdG9ycyB0byBpbmRpY2F0b3JzCnNpbSA9IGRlc2lnbiAlPiUKICBtdXRhdGUoCiAgICBBID0gaWZlbHNlKFBPUE0gPT0gIkhpZ2giLCAxLCAtMSksCiAgICBCID0gaWZlbHNlKFBURiA9PSAiSGlnaCIsIDEsIC0xKSwKICAgIEMgPSBpZmVsc2UoVE0gPT0gIkhpZ2giLCAxLCAtMSksCiAgICBEID0gaWZlbHNlKFBFUCA9PSAiSGlnaCIsIDEsIC0xKSAgIAogICkKCiMgQmxvY2sgZWZmZWN0cyAoLjcgRGF5cyBSZW1vdmVkICBmb3IgR29vZCBhbmQgMSBEYXlzIGFkZGVkIGZvciBQb29yIEZyb20gbXUpCmJsb2NrX2VmZmVjdCA8LSBjKCJQb29yIEhlYWx0aCIgPSAxLCAiRmFpciBIZWFsdGgiID0gMCwgIkdvb2QgSGVhbHRoIiA9IC0wLjcpCgoKIyBHZW5lcmF0ZSByZXNwb25zZQpzaW0kcmVzcG9uc2UgPSBtdSArCiAgYmxvY2tfZWZmZWN0W2FzLmNoYXJhY3RlcihzaW0kQmxvY2spXSArCiAgZWZmZWN0X0EgKiBzaW0kQSArCiAgZWZmZWN0X0IgKiBzaW0kQiArCiAgZWZmZWN0X0MgKiBzaW0kQyArCiAgZWZmZWN0X0QgKiBzaW0kRCArIAogIGludGVyYWN0aW9uX0FCICogc2ltJEEgKiBzaW0kQiArCiAgaW50ZXJhY3Rpb25fQUNEICogc2ltJEEgKiBzaW0kQyAqIHNpbSREICsKICBybm9ybShucm93KHNpbSksIG1lYW4gPSAwLCBzZCA9IC41KQoKYGBgCgojIEFuYWx5c2lzIFJlc3VsdHMKCldyaXRlIGEgY29tcHJlaGVuc2l2ZSBwYXJhZ3JhcGggb24gdGhlIHJlc3VsdHMgb2YgeW91ciBzdGF0aXN0aWNhbCBhbmFseXNpcy4gVXNlIEFQQSBzdHlsZS4gUmVmZXIgdG8gdGhlIGludGVyYWN0aW9uIHBsb3RzIGlmIG5lY2Vzc2FyeS4KCgpBIDLigbQgZmFjdG9yaWFsIEFOT1ZBIHdpdGggYmxvY2tpbmcgd2FzIGNvbmR1Y3RlZCB0byBleGFtaW5lIHRoZSBlZmZlY3RzIG9mIHBvc3Qtb3BlcmF0aXZlIHBhaW4gbWFuYWdlbWVudCBwcm90b2NvbCAoUE9QTSksIHBoeXNpY2FsIHRoZXJhcHkgZnJlcXVlbmN5IChQVEYpLCB0aW1pbmcgb2YgbW9iaWxpemF0aW9uIChUTSksIGFuZCB0eXBlIG9mIHBhdGllbnQgZWR1Y2F0aW9uIChQRVApIG9uIHBhdGllbnQgcmVjb3ZlcnkgdGltZSAoZGF5cyksIGNvbnRyb2xsaW5nIGZvciBiYXNlbGluZSBoZWFsdGggc3RhdHVzIChCbG9jaykuIFRoZSBvdmVyYWxsIG1vZGVsIHdhcyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50LCBGKDE3LCAzMCkgPSAxNi45NCwgcCA8IC4wMDEuIEJsb2NraW5nIG9uIGJhc2VsaW5lIGhlYWx0aCB3YXMgaGlnaGx5IHNpZ25pZmljYW50LCBGKDIsIDMwKSA9IDY2LjI3LCBwIDwgLjAwMSwgY29uZmlybWluZyB0aGF0IHBhdGllbnRzJyBwcmUtc3VyZ2ljYWwgaGVhbHRoIHN0YXR1cyBzdWJzdGFudGlhbGx5IGluZmx1ZW5jZWQgcmVjb3ZlcnkgdGltZSBhbmQgdGhhdCBibG9ja2luZyB3YXMgYSBuZWNlc3NhcnkgYW5kIGVmZmVjdGl2ZSBkZXNpZ24gY2hvaWNlLiBUaGUgbWFpbiBlZmZlY3Qgb2YgcGFpbiBtYW5hZ2VtZW50IHByb3RvY29sIHdhcyBzaWduaWZpY2FudCwgRigxLCAzMCkgPSAzNy4xNywgcCA8IC4wMDEsIGFzIHdhcyBwaHlzaWNhbCB0aGVyYXB5IGZyZXF1ZW5jeSwgRigxLCAzMCkgPSAyMC4xNCwgcCA8IC4wMDEsIGFuZCBwYXRpZW50IGVkdWNhdGlvbiwgRigxLCAzMCkgPSA2LjY5LCBwID0gLjAxNS4gVGhlIG1vc3Qgbm90YWJsZSBmaW5kaW5nIHdhcyB0aGUgaGlnaGx5IHNpZ25pZmljYW50IFBhaW4gTWFuYWdlbWVudCDDlyBQVCBGcmVxdWVuY3kgaW50ZXJhY3Rpb24sIEYoMSwgMzApID0gNzQuODUsIHAgPCAuMDAxLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGVmZmVjdCBvZiBwYWluIG1hbmFnZW1lbnQgb24gcmVjb3ZlcnkgdGltZSBkZXBlbmRzIG9uIHRoZSBmcmVxdWVuY3kgb2YgcGh5c2ljYWwgdGhlcmFweSByZWNlaXZlZC4gQXMgc2hvd24gaW4gdGhlIHN0cmF0aWZpZWQgaW50ZXJhY3Rpb24gcGxvdHMsIHRoaXMgY3Jvc3NpbmcgcGF0dGVybiB3YXMgY29uc2lzdGVudCBhY3Jvc3MgYWxsIHRocmVlIGJhc2VsaW5lIGhlYWx0aCBncm91cHMsIHN1Z2dlc3RpbmcgdGhlIGludGVyYWN0aW9uIGlzIHJvYnVzdCBhbmQgbm90IGRyaXZlbiBieSBhbnkgcGFydGljdWxhciBwYXRpZW50IHN1Ymdyb3VwLiBBZGRpdGlvbmFsbHksIGEgc2lnbmlmaWNhbnQgdGhyZWUtd2F5IGludGVyYWN0aW9uIGFtb25nIHBhaW4gbWFuYWdlbWVudCwgbW9iaWxpemF0aW9uIHRpbWluZywgYW5kIHBhdGllbnQgZWR1Y2F0aW9uIHdhcyBvYnNlcnZlZCwgRigxLCAzMCkgPSA3LjE0LCBwID0gLjAxMi4gVGltaW5nIG9mIG1vYmlsaXphdGlvbiBhbG9uZSBkaWQgbm90IHJlYWNoIHNpZ25pZmljYW5jZSwgRigxLCAzMCkgPSAxLjE0LCBwID0gLjI5NS4KU2luY2UgVGltaW5nIG9mIE1vYmlsaXphdGlvbiBhbmQgUGF0aWVudCBFZHVjYXRpb24gaGFkIHRoZSB3ZWFrZXN0IGludGVyYWN0aW9uIEFuIGludGVyYWN0aW9uIHBsb3Qgd2FzIHNwbGl0IGludG8gaGVhbHRoIGJsb2Nrcy4gVGhpcyBzaG93ZWQgdGhhdCBQb29yIEhlYWx0aCBibG9jayBoYWQgYSBzaWduaWZpY2FudCBpbnRlcmFjdGlvbiBiZXR3ZWVuIE1vYmlsaXphdGlvbiBhbmQgUGF0aWVudCBFZHVhY2F0aW9uIHdoZXJlIGFzIGdvb2QgaGVhbHRoIHRoZSBsaW5lcyBhcmUgcGFyYWxsZWwuCgpgYGB7ciBBTk9WQSwgaW5jbHVkZT1UfQoKIyBGYWN0b3JpYWwgQU5PVkEgCmFvdjEocmVzcG9uc2UgfiBCbG9jayArIFBPUE0gKiBQVEYgKiBUTSAqIFBFUCwgc2ltKQoKCm1vZGVsID0gbG0ocmVzcG9uc2UgfiBCbG9jayArIFBPUE0gKiBQVEYgKiBUTSAqIFBFUCwgZGF0YSA9IHNpbSkKYW92ID0gYW92KG1vZGVsKQoKCgpgYGAKCmBgYHtyIHBsb3RzLCBpbmNsdWRlPVR9CgojIEludGVyYWN0aW9uIFBsb3RzCgpwYXIobWZyb3cgPSBjKDEsIDEpKQoKIyBCYXNlIFIgaW50ZXJhY3Rpb24gcGxvdAojQUIKaW50ZXJhY3Rpb24ucGxvdCgKICB4LmZhY3RvciA9IHNpbSRQT1BNLAogIHRyYWNlLmZhY3RvciA9IHNpbSRQVEYsCiAgcmVzcG9uc2UgPSBzaW0kcmVzcG9uc2UsCiAgbWFpbiA9ICJQYWluIE1hbmFnZW1lbnQgw5cgUFQgRnJlcXVlbmN5IiwKICB4bGFiID0gIlBhaW4gTWFuYWdlbWVudCBQcm90b2NvbCIsCiAgeWxhYiA9ICJNZWFuIFJlY292ZXJ5IFRpbWUgKGRheXMpIiwKICB0cmFjZS5sYWJlbCA9ICJQVCBGcmVxdWVuY3kiLAogIHR5cGUgPSAiYiIsCiAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwKICBwY2ggPSBjKDE5LCAxNykKKQojQUMKaW50ZXJhY3Rpb24ucGxvdCgKICB4LmZhY3RvciA9IHNpbSRQT1BNLAogIHRyYWNlLmZhY3RvciA9IHNpbSRUTSwKICByZXNwb25zZSA9IHNpbSRyZXNwb25zZSwKICBtYWluID0gIlBhaW4gTWFuYWdlbWVudCDDlyBUaW1pbmcgb2YgTW9iaWxpemF0aW9uIiwKICB4bGFiID0gIlBhaW4gTWFuYWdlbWVudCBQcm90b2NvbCIsCiAgeWxhYiA9ICJNZWFuIFJlY292ZXJ5IFRpbWUgKGRheXMpIiwKICB0cmFjZS5sYWJlbCA9ICJNb2JpbGl6YXRpb24iLAogIHR5cGUgPSAiYiIsCiAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwKICBwY2ggPSBjKDE5LCAxNykKKQojQUQKaW50ZXJhY3Rpb24ucGxvdCgKICB4LmZhY3RvciA9IHNpbSRQT1BNLAogIHRyYWNlLmZhY3RvciA9IHNpbSRQRVAsCiAgcmVzcG9uc2UgPSBzaW0kcmVzcG9uc2UsCiAgbWFpbiA9ICJQYWluIE1hbmFnZW1lbnQgw5cgUGF0aWVudCBFZHVjYXRpb24iLAogIHhsYWIgPSAiUGFpbiBNYW5hZ2VtZW50IFByb3RvY29sIiwKICB5bGFiID0gIk1lYW4gUmVjb3ZlcnkgVGltZSAoZGF5cykiLAogIHRyYWNlLmxhYmVsID0gIkVkdWNhdGlvbiIsCiAgdHlwZSA9ICJiIiwKICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLAogIHBjaCA9IGMoMTksIDE3KQopCiNCQwppbnRlcmFjdGlvbi5wbG90KAogIHguZmFjdG9yID0gc2ltJFBURiwKICB0cmFjZS5mYWN0b3IgPSBzaW0kVE0sCiAgcmVzcG9uc2UgPSBzaW0kcmVzcG9uc2UsCiAgbWFpbiA9ICJQVCBGcmVxdWVuY3kgw5cgVGltaW5nIG9mIE1vYmlsaXphdGlvbiIsCiAgeGxhYiA9ICJQVCBGcmVxdWVuY3kiLAogIHlsYWIgPSAiTWVhbiBSZWNvdmVyeSBUaW1lIChkYXlzKSIsCiAgdHJhY2UubGFiZWwgPSAiTW9iaWxpemF0aW9uIiwKICB0eXBlID0gImIiLAogIGNvbCA9IGMoImJsdWUiLCAicmVkIiksCiAgcGNoID0gYygxOSwgMTcpCikKI0JECmludGVyYWN0aW9uLnBsb3QoCiAgeC5mYWN0b3IgPSBzaW0kUFRGLAogIHRyYWNlLmZhY3RvciA9IHNpbSRQRVAsCiAgcmVzcG9uc2UgPSBzaW0kcmVzcG9uc2UsCiAgbWFpbiA9ICJQVCBGcmVxdWVuY3kgw5cgUGF0aWVudCBFZHVjYXRpb24iLAogIHhsYWIgPSAiUFQgRnJlcXVlbmN5IiwKICB5bGFiID0gIk1lYW4gUmVjb3ZlcnkgVGltZSAoZGF5cykiLAogIHRyYWNlLmxhYmVsID0gIkVkdWNhdGlvbiIsCiAgdHlwZSA9ICJiIiwKICBjb2wgPSBjKCJibHVlIiwgInJlZCIpLAogIHBjaCA9IGMoMTksIDE3KQopCiNDRAppbnRlcmFjdGlvbi5wbG90KAogIHguZmFjdG9yID0gc2ltJFRNLAogIHRyYWNlLmZhY3RvciA9IHNpbSRQRVAsCiAgcmVzcG9uc2UgPSBzaW0kcmVzcG9uc2UsCiAgbWFpbiA9ICJUaW1pbmcgb2YgTW9iaWxpemF0aW9uIMOXIFBhdGllbnQgRWR1Y2F0aW9uIiwKICB4bGFiID0gIlRpbWluZyBvZiBNb2JpbGl6YXRpb24iLAogIHlsYWIgPSAiTWVhbiBSZWNvdmVyeSBUaW1lIChkYXlzKSIsCiAgdHJhY2UubGFiZWwgPSAiRWR1Y2F0aW9uIiwKICB0eXBlID0gImIiLAogIGNvbCA9IGMoImJsdWUiLCAicmVkIiksCiAgcGNoID0gYygxOSwgMTcpCikKCnBhcihtYXIgPSBjKDUsIDQsIDQsIDYpKQojIEFCIGludGVyYWN0aW9uIGJ5IGJsb2NrCnBhcihtZnJvdyA9IGMoMSwgMykpCgpmb3IoYmxvY2sgaW4gYygiUG9vciBIZWFsdGgiLCAiRmFpciBIZWFsdGgiLCAiR29vZCBIZWFsdGgiKSl7CiAgaW50ZXJhY3Rpb24ucGxvdCgKICAgIHguZmFjdG9yID0gc2ltJFRNW3NpbSRCbG9jayA9PSBibG9ja10sCiAgICB0cmFjZS5mYWN0b3IgPSBzaW0kUEVQW3NpbSRCbG9jayA9PSBibG9ja10sCiAgICByZXNwb25zZSA9IHNpbSRyZXNwb25zZVtzaW0kQmxvY2sgPT0gYmxvY2tdLAogICAgbWFpbiA9IHBhc3RlKCJNb2JpbGl6YXRpb24gw5cgUGF0aWVudCBFZHVjYXRpb25cbiIsIGJsb2NrKSwKICAgIHhsYWIgPSAiVGltZSBvZiBNb2JpbGl6YXRpb24iLAogICAgeWxhYiA9ICJNZWFuIFJlY292ZXJ5IFRpbWUgKGRheXMpIiwKICAgIHRyYWNlLmxhYmVsID0gIkVkdWNhdGlvbiIsCiAgICB0eXBlID0gImIiLAogICAgY29sID0gYygiYmx1ZSIsICJyZWQiKSwKICAgIHBjaCA9IGMoMTksIDE3KQogICkKfQoKCmBgYAoKYGBge3IgcG93ZXJ9CiNFZmZlY3Qgc2l6ZSBmcm9tIEFOT1ZBIG5lZWRlZCBmb3IgcG93ZXIKZWZmc2l6ZT1ldGFfc3F1YXJlZChhb3YpCiNmb3VyLndheS5pbnRlcmFjdGlvbi5lZmZlY3Q9ZWZmc2l6ZVsxNSwyXQojQ29udmVydCBldGEgc3F1YXJlZCB0byBDb2hlbidzIGYgZm9yIHBvc3QgaG9jIHBvd2VyIGNhbGMKRT1ldGEyX3RvX2YoZWZmc2l6ZVsxNSwyXSkKCnByaW50KEUpCgpncHJfZnRlc3QoCiAgdGVzdCA9ICJhbm92YS5maXhlZC5zcGVjaWFsIiwKICBhbmFseXNpcyA9ICJwb3N0X2hvYyIsCiAgZWZmZWN0X3NpemUgPSBFLAogIG4gPSA0OCwKICBhbHBoYSA9IDAuMDUsCiAgbnVtX2RmID0gMSwKICBncm91cHMgPSAzCikKCmBgYAoKIyBQb3dlcgoKQ2FsY3VsYXRlIHRoZSBwb3N0LWhvYyBwb3dlciBmb3IgdGhpcyBkZXNpZ24uIFVzZSB0aGUgZWZmZWN0IHNpemUgZnJvbSB5b3VyIG91dHB1dC4KClRoZSBmb3VyLXdheSBpbnRlcmFjdGlvbiBlZmZlY3Qgc2l6ZSBpcyBldGFeMl49YHIgRWAuIERlZ3JlZXMgb2YgZnJlZWRvbSBmb3IgdGhlIHBvd2VyIGNhbGN1bGF0aW9uIGlzIGRmPTEuCgpXaXRoIGEgQ29oZW4ncyBGIG9mIDAuMTM4NSB0aGUgYWNoaXZlZCBwb3dlciBmb3IgdGhpcyBleHBlcmltZW50IGlzIG9ubHkgMC4xNTU3LiBUaGlzIG1lYW4gV0UgYWNoaWV2ZWQgYSBwb3dlciBvZiAxNS41NyUuIFRoaXMgZGVzaWduIHdhcyBleHRyZW1lbHkgdW5kZXJwb3dlcmVkIGZvciBkZXRlY3RpbmcgdGhlIGZvdXItd2F5IGludGVyYWN0aW9uLlRoaXMgbWVhbnMgdGhhdCBldmVuIGlmIHRoZSBmb3VyLXdheSBpbnRlcmFjdGlvbiB0cnVseSBleGlzdHMsIHRoaXMgZGVzaWduIHdvdWxkIGZhaWwgdG8gZGV0ZWN0IGl0IGFwcHJveGltYXRlbHkgODQlIG9mIHRoZSB0aW1lLiBGdXR1cmUgZGVzaWducyBzaG91bGQgY29uZHVjdCBhbiBhIHByaW9yaSBwb3dlciBhbmFseXNpcyB0byBkZXRlcm1pbmUgdGhlIHJlcXVpcmVkIHNhbXBsZSBzaXplIGJlZm9yZSBkYXRhIGNvbGxlY3Rpb24KCiMgUmVzaWR1YWwgQW5hbHlzaXMKCkFyZSB5b3VyIGFzc3VtcHRpb25zIG1ldD8gVXNlIHRoZSBwbG90cyB0byBzdXBwb3J0IHlvdXIgYXJndW1lbnQuCgpUaGUgcmVzaWR1YWwgaGlzdG9ncmFtIHNob3dzIGEgcmVsYXRpdmVseSBub3JtYWwgZGlzdHJpYnV0aW9uLCBhbGJlaXQgd2l0aCBhIHNsaWdodCBsZWZ0IHNrZXcuIEhvd2V2ZXIsIHRoZSBza2V3IGlzIG5vdCBlbm91Z2ggdG8gdmlvbGF0ZSBhc3N1bXB0aW9ucyBvZiBub3JtYWxpdHkuCgpSZXNpZHVhbHMgYWNyb3NzIGFsbCB0aHJlZSBoZWFsdGggYmxvY2tzIGFwcGVhciByYW5kb21seSBzY2F0dGVyZWQgYXJvdW5kIHplcm8gd2l0aCBubyBzeXN0ZW1hdGljIHRyZW5kcyBhY3Jvc3MgcnVuIG9yZGVyLCBzdWdnZXN0aW5nIHRoZSBpbmRlcGVuZGVuY2UgYW5kIGNvbnN0YW50IHZhcmlhbmNlIGFzc3VtcHRpb25zIGFyZSByZWFzb25hYmx5IG1ldC4gVGhlIHNsaWdodGx5IGdyZWF0ZXIgc3ByZWFkIGluIHRoZSBQb29yIEhlYWx0aCBibG9jayBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGNsaW5pY2FsIGV4cGVjdGF0aW9uIHRoYXQgcGF0aWVudHMgaW4gcG9vciBiYXNlbGluZSBoZWFsdGggZXhoaWJpdCBtb3JlIHZhcmlhYmxlIHJlY292ZXJ5IHRyYWplY3Rvcmllcy4KCmBgYHtyIGFzc3VtcHRpb25zfQoKaGlzdChtb2RlbCRyZXNpZHVhbHMsIAogICAgIG1haW49IlJlc2lkdWFsIEhpc3RvZ3JhbSIsIAogICAgIHhsYWI9IlJlc2lkdWFscyIpCgpzaW0kQmxvY2sgPC0gZmFjdG9yKHNpbSRCbG9jaywgbGV2ZWxzID0gCiAgICAgICAgICAgICAgICAgICAgICAgICBjKCJQb29yIEhlYWx0aCIsICJGYWlyIEhlYWx0aCIsICJHb29kIEhlYWx0aCIpKQoKYmxvY2tfbGV2ZWxzIDwtIGxldmVscyhzaW0kQmxvY2spCnBsb3QoCiAgc2ltJEdsb2JhbFJ1biwKICBtb2RlbCRyZXNpZHVhbHMsCiAgY29sID0gYXMubnVtZXJpYyhzaW0kQmxvY2spLAogIHBjaCA9IDE5LAogIHlsYWIgPSAiUmVzaWR1YWxzIiwKICBtYWluID0gIlJlc2lkdWFscyB2cyBSdW4gT3JkZXIgKEJ5IEJsb2NrcykiLAogIHhheHQgPSAibiIKKQphYmxpbmUoaCA9IDAsIGx0eSA9IDIpCgpsZWdlbmQoCiAgeCA9ICJib3R0b20iLAogIGluc2V0ID0gYygwLCAtMC4zNSksCiAgbGVnZW5kID0gYmxvY2tfbGV2ZWxzLAogIGNvbCA9IDE6bGVuZ3RoKGJsb2NrX2xldmVscyksCiAgcGNoID0gMTksCiAgdGl0bGUgPSAiQmFzZWxpbmUgSGVhbHRoIiwKICBob3JpeiA9IFRSVUUsCiAgeHBkID0gVFJVRQopCmBgYAoKIyBGYWN0b3JpYWwgUmVndWxhcml0aWVzCgpEbyB0aGUgcmVzdWx0cyBvZiB5b3VyIGZhY3RvcmlhbCBleHBlcmltZW50IGRpc3BsYXkgc3BhcnNpdHksIGhlcmVkaXR5LCBhbmQgaGllcmFyY2h5PyBTdXBwb3J0IHlvdXIgYW5zd2VyIHdpdGggeW91ciByZXN1bHRzLgoKT2YgdGhlIHRvdGFsIDE1IGVmZmVjdHMsIG9ubHkgNiBzaG93IGEgc2lnbmlmaWNhbnQgcmVzdWx0LCBpbmRpY2F0aW5nIHNwYXJzaXR5LiBUaGVzZSBzaWduaWZpY2FudCBlZmZlY3RzIGFyZSBmcm9tIFBPUE0sIFBURiwgYW5kIFBFUCBmb3IgbWFpbiBlZmZlY3RzLCBhbmQgUE9QTTpQVEYsIFBPUE06VE0sIFBPTVA6VE06UEVQIGZvciBpbnRlcmFjdGlvbiBlZmZlY3RzLiBPZiB0aGUgbWFpbiBlZmZlY3RzLCBQT01QIGFuZCBQVEYgYXJlIHNpZ25pZmljYW50IHdpdGggcCA8IC4wMDEgLCB3aGlsZSBQRVAgaXMgc2lnbmlmaWNhbnQgYXQgdGhlIHAgPSAuMDUgbGV2ZWwuIFRoZSBQT1BNOlBURiBpbnRlcmFjdGlvbiBpcyBzaWduaWZpY2FudCB3aXRoIHAgPCAuMDAxLCBQT1BNOlRNIGlzIHNpZ25pZmljYW50IGF0IHRoZSBwID0gMC4xIGxldmVsLCBhbmQgUE9QTTpUTTpQRVAgaXMgc2lnbmlmaWNhbnQgYXQgdGhlIHAgPSAuMDUgbGV2ZWwuIEhlcmUgd2Ugc2VlIGhpZXJhcmNoeSBhdCBwbGF5LCBhcyBtYWluIGVmZmVjdHMgYXJlIGxhcmdlciBvdmVyYWxsIHRoYW4gaW50ZXJhY3Rpb24gZWZmZWN0cyBhcmUuIEZpbmFsbHksIHdpdGhpbiB0aGUgaW50ZXJhY3Rpb24gZWZmZWN0cywgYWxsIGhhdmUgYXQgbGVhc3Qgb25lIHNpZ25pZmljYW50IHBhcmVudCB0ZXJtIGluY2x1ZGVkLCBpbmRpY2F0aW5nIGhlcmVkaXR5LgoKIyBMaW1pdGF0aW9ucyAmIFdoYXQgWW914oCZZCBEbyBOZXh0CgpEaXNjdXNzIGlzc3VlcyB5b3Ugc2VlIHdpdGggdGhpcyBkZXNpZ24uIERvIHlvdSBoYXZlIGlzc3VlcyB3aXRoIENvbmZvdW5kaW5nIGVmZmVjdHM/IEFyZSB0aGVyZSBkZXNpZ24gd2Vha25lc3Nlcz8gR2l2ZSBmb2xsb3cgdXAgZXhwZXJpbWVudCBpZGVhcy4KCgoKUGF0aWVudCBlZHVjYXRpb24gd2FzIHJlZHVjZWQgdG8gcGFtcGhsZXRzIHZlcnN1cyBhdWRpb3Zpc3VhbCBpbnN0cnVjdGlvbiwgb21pdHRpbmcgcG90ZW50aWFsbHkgaW1wb3J0YW50IGRlbGl2ZXJ5IGZhY3RvcnMgc3VjaCBhcyBoZWFsdGggbGl0ZXJhY3ksIGxhbmd1YWdlIGJhcnJpZXJzLCBmYW1pbHkgaW52b2x2ZW1lbnQsIGFuZCBwYXRpZW50IGVuZ2FnZW1lbnQuIFNlY29uZCwgdGhlIGRlc2lnbiBkb2VzIG5vdCBhY2NvdW50IGZvciBwYXRpZW50IGNvbXBsaWFuY2UgYSBwYXRpZW50IGFzc2lnbmVkIHRvIGRhaWx5IHBoeXNpY2FsIHRoZXJhcHkgbWF5IG5vdCBhdHRlbmQgYWxsIHNlc3Npb25zLCBhbmQgYSBwYXRpZW50IHJlY2VpdmluZyBhdWRpb3Zpc3VhbCBlZHVjYXRpb24gbWF5IG5vdCBlbmdhZ2Ugd2l0aCBpdCBtZWFuaW5nZnVsbHkuIFRoaXMgY3JlYXRzIGEgZ2FwIGJldHdlZW4gYXNzaWduZWQgYW5kIHJlY2VpdmVkIHRyZWF0bWVudCB0aGF0IGNvdWxkIGJpYXMgcmVzdWx0cyB0b3dhcmQgdGhlIG51bGwuIFRoaXJkLCBtb2JpbGl6YXRpb24gdGltaW5nIGZhaWxlZCB0byByZWFjaCBzaWduaWZpY2FuY2UgZGVzcGl0ZSBzdHJvbmcgY2xpbmljYWwgZXZpZGVuY2UgZnJvbSBFbmhhbmNlZCBSZWNvdmVyeSBBZnRlciBTdXJnZXJ5IChFUkFTKSBwcm90b2NvbHMgc3VwcG9ydGluZyBlYXJseSBtb2JpbGl6YXRpb24gYXMgb25lIG9mIHRoZSBtb3N0IGltcGFjdGZ1bCBwb3N0LXN1cmdpY2FsIGludGVydmVudGlvbnMuIFRoaXMgbWF5IHJlZmxlY3QgaW5zdWZmaWNpZW50IHBvd2VyIHdpdGggb25seSAxNiBvYnNlcnZhdGlvbnMgcGVyIGJsb2NrIHRvIGRldGVjdCBpdHMgZWZmZWN0IGF0IHRoZSBjaG9zZW4gZWZmZWN0IHNpemUuCgpGb3IgZm9sbG93LXVwIHdvcmssIGEgcmVzcG9uc2Ugc3VyZmFjZSBtZXRob2RvbG9neSAoUlNNKSBkZXNpZ24gY291bGQgb3B0aW1pemUgdGhlIHNpZ25pZmljYW50IGZhY3RvcnMgYmV5b25kIGJpbmFyeSBsZXZlbHMgaWRlbnRpZnlpbmcgdGhlIGlkZWFsIFBUIGZyZXF1ZW5jeSBhbmQgYW5hbGdlc2lhIGRvc2luZyBjb21iaW5hdGlvbiB0aGF0IG1pbmltaXplcyByZWNvdmVyeSB0aW1lLiBGdXR1cmUgc3R1ZGllcyBzaG91bGQgYWxzbyBjb25zaWRlciBhIHNwbGl0LXBsb3QgZGVzaWduIGlmIGFuYWxnZXNpYSBwcm90b2NvbHMgYXJlIHNldCBhdCB0aGUgd2FyZCBsZXZlbCByYXRoZXIgdGhhbiBpbmRpdmlkdWFsbHkgYXNzaWduZWQsIGFzIHRoaXMgd291bGQgYmV0dGVyIHJlZmxlY3QgcmVhbCBjbGluaWNhbCB3b3JrZmxvdy4gRXhwYW5kaW5nIHRoZSBibG9ja2luZyBzdHJ1Y3R1cmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIHBhdGllbnQgY2hhcmFjdGVyaXN0aWNzIHN1Y2ggYXMgYWdlIGdyb3VwIG9yIHN1cmdpY2FsIGNvbXBsZXhpdHkgd291bGQgZnVydGhlciBzdHJlbmd0aGVuIGludGVybmFsIHZhbGlkaXR5IGFuZCBnZW5lcmFsaXphYmlsaXR5Cg==