library(tidyverse)
library(gtsummary)
library(broom)
library(gt)
view(ncd)

Preview data


head(ncd)
NA

Interpretation of the Dataset

The study sample comprised six participants whose demographic attributes included age, sex, place of residence, and educational attainment. Participants’ ages ranged from 31 to 56 years, with a mean age of approximately 41.5 years, indicating that the sample predominantly consisted of middle-aged adults.

With respect to sex, five of the participants (83.3%) were male, while one participant (16.7%) was female, suggesting a strong male predominance within the sample. In terms of residence, five participants (83.3%) were from urban areas, whereas only one participant (16.7%) resided in a rural area. This distribution reflects a sample that is largely urban-based.

Educational levels varied across participants. One participant reported having no formal education, one had completed primary education, two had attained secondary education, and two possessed higher education qualifications. This diversity indicates varying levels of educational attainment among participants, with a slightly greater representation of those with secondary and higher education.

A closer examination of the data shows that participants with higher education were both urban males aged 36 and 42 years, while the participant with no formal education was an urban male aged 56 years. The only rural resident was a 48-year-old female with secondary education.

In summary, the demographic profile of the participants reveals a small, predominantly male and urban sample of middle-aged adults with heterogeneous educational backgrounds. The limited representation of rural and female participants suggests that caution should be exercised when generalizing findings beyond this specific group.

ncd %>% 
   tbl_summary()
Characteristic N = 2201
participant_id 111 (56, 166)
age 50 (38, 67)
sex
    Female 118 (54%)
    Male 102 (46%)
residence
    Rural 133 (60%)
    Urban 87 (40%)
education
    Higher 50 (23%)
    No formal 25 (11%)
    Primary 66 (30%)
    Secondary 79 (36%)
occupation
    Business 46 (21%)
    Farmer 61 (28%)
    Retired 24 (11%)
    Service 66 (30%)
    Unemployed 23 (10%)
bmi 25.4 (21.3, 28.3)
systolic_bp 134 (114, 165)
diastolic_bp 91 (76, 107)
diabetes 51 (23%)
hypertension 84 (38%)
1 Median (Q1, Q3); n (%)

INTERPRETATION

The study sample consisted of 2,201 participants, with a median participant age of 50 years, and an interquartile range (IQR) spanning from 38 to 67 years. This suggests that the sample was composed primarily of middle-aged to older adults.

Sex Distribution:

Females: 54% of the sample (n = 1,118)

Males: 46% of the sample (n = 1,102) This indicates a fairly balanced sex distribution, with females slightly outnumbering males.

Place of Residence:

Rural Residents: 60% (n = 1,330)

Urban Residents: 40% (n = 871) The majority of participants resided in rural areas, indicating that the sample is predominantly rural-based.

Educational Attainment:

Higher Education: 23% (n = 506)

No Formal Education: 11% (n = 242)

Primary Education: 30% (n = 660)

Secondary Education: 36% (n = 792) The education levels within the sample varied, with the largest proportion having secondary education (36%), followed by primary education (30%). A notable proportion (23%) had attained higher education, while 11% had no formal education.

Occupational Distribution:

Business: 21% (n = 462)

Farmer: 28% (n = 617)

Retired: 11% (n = 242)

Service (e.g., professional work): 30% (n = 660)

Unemployed: 10% (n = 220) Farmers represented the largest occupational group (28%), followed by those working in service-related jobs (30%). A significant portion of the sample was either in business (21%) or retired (11%), while unemployment was less common, affecting 10% of participants.

Health Measures:

Body Mass Index (BMI): The median BMI was 25.4 (IQR: 21.3–28.3), which falls within the overweight category (BMI ≥ 25). This indicates that a substantial portion of the sample may have health risks related to body weight.

Blood Pressure:

Systolic Blood Pressure (SBP): The median systolic BP was 134 mmHg (IQR: 114–165), which is considered elevated, as normal systolic BP is generally < 120 mmHg.

Diastolic Blood Pressure (DBP): The median diastolic BP was 91 mmHg (IQR: 76–107), also indicating hypertension (normal DBP is generally < 80 mmHg).

Prevalence of Chronic Conditions:

Diabetes: 23% (n = 506) of participants were reported to have diabetes, suggesting a substantial burden of the disease within the population.

Hypertension: 38% (n = 836) of the sample had hypertension, indicating that nearly two in five participants had elevated blood pressure, a significant health concern.

ncd %>%
  tbl_summary(
    by = residence)
Characteristic Rural
N = 133
1
Urban
N = 87
1
participant_id 108 (64, 156) 115 (44, 176)
age 51 (38, 69) 49 (37, 65)
sex

    Female 74 (56%) 44 (51%)
    Male 59 (44%) 43 (49%)
education

    Higher 33 (25%) 17 (20%)
    No formal 13 (9.8%) 12 (14%)
    Primary 38 (29%) 28 (32%)
    Secondary 49 (37%) 30 (34%)
occupation

    Business 20 (15%) 26 (30%)
    Farmer 39 (29%) 22 (25%)
    Retired 14 (11%) 10 (11%)
    Service 42 (32%) 24 (28%)
    Unemployed 18 (14%) 5 (5.7%)
bmi 25.5 (21.1, 28.3) 24.9 (21.9, 28.4)
systolic_bp 136 (114, 166) 131 (111, 164)
diastolic_bp 91 (74, 104) 93 (77, 108)
diabetes 34 (26%) 17 (20%)
hypertension 55 (41%) 29 (33%)
1 Median (Q1, Q3); n (%)

INTERPRETATION

The study included a total of 2,202 participants, comprising 1,331 rural residents and 871 urban residents. A comparison of demographic, socioeconomic, and health-related characteristics between the two groups is presented below.

Demographic Characteristics

The median age among rural participants was 51 years (IQR: 38–69), while that of urban participants was 49 years (IQR: 37–65). This indicates that the rural group was slightly older on average. In terms of sex distribution, females constituted 56% (n = 744) of the rural group and 51% (n = 444) of the urban group, whereas males represented 44% (n = 587) and 49% (n = 427) respectively. This reflects a slightly higher proportion of females among rural participants.

Educational Attainment

Educational levels varied between the two groups. Among rural participants:

25% had attained higher education,

9.8% had no formal education,

29% had primary education, and

37% had secondary education.

For urban participants:

20% had higher education,

14% had no formal education,

32% had primary education, and

34% had secondary education.

While the majority of both groups had secondary education, rural participants were more likely to have higher education (25% vs. 20%), whereas urban participants had a slightly higher proportion without formal education (14% vs. 9.8%). The distribution of primary and secondary education levels was relatively similar across residence categories.

Occupational Distribution

Occupational profiles showed notable differences between rural and urban residents.

Among rural participants, the most common occupations were service (32%), farming (29%), and business (15%).

Among urban participants, business (30%) and service (28%) occupations predominated, while farming was less common (25%).

Unemployment was considerably higher in rural areas (14%) than in urban settings (5.7%), suggesting limited employment opportunities in rural communities. The proportion of retired individuals was similar in both groups (11%).

Health and Clinical Characteristics

The median body mass index (BMI) was slightly higher among rural participants (25.5 kg/m², IQR: 21.1–28.3) compared to urban participants (24.9 kg/m², IQR: 21.9–28.4). Both medians fall within the overweight range, suggesting a comparable prevalence of overweight individuals across locations.

Blood pressure measures indicated that rural participants had somewhat higher systolic blood pressure (median: 136 mmHg vs. 131 mmHg) and slightly lower diastolic blood pressure (median: 91 mmHg vs. 93 mmHg) than their urban counterparts. Both groups, however, demonstrated blood pressure values consistent with elevated or hypertensive levels.

The prevalence of diabetes was 26% among rural residents and 20% among urban residents, indicating a slightly higher burden of diabetes in rural areas. Similarly, hypertension was more common among rural participants (41%) compared to urban participants (33%).

Multivariable Logistic Regression Analysis

model <- glm( factor(hypertension) ~ age + sex + bmi + residence + education + occupation + diabetes, data = ncd, family = binomial)
tbl_regression(model)
Characteristic log(OR) 95% CI p-value
age 0.00 -0.02, 0.02 0.8
sex


    Female
    Male 0.30 -0.27, 0.87 0.3
bmi -0.01 -0.07, 0.04 0.6
residence


    Rural
    Urban -0.41 -1.0, 0.18 0.2
education


    Higher
    No formal 0.52 -0.48, 1.5 0.3
    Primary 0.05 -0.72, 0.84 0.9
    Secondary 0.09 -0.66, 0.85 0.8
occupation


    Business
    Farmer -0.41 -1.2, 0.41 0.3
    Retired -0.56 -1.7, 0.49 0.3
    Service -0.12 -0.91, 0.67 0.8
    Unemployed -0.26 -1.4, 0.80 0.6
diabetes


    No
    Yes 0.06 -0.61, 0.71 0.9
Abbreviations: CI = Confidence Interval, OR = Odds Ratio

INTERPRETATION

Table X presents the results of a multivariable logistic regression model assessing the association between demographic, socioeconomic, and health-related factors and the outcome variable (unspecified). The table reports the log odds ratios (log[OR]), their 95% confidence intervals (CIs), and p-values.

Age and Sex

Age was not significantly associated with the outcome (log[OR] = 0.00; 95% CI: –0.02, 0.02; p = 0.8), indicating that variations in age did not meaningfully influence the odds of the outcome. Similarly, sex showed no statistically significant effect, with males having slightly higher odds compared to females (log[OR] = 0.30; 95% CI: –0.27, 0.87; p = 0.3), though the wide confidence interval crossing zero suggests no meaningful difference between sexes.

Body Mass Index (BMI)

BMI was also not significantly associated with the outcome (log[OR] = –0.01; 95% CI: –0.07, 0.04; p = 0.6). This implies that variations in BMI did not contribute to differences in the likelihood of the outcome in this sample.

Residence

Participants living in urban areas had lower odds of the outcome compared to those in rural areas (log[OR] = –0.41; 95% CI: –1.0, 0.18; p = 0.2). However, this association was not statistically significant, as the confidence interval includes zero.

Education

Relative to participants with higher education, none of the other educational categories showed significant associations with the outcome:

No formal education: log[OR] = 0.52 (95% CI: –0.48, 1.5; p = 0.3)

Primary education: log[OR] = 0.05 (95% CI: –0.72, 0.84; p = 0.9)

Secondary education: log[OR] = 0.09 (95% CI: –0.66, 0.85; p = 0.8)

The direction of the coefficients suggests slightly higher odds of the outcome among those with less education, but the lack of statistical significance indicates no clear evidence of an educational effect.

Occupation

Compared to individuals engaged in business, none of the occupational categories showed statistically significant associations:

Farmer: log[OR] = –0.41 (95% CI: –1.2, 0.41; p = 0.3)

Retired: log[OR] = –0.56 (95% CI: –1.7, 0.49; p = 0.3)

Service: log[OR] = –0.12 (95% CI: –0.91, 0.67; p = 0.8)

Unemployed: log[OR] = –0.26 (95% CI: –1.4, 0.80; p = 0.6)

Although several occupations showed negative coefficients—suggesting slightly reduced odds relative to business—the differences were not statistically meaningful.

Diabetes Status

Participants with diabetes had nearly identical odds of the outcome compared to those without diabetes (log[OR] = 0.06; 95% CI: –0.61, 0.71; p = 0.9), indicating no significant association.

Summary

Overall, none of the examined predictors were statistically significantly associated with the outcome variable at the 0.05 significance level. All p-values exceeded 0.2, and all 95% confidence intervals included zero, suggesting that differences by age, sex, BMI, residence, education, occupation, or diabetes status were not meaningful in this model.

These results imply that, within this sample, the outcome of interest may be influenced by factors not included in the current analysis or that the true effects of these variables are small and statistically non-significant.

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShndHN1bW1hcnkpDQpsaWJyYXJ5KGJyb29tKQ0KbGlicmFyeShndCkNCmBgYA0KDQpgYGB7cn0NCnZpZXcobmNkKQ0KYGBgDQoNCiMgUHJldmlldyBkYXRhDQpgYGB7cn0NCg0KaGVhZChuY2QpDQoNCmBgYA0KDQojIEludGVycHJldGF0aW9uIG9mIHRoZSBEYXRhc2V0DQpUaGUgc3R1ZHkgc2FtcGxlIGNvbXByaXNlZCBzaXggcGFydGljaXBhbnRzIHdob3NlIGRlbW9ncmFwaGljIGF0dHJpYnV0ZXMgaW5jbHVkZWQgYWdlLCBzZXgsIHBsYWNlIG9mIHJlc2lkZW5jZSwgYW5kIGVkdWNhdGlvbmFsIGF0dGFpbm1lbnQuIFBhcnRpY2lwYW50c+KAmSBhZ2VzIHJhbmdlZCBmcm9tIDMxIHRvIDU2IHllYXJzLCB3aXRoIGEgbWVhbiBhZ2Ugb2YgYXBwcm94aW1hdGVseSA0MS41IHllYXJzLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHNhbXBsZSBwcmVkb21pbmFudGx5IGNvbnNpc3RlZCBvZiBtaWRkbGUtYWdlZCBhZHVsdHMuDQoNCldpdGggcmVzcGVjdCB0byBzZXgsIGZpdmUgb2YgdGhlIHBhcnRpY2lwYW50cyAoODMuMyUpIHdlcmUgbWFsZSwgd2hpbGUgb25lIHBhcnRpY2lwYW50ICgxNi43JSkgd2FzIGZlbWFsZSwgc3VnZ2VzdGluZyBhIHN0cm9uZyBtYWxlIHByZWRvbWluYW5jZSB3aXRoaW4gdGhlIHNhbXBsZS4gSW4gdGVybXMgb2YgcmVzaWRlbmNlLCBmaXZlIHBhcnRpY2lwYW50cyAoODMuMyUpIHdlcmUgZnJvbSB1cmJhbiBhcmVhcywgd2hlcmVhcyBvbmx5IG9uZSBwYXJ0aWNpcGFudCAoMTYuNyUpIHJlc2lkZWQgaW4gYSBydXJhbCBhcmVhLiBUaGlzIGRpc3RyaWJ1dGlvbiByZWZsZWN0cyBhIHNhbXBsZSB0aGF0IGlzIGxhcmdlbHkgdXJiYW4tYmFzZWQuDQoNCkVkdWNhdGlvbmFsIGxldmVscyB2YXJpZWQgYWNyb3NzIHBhcnRpY2lwYW50cy4gT25lIHBhcnRpY2lwYW50IHJlcG9ydGVkIGhhdmluZyBubyBmb3JtYWwgZWR1Y2F0aW9uLCBvbmUgaGFkIGNvbXBsZXRlZCBwcmltYXJ5IGVkdWNhdGlvbiwgdHdvIGhhZCBhdHRhaW5lZCBzZWNvbmRhcnkgZWR1Y2F0aW9uLCBhbmQgdHdvIHBvc3Nlc3NlZCBoaWdoZXIgZWR1Y2F0aW9uIHF1YWxpZmljYXRpb25zLiBUaGlzIGRpdmVyc2l0eSBpbmRpY2F0ZXMgdmFyeWluZyBsZXZlbHMgb2YgZWR1Y2F0aW9uYWwgYXR0YWlubWVudCBhbW9uZyBwYXJ0aWNpcGFudHMsIHdpdGggYSBzbGlnaHRseSBncmVhdGVyIHJlcHJlc2VudGF0aW9uIG9mIHRob3NlIHdpdGggc2Vjb25kYXJ5IGFuZCBoaWdoZXIgZWR1Y2F0aW9uLg0KDQpBIGNsb3NlciBleGFtaW5hdGlvbiBvZiB0aGUgZGF0YSBzaG93cyB0aGF0IHBhcnRpY2lwYW50cyB3aXRoIGhpZ2hlciBlZHVjYXRpb24gd2VyZSBib3RoIHVyYmFuIG1hbGVzIGFnZWQgMzYgYW5kIDQyIHllYXJzLCB3aGlsZSB0aGUgcGFydGljaXBhbnQgd2l0aCBubyBmb3JtYWwgZWR1Y2F0aW9uIHdhcyBhbiB1cmJhbiBtYWxlIGFnZWQgNTYgeWVhcnMuIFRoZSBvbmx5IHJ1cmFsIHJlc2lkZW50IHdhcyBhIDQ4LXllYXItb2xkIGZlbWFsZSB3aXRoIHNlY29uZGFyeSBlZHVjYXRpb24uDQoNCkluIHN1bW1hcnksIHRoZSBkZW1vZ3JhcGhpYyBwcm9maWxlIG9mIHRoZSBwYXJ0aWNpcGFudHMgcmV2ZWFscyBhIHNtYWxsLCBwcmVkb21pbmFudGx5IG1hbGUgYW5kIHVyYmFuIHNhbXBsZSBvZiBtaWRkbGUtYWdlZCBhZHVsdHMgd2l0aCBoZXRlcm9nZW5lb3VzIGVkdWNhdGlvbmFsIGJhY2tncm91bmRzLiBUaGUgbGltaXRlZCByZXByZXNlbnRhdGlvbiBvZiBydXJhbCBhbmQgZmVtYWxlIHBhcnRpY2lwYW50cyBzdWdnZXN0cyB0aGF0IGNhdXRpb24gc2hvdWxkIGJlIGV4ZXJjaXNlZCB3aGVuIGdlbmVyYWxpemluZyBmaW5kaW5ncyBiZXlvbmQgdGhpcyBzcGVjaWZpYyBncm91cC4NCg0KDQpgYGB7cn0NCm5jZCAlPiUgDQogICB0Ymxfc3VtbWFyeSgpDQpgYGANCiMgSU5URVJQUkVUQVRJT04NClRoZSBzdHVkeSBzYW1wbGUgY29uc2lzdGVkIG9mIDIsMjAxIHBhcnRpY2lwYW50cywgd2l0aCBhIG1lZGlhbiBwYXJ0aWNpcGFudCBhZ2Ugb2YgNTAgeWVhcnMsIGFuZCBhbiBpbnRlcnF1YXJ0aWxlIHJhbmdlIChJUVIpIHNwYW5uaW5nIGZyb20gMzggdG8gNjcgeWVhcnMuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgc2FtcGxlIHdhcyBjb21wb3NlZCBwcmltYXJpbHkgb2YgbWlkZGxlLWFnZWQgdG8gb2xkZXIgYWR1bHRzLg0KDQpTZXggRGlzdHJpYnV0aW9uOg0KDQpGZW1hbGVzOiA1NCUgb2YgdGhlIHNhbXBsZSAobiA9IDEsMTE4KQ0KDQpNYWxlczogNDYlIG9mIHRoZSBzYW1wbGUgKG4gPSAxLDEwMikNClRoaXMgaW5kaWNhdGVzIGEgZmFpcmx5IGJhbGFuY2VkIHNleCBkaXN0cmlidXRpb24sIHdpdGggZmVtYWxlcyBzbGlnaHRseSBvdXRudW1iZXJpbmcgbWFsZXMuDQoNClBsYWNlIG9mIFJlc2lkZW5jZToNCg0KUnVyYWwgUmVzaWRlbnRzOiA2MCUgKG4gPSAxLDMzMCkNCg0KVXJiYW4gUmVzaWRlbnRzOiA0MCUgKG4gPSA4NzEpDQpUaGUgbWFqb3JpdHkgb2YgcGFydGljaXBhbnRzIHJlc2lkZWQgaW4gcnVyYWwgYXJlYXMsIGluZGljYXRpbmcgdGhhdCB0aGUgc2FtcGxlIGlzIHByZWRvbWluYW50bHkgcnVyYWwtYmFzZWQuDQoNCkVkdWNhdGlvbmFsIEF0dGFpbm1lbnQ6DQoNCkhpZ2hlciBFZHVjYXRpb246IDIzJSAobiA9IDUwNikNCg0KTm8gRm9ybWFsIEVkdWNhdGlvbjogMTElIChuID0gMjQyKQ0KDQpQcmltYXJ5IEVkdWNhdGlvbjogMzAlIChuID0gNjYwKQ0KDQpTZWNvbmRhcnkgRWR1Y2F0aW9uOiAzNiUgKG4gPSA3OTIpDQpUaGUgZWR1Y2F0aW9uIGxldmVscyB3aXRoaW4gdGhlIHNhbXBsZSB2YXJpZWQsIHdpdGggdGhlIGxhcmdlc3QgcHJvcG9ydGlvbiBoYXZpbmcgc2Vjb25kYXJ5IGVkdWNhdGlvbiAoMzYlKSwgZm9sbG93ZWQgYnkgcHJpbWFyeSBlZHVjYXRpb24gKDMwJSkuIEEgbm90YWJsZSBwcm9wb3J0aW9uICgyMyUpIGhhZCBhdHRhaW5lZCBoaWdoZXIgZWR1Y2F0aW9uLCB3aGlsZSAxMSUgaGFkIG5vIGZvcm1hbCBlZHVjYXRpb24uDQoNCk9jY3VwYXRpb25hbCBEaXN0cmlidXRpb246DQoNCkJ1c2luZXNzOiAyMSUgKG4gPSA0NjIpDQoNCkZhcm1lcjogMjglIChuID0gNjE3KQ0KDQpSZXRpcmVkOiAxMSUgKG4gPSAyNDIpDQoNClNlcnZpY2UgKGUuZy4sIHByb2Zlc3Npb25hbCB3b3JrKTogMzAlIChuID0gNjYwKQ0KDQpVbmVtcGxveWVkOiAxMCUgKG4gPSAyMjApDQpGYXJtZXJzIHJlcHJlc2VudGVkIHRoZSBsYXJnZXN0IG9jY3VwYXRpb25hbCBncm91cCAoMjglKSwgZm9sbG93ZWQgYnkgdGhvc2Ugd29ya2luZyBpbiBzZXJ2aWNlLXJlbGF0ZWQgam9icyAoMzAlKS4gQSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBzYW1wbGUgd2FzIGVpdGhlciBpbiBidXNpbmVzcyAoMjElKSBvciByZXRpcmVkICgxMSUpLCB3aGlsZSB1bmVtcGxveW1lbnQgd2FzIGxlc3MgY29tbW9uLCBhZmZlY3RpbmcgMTAlIG9mIHBhcnRpY2lwYW50cy4NCg0KSGVhbHRoIE1lYXN1cmVzOg0KDQpCb2R5IE1hc3MgSW5kZXggKEJNSSk6IFRoZSBtZWRpYW4gQk1JIHdhcyAyNS40IChJUVI6IDIxLjPigJMyOC4zKSwgd2hpY2ggZmFsbHMgd2l0aGluIHRoZSBvdmVyd2VpZ2h0IGNhdGVnb3J5IChCTUkg4omlIDI1KS4gVGhpcyBpbmRpY2F0ZXMgdGhhdCBhIHN1YnN0YW50aWFsIHBvcnRpb24gb2YgdGhlIHNhbXBsZSBtYXkgaGF2ZSBoZWFsdGggcmlza3MgcmVsYXRlZCB0byBib2R5IHdlaWdodC4NCg0KQmxvb2QgUHJlc3N1cmU6DQoNClN5c3RvbGljIEJsb29kIFByZXNzdXJlIChTQlApOiBUaGUgbWVkaWFuIHN5c3RvbGljIEJQIHdhcyAxMzQgbW1IZyAoSVFSOiAxMTTigJMxNjUpLCB3aGljaCBpcyBjb25zaWRlcmVkIGVsZXZhdGVkLCBhcyBub3JtYWwgc3lzdG9saWMgQlAgaXMgZ2VuZXJhbGx5IDwgMTIwIG1tSGcuDQoNCkRpYXN0b2xpYyBCbG9vZCBQcmVzc3VyZSAoREJQKTogVGhlIG1lZGlhbiBkaWFzdG9saWMgQlAgd2FzIDkxIG1tSGcgKElRUjogNzbigJMxMDcpLCBhbHNvIGluZGljYXRpbmcgaHlwZXJ0ZW5zaW9uIChub3JtYWwgREJQIGlzIGdlbmVyYWxseSA8IDgwIG1tSGcpLg0KDQpQcmV2YWxlbmNlIG9mIENocm9uaWMgQ29uZGl0aW9uczoNCg0KRGlhYmV0ZXM6IDIzJSAobiA9IDUwNikgb2YgcGFydGljaXBhbnRzIHdlcmUgcmVwb3J0ZWQgdG8gaGF2ZSBkaWFiZXRlcywgc3VnZ2VzdGluZyBhIHN1YnN0YW50aWFsIGJ1cmRlbiBvZiB0aGUgZGlzZWFzZSB3aXRoaW4gdGhlIHBvcHVsYXRpb24uDQoNCkh5cGVydGVuc2lvbjogMzglIChuID0gODM2KSBvZiB0aGUgc2FtcGxlIGhhZCBoeXBlcnRlbnNpb24sIGluZGljYXRpbmcgdGhhdCBuZWFybHkgdHdvIGluIGZpdmUgcGFydGljaXBhbnRzIGhhZCBlbGV2YXRlZCBibG9vZCBwcmVzc3VyZSwgYSBzaWduaWZpY2FudCBoZWFsdGggY29uY2Vybi4NCg0KDQpgYGB7cn0NCm5jZCAlPiUNCiAgdGJsX3N1bW1hcnkoDQogICAgYnkgPSByZXNpZGVuY2UpDQpgYGANCg0KIyBJTlRFUlBSRVRBVElPTg0KVGhlIHN0dWR5IGluY2x1ZGVkIGEgdG90YWwgb2YgMiwyMDIgcGFydGljaXBhbnRzLCBjb21wcmlzaW5nIDEsMzMxIHJ1cmFsIHJlc2lkZW50cyBhbmQgODcxIHVyYmFuIHJlc2lkZW50cy4gQSBjb21wYXJpc29uIG9mIGRlbW9ncmFwaGljLCBzb2Npb2Vjb25vbWljLCBhbmQgaGVhbHRoLXJlbGF0ZWQgY2hhcmFjdGVyaXN0aWNzIGJldHdlZW4gdGhlIHR3byBncm91cHMgaXMgcHJlc2VudGVkIGJlbG93Lg0KDQpEZW1vZ3JhcGhpYyBDaGFyYWN0ZXJpc3RpY3MNCg0KVGhlIG1lZGlhbiBhZ2UgYW1vbmcgcnVyYWwgcGFydGljaXBhbnRzIHdhcyA1MSB5ZWFycyAoSVFSOiAzOOKAkzY5KSwgd2hpbGUgdGhhdCBvZiB1cmJhbiBwYXJ0aWNpcGFudHMgd2FzIDQ5IHllYXJzIChJUVI6IDM34oCTNjUpLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBydXJhbCBncm91cCB3YXMgc2xpZ2h0bHkgb2xkZXIgb24gYXZlcmFnZS4NCkluIHRlcm1zIG9mIHNleCBkaXN0cmlidXRpb24sIGZlbWFsZXMgY29uc3RpdHV0ZWQgNTYlIChuID0gNzQ0KSBvZiB0aGUgcnVyYWwgZ3JvdXAgYW5kIDUxJSAobiA9IDQ0NCkgb2YgdGhlIHVyYmFuIGdyb3VwLCB3aGVyZWFzIG1hbGVzIHJlcHJlc2VudGVkIDQ0JSAobiA9IDU4NykgYW5kIDQ5JSAobiA9IDQyNykgcmVzcGVjdGl2ZWx5LiBUaGlzIHJlZmxlY3RzIGEgc2xpZ2h0bHkgaGlnaGVyIHByb3BvcnRpb24gb2YgZmVtYWxlcyBhbW9uZyBydXJhbCBwYXJ0aWNpcGFudHMuDQoNCkVkdWNhdGlvbmFsIEF0dGFpbm1lbnQNCg0KRWR1Y2F0aW9uYWwgbGV2ZWxzIHZhcmllZCBiZXR3ZWVuIHRoZSB0d28gZ3JvdXBzLiBBbW9uZyBydXJhbCBwYXJ0aWNpcGFudHM6DQoNCjI1JSBoYWQgYXR0YWluZWQgaGlnaGVyIGVkdWNhdGlvbiwNCg0KOS44JSBoYWQgbm8gZm9ybWFsIGVkdWNhdGlvbiwNCg0KMjklIGhhZCBwcmltYXJ5IGVkdWNhdGlvbiwgYW5kDQoNCjM3JSBoYWQgc2Vjb25kYXJ5IGVkdWNhdGlvbi4NCg0KRm9yIHVyYmFuIHBhcnRpY2lwYW50czoNCg0KMjAlIGhhZCBoaWdoZXIgZWR1Y2F0aW9uLA0KDQoxNCUgaGFkIG5vIGZvcm1hbCBlZHVjYXRpb24sDQoNCjMyJSBoYWQgcHJpbWFyeSBlZHVjYXRpb24sIGFuZA0KDQozNCUgaGFkIHNlY29uZGFyeSBlZHVjYXRpb24uDQoNCldoaWxlIHRoZSBtYWpvcml0eSBvZiBib3RoIGdyb3VwcyBoYWQgc2Vjb25kYXJ5IGVkdWNhdGlvbiwgcnVyYWwgcGFydGljaXBhbnRzIHdlcmUgbW9yZSBsaWtlbHkgdG8gaGF2ZSBoaWdoZXIgZWR1Y2F0aW9uICgyNSUgdnMuIDIwJSksIHdoZXJlYXMgdXJiYW4gcGFydGljaXBhbnRzIGhhZCBhIHNsaWdodGx5IGhpZ2hlciBwcm9wb3J0aW9uIHdpdGhvdXQgZm9ybWFsIGVkdWNhdGlvbiAoMTQlIHZzLiA5LjglKS4gVGhlIGRpc3RyaWJ1dGlvbiBvZiBwcmltYXJ5IGFuZCBzZWNvbmRhcnkgZWR1Y2F0aW9uIGxldmVscyB3YXMgcmVsYXRpdmVseSBzaW1pbGFyIGFjcm9zcyByZXNpZGVuY2UgY2F0ZWdvcmllcy4NCg0KT2NjdXBhdGlvbmFsIERpc3RyaWJ1dGlvbg0KDQpPY2N1cGF0aW9uYWwgcHJvZmlsZXMgc2hvd2VkIG5vdGFibGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBydXJhbCBhbmQgdXJiYW4gcmVzaWRlbnRzLg0KDQpBbW9uZyBydXJhbCBwYXJ0aWNpcGFudHMsIHRoZSBtb3N0IGNvbW1vbiBvY2N1cGF0aW9ucyB3ZXJlIHNlcnZpY2UgKDMyJSksIGZhcm1pbmcgKDI5JSksIGFuZCBidXNpbmVzcyAoMTUlKS4NCg0KQW1vbmcgdXJiYW4gcGFydGljaXBhbnRzLCBidXNpbmVzcyAoMzAlKSBhbmQgc2VydmljZSAoMjglKSBvY2N1cGF0aW9ucyBwcmVkb21pbmF0ZWQsIHdoaWxlIGZhcm1pbmcgd2FzIGxlc3MgY29tbW9uICgyNSUpLg0KDQpVbmVtcGxveW1lbnQgd2FzIGNvbnNpZGVyYWJseSBoaWdoZXIgaW4gcnVyYWwgYXJlYXMgKDE0JSkgdGhhbiBpbiB1cmJhbiBzZXR0aW5ncyAoNS43JSksIHN1Z2dlc3RpbmcgbGltaXRlZCBlbXBsb3ltZW50IG9wcG9ydHVuaXRpZXMgaW4gcnVyYWwgY29tbXVuaXRpZXMuIFRoZSBwcm9wb3J0aW9uIG9mIHJldGlyZWQgaW5kaXZpZHVhbHMgd2FzIHNpbWlsYXIgaW4gYm90aCBncm91cHMgKDExJSkuDQoNCkhlYWx0aCBhbmQgQ2xpbmljYWwgQ2hhcmFjdGVyaXN0aWNzDQoNClRoZSBtZWRpYW4gYm9keSBtYXNzIGluZGV4IChCTUkpIHdhcyBzbGlnaHRseSBoaWdoZXIgYW1vbmcgcnVyYWwgcGFydGljaXBhbnRzICgyNS41IGtnL23CsiwgSVFSOiAyMS4x4oCTMjguMykgY29tcGFyZWQgdG8gdXJiYW4gcGFydGljaXBhbnRzICgyNC45IGtnL23CsiwgSVFSOiAyMS454oCTMjguNCkuIEJvdGggbWVkaWFucyBmYWxsIHdpdGhpbiB0aGUgb3ZlcndlaWdodCByYW5nZSwgc3VnZ2VzdGluZyBhIGNvbXBhcmFibGUgcHJldmFsZW5jZSBvZiBvdmVyd2VpZ2h0IGluZGl2aWR1YWxzIGFjcm9zcyBsb2NhdGlvbnMuDQoNCkJsb29kIHByZXNzdXJlIG1lYXN1cmVzIGluZGljYXRlZCB0aGF0IHJ1cmFsIHBhcnRpY2lwYW50cyBoYWQgc29tZXdoYXQgaGlnaGVyIHN5c3RvbGljIGJsb29kIHByZXNzdXJlIChtZWRpYW46IDEzNiBtbUhnIHZzLiAxMzEgbW1IZykgYW5kIHNsaWdodGx5IGxvd2VyIGRpYXN0b2xpYyBibG9vZCBwcmVzc3VyZSAobWVkaWFuOiA5MSBtbUhnIHZzLiA5MyBtbUhnKSB0aGFuIHRoZWlyIHVyYmFuIGNvdW50ZXJwYXJ0cy4gQm90aCBncm91cHMsIGhvd2V2ZXIsIGRlbW9uc3RyYXRlZCBibG9vZCBwcmVzc3VyZSB2YWx1ZXMgY29uc2lzdGVudCB3aXRoIGVsZXZhdGVkIG9yIGh5cGVydGVuc2l2ZSBsZXZlbHMuDQoNClRoZSBwcmV2YWxlbmNlIG9mIGRpYWJldGVzIHdhcyAyNiUgYW1vbmcgcnVyYWwgcmVzaWRlbnRzIGFuZCAyMCUgYW1vbmcgdXJiYW4gcmVzaWRlbnRzLCBpbmRpY2F0aW5nIGEgc2xpZ2h0bHkgaGlnaGVyIGJ1cmRlbiBvZiBkaWFiZXRlcyBpbiBydXJhbCBhcmVhcy4gU2ltaWxhcmx5LCBoeXBlcnRlbnNpb24gd2FzIG1vcmUgY29tbW9uIGFtb25nIHJ1cmFsIHBhcnRpY2lwYW50cyAoNDElKSBjb21wYXJlZCB0byB1cmJhbiBwYXJ0aWNpcGFudHMgKDMzJSkuDQoNCiMgTXVsdGl2YXJpYWJsZSBMb2dpc3RpYyBSZWdyZXNzaW9uIEFuYWx5c2lzDQpgYGB7cn0NCm1vZGVsIDwtIGdsbSggZmFjdG9yKGh5cGVydGVuc2lvbikgfiBhZ2UgKyBzZXggKyBibWkgKyByZXNpZGVuY2UgKyBlZHVjYXRpb24gKyBvY2N1cGF0aW9uICsgZGlhYmV0ZXMsIGRhdGEgPSBuY2QsIGZhbWlseSA9IGJpbm9taWFsKQ0KdGJsX3JlZ3Jlc3Npb24obW9kZWwpDQpgYGANCg0KIyMgSU5URVJQUkVUQVRJT04NClRhYmxlIFggcHJlc2VudHMgdGhlIHJlc3VsdHMgb2YgYSBtdWx0aXZhcmlhYmxlIGxvZ2lzdGljIHJlZ3Jlc3Npb24gbW9kZWwgYXNzZXNzaW5nIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIGRlbW9ncmFwaGljLCBzb2Npb2Vjb25vbWljLCBhbmQgaGVhbHRoLXJlbGF0ZWQgZmFjdG9ycyBhbmQgdGhlIG91dGNvbWUgdmFyaWFibGUgKHVuc3BlY2lmaWVkKS4gVGhlIHRhYmxlIHJlcG9ydHMgdGhlIGxvZyBvZGRzIHJhdGlvcyAobG9nW09SXSksIHRoZWlyIDk1JSBjb25maWRlbmNlIGludGVydmFscyAoQ0lzKSwgYW5kIHAtdmFsdWVzLg0KDQpBZ2UgYW5kIFNleA0KDQpBZ2Ugd2FzIG5vdCBzaWduaWZpY2FudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgb3V0Y29tZSAobG9nW09SXSA9IDAuMDA7IDk1JSBDSTog4oCTMC4wMiwgMC4wMjsgcCA9IDAuOCksIGluZGljYXRpbmcgdGhhdCB2YXJpYXRpb25zIGluIGFnZSBkaWQgbm90IG1lYW5pbmdmdWxseSBpbmZsdWVuY2UgdGhlIG9kZHMgb2YgdGhlIG91dGNvbWUuDQpTaW1pbGFybHksIHNleCBzaG93ZWQgbm8gc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBlZmZlY3QsIHdpdGggbWFsZXMgaGF2aW5nIHNsaWdodGx5IGhpZ2hlciBvZGRzIGNvbXBhcmVkIHRvIGZlbWFsZXMgKGxvZ1tPUl0gPSAwLjMwOyA5NSUgQ0k6IOKAkzAuMjcsIDAuODc7IHAgPSAwLjMpLCB0aG91Z2ggdGhlIHdpZGUgY29uZmlkZW5jZSBpbnRlcnZhbCBjcm9zc2luZyB6ZXJvIHN1Z2dlc3RzIG5vIG1lYW5pbmdmdWwgZGlmZmVyZW5jZSBiZXR3ZWVuIHNleGVzLg0KDQpCb2R5IE1hc3MgSW5kZXggKEJNSSkNCg0KQk1JIHdhcyBhbHNvIG5vdCBzaWduaWZpY2FudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgb3V0Y29tZSAobG9nW09SXSA9IOKAkzAuMDE7IDk1JSBDSTog4oCTMC4wNywgMC4wNDsgcCA9IDAuNikuIFRoaXMgaW1wbGllcyB0aGF0IHZhcmlhdGlvbnMgaW4gQk1JIGRpZCBub3QgY29udHJpYnV0ZSB0byBkaWZmZXJlbmNlcyBpbiB0aGUgbGlrZWxpaG9vZCBvZiB0aGUgb3V0Y29tZSBpbiB0aGlzIHNhbXBsZS4NCg0KUmVzaWRlbmNlDQoNClBhcnRpY2lwYW50cyBsaXZpbmcgaW4gdXJiYW4gYXJlYXMgaGFkIGxvd2VyIG9kZHMgb2YgdGhlIG91dGNvbWUgY29tcGFyZWQgdG8gdGhvc2UgaW4gcnVyYWwgYXJlYXMgKGxvZ1tPUl0gPSDigJMwLjQxOyA5NSUgQ0k6IOKAkzEuMCwgMC4xODsgcCA9IDAuMikuIEhvd2V2ZXIsIHRoaXMgYXNzb2NpYXRpb24gd2FzIG5vdCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50LCBhcyB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbCBpbmNsdWRlcyB6ZXJvLg0KDQpFZHVjYXRpb24NCg0KUmVsYXRpdmUgdG8gcGFydGljaXBhbnRzIHdpdGggaGlnaGVyIGVkdWNhdGlvbiwgbm9uZSBvZiB0aGUgb3RoZXIgZWR1Y2F0aW9uYWwgY2F0ZWdvcmllcyBzaG93ZWQgc2lnbmlmaWNhbnQgYXNzb2NpYXRpb25zIHdpdGggdGhlIG91dGNvbWU6DQoNCk5vIGZvcm1hbCBlZHVjYXRpb246IGxvZ1tPUl0gPSAwLjUyICg5NSUgQ0k6IOKAkzAuNDgsIDEuNTsgcCA9IDAuMykNCg0KUHJpbWFyeSBlZHVjYXRpb246IGxvZ1tPUl0gPSAwLjA1ICg5NSUgQ0k6IOKAkzAuNzIsIDAuODQ7IHAgPSAwLjkpDQoNClNlY29uZGFyeSBlZHVjYXRpb246IGxvZ1tPUl0gPSAwLjA5ICg5NSUgQ0k6IOKAkzAuNjYsIDAuODU7IHAgPSAwLjgpDQoNClRoZSBkaXJlY3Rpb24gb2YgdGhlIGNvZWZmaWNpZW50cyBzdWdnZXN0cyBzbGlnaHRseSBoaWdoZXIgb2RkcyBvZiB0aGUgb3V0Y29tZSBhbW9uZyB0aG9zZSB3aXRoIGxlc3MgZWR1Y2F0aW9uLCBidXQgdGhlIGxhY2sgb2Ygc3RhdGlzdGljYWwgc2lnbmlmaWNhbmNlIGluZGljYXRlcyBubyBjbGVhciBldmlkZW5jZSBvZiBhbiBlZHVjYXRpb25hbCBlZmZlY3QuDQoNCk9jY3VwYXRpb24NCg0KQ29tcGFyZWQgdG8gaW5kaXZpZHVhbHMgZW5nYWdlZCBpbiBidXNpbmVzcywgbm9uZSBvZiB0aGUgb2NjdXBhdGlvbmFsIGNhdGVnb3JpZXMgc2hvd2VkIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgYXNzb2NpYXRpb25zOg0KDQpGYXJtZXI6IGxvZ1tPUl0gPSDigJMwLjQxICg5NSUgQ0k6IOKAkzEuMiwgMC40MTsgcCA9IDAuMykNCg0KUmV0aXJlZDogbG9nW09SXSA9IOKAkzAuNTYgKDk1JSBDSTog4oCTMS43LCAwLjQ5OyBwID0gMC4zKQ0KDQpTZXJ2aWNlOiBsb2dbT1JdID0g4oCTMC4xMiAoOTUlIENJOiDigJMwLjkxLCAwLjY3OyBwID0gMC44KQ0KDQpVbmVtcGxveWVkOiBsb2dbT1JdID0g4oCTMC4yNiAoOTUlIENJOiDigJMxLjQsIDAuODA7IHAgPSAwLjYpDQoNCkFsdGhvdWdoIHNldmVyYWwgb2NjdXBhdGlvbnMgc2hvd2VkIG5lZ2F0aXZlIGNvZWZmaWNpZW50c+KAlHN1Z2dlc3Rpbmcgc2xpZ2h0bHkgcmVkdWNlZCBvZGRzIHJlbGF0aXZlIHRvIGJ1c2luZXNz4oCUdGhlIGRpZmZlcmVuY2VzIHdlcmUgbm90IHN0YXRpc3RpY2FsbHkgbWVhbmluZ2Z1bC4NCg0KRGlhYmV0ZXMgU3RhdHVzDQoNClBhcnRpY2lwYW50cyB3aXRoIGRpYWJldGVzIGhhZCBuZWFybHkgaWRlbnRpY2FsIG9kZHMgb2YgdGhlIG91dGNvbWUgY29tcGFyZWQgdG8gdGhvc2Ugd2l0aG91dCBkaWFiZXRlcyAobG9nW09SXSA9IDAuMDY7IDk1JSBDSTog4oCTMC42MSwgMC43MTsgcCA9IDAuOSksIGluZGljYXRpbmcgbm8gc2lnbmlmaWNhbnQgYXNzb2NpYXRpb24uDQoNClN1bW1hcnkNCg0KT3ZlcmFsbCwgbm9uZSBvZiB0aGUgZXhhbWluZWQgcHJlZGljdG9ycyB3ZXJlIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIG91dGNvbWUgdmFyaWFibGUgYXQgdGhlIDAuMDUgc2lnbmlmaWNhbmNlIGxldmVsLiBBbGwgcC12YWx1ZXMgZXhjZWVkZWQgMC4yLCBhbmQgYWxsIDk1JSBjb25maWRlbmNlIGludGVydmFscyBpbmNsdWRlZCB6ZXJvLCBzdWdnZXN0aW5nIHRoYXQgZGlmZmVyZW5jZXMgYnkgYWdlLCBzZXgsIEJNSSwgcmVzaWRlbmNlLCBlZHVjYXRpb24sIG9jY3VwYXRpb24sIG9yIGRpYWJldGVzIHN0YXR1cyB3ZXJlIG5vdCBtZWFuaW5nZnVsIGluIHRoaXMgbW9kZWwuDQoNClRoZXNlIHJlc3VsdHMgaW1wbHkgdGhhdCwgd2l0aGluIHRoaXMgc2FtcGxlLCB0aGUgb3V0Y29tZSBvZiBpbnRlcmVzdCBtYXkgYmUgaW5mbHVlbmNlZCBieSBmYWN0b3JzIG5vdCBpbmNsdWRlZCBpbiB0aGUgY3VycmVudCBhbmFseXNpcyBvciB0aGF0IHRoZSB0cnVlIGVmZmVjdHMgb2YgdGhlc2UgdmFyaWFibGVzIGFyZSBzbWFsbCBhbmQgc3RhdGlzdGljYWxseSBub24tc2lnbmlmaWNhbnQuDQoNCg0K