dowload the file sub<- readRDS(“Substatnive.RData”) View(sub)

TRANSLATE COLUMN FROM ENGLISH TO POLISH Aging_en<-sub\(Aging#abstract the table of Aging View(Aging_en) colnames(Aging_en)<-c("LP","Nr","Account Name","Typ","Wn_Dr","Ma_Cr","Turnover Dr","Turnover Cr","Saldo_Balance","Current","<30","31_60","61_90","90_180","180_360",">1Y","PD","LGD","EAD") BankAcc_en<-sub\)BankAcc View(BankAcc_en) colnames(BankAcc_en)<-c(“Date”,“Konto_DR.1.35700.”,“Konto_CR.1.35700.”,“Wartosc.1.35700.”,“Opis.1.35700.”) ChOA_en<-sub\(ChOA View(ChOA_en) colnames(ChOA_en)<-c("Section","Number","Account name","Class","Typ") Journal_en<-sub\)Journal View(Journal_en) colnames(Journal_en)<-c(“Date”,“Konto_DR.1.35700.”,“Konto_CR.1.35700.”,“Wartosc.1.35700.”,“Opis.1.35700.”) Counter<-sub\(Kontr View(Counter) colnames(Counter)<-c("LP","Nr","Name","Typ","Wn_Dr","Ma_Cr","OB._WN_DR","OB._MA_CR","Saldo_Balance") TB_en<-sub\)TB View(TB_en)

colnames(TB_en)<-c(“Nr”,“Class”,“NR.1”,“Account name”,“Class”,“Subclass”,“Opening Balance”,“Debit turnover”,“Credit turnover”,“Closing balance”) ZPK_en<-sub\(ZPK View(ZPK_en) colnames(ZPK_en)<-c("Section","Number","Nazwa konta","Account name","Account type") FAR_RST_Final_en<-sub\)FAR_RST_Final View(FAR_RST_Final_en) colnames(FAR_RST_Final_en)<-c(“LP”,“Date”,“Name”,“City”,“Depreciation rate”,“Gross value”,“Acc.depreciation”,“Depreciation”,“Sold”,“Type”,“NAME”) CC_PL_en<-sub\(CC_PL View(CC_PL_en) CC_BS_en<-sub\)CC_BS View(CC_BS_en)

Question 1 Reconcile the Turnover to the T&E

turnover <- TB_en\(`Credit turnover`-TB_en\)Debit turnover reconciled_TB<- cbind(TB_en,Turnover=turnover) View(reconciled_TB)

Question 2 Make an Analytical review of fixed assets B/O + Increases - Decreases Reclassification BZ for gross and net worth. Analytically check the accrual for the reasonableness of the depreciation charge

Fixed_asset_bs<-CC_BS_en[7,]#Abstract fixed assets from BS View(Fixed_asset_bs) Fixed_asset_tb<-TB_en[c(1,5),c(4,7,8,9,10)]#Fixed assets and accumulated depreciation from TB View(Fixed_asset_tb) Fixed_asset_Tb_OB<-Fixed_asset_tb[1,2]-Fixed_asset_tb[2,2]#Calculate net value of fixed assets at previous financial year Fixed_asset_Tb_OB Fixed_asset_Tb_CB<-Fixed_asset_tb[1,5]-Fixed_asset_tb[2,5]#The net value of fixed assets at current financial year Fixed_asset_Tb_CB Fixed_asset_Diff<-c(Fixed_asset_Tb_OB-Fixed_asset_bs[1,3],Fixed_asset_Tb_CB-Fixed_asset_bs[1,2])#Comparison of the results from TB and BS Fixed_asset_Diff

The fixed assets’ figures in the trial balance (TB) for the end of the previous year and the end of the current year are as follows: -640,895.4 and -673,582.5, respectively. Upon reviewing the TB, it is evident that the Gross Value of fixed assets has increased from 15,930.52 to 22,894.136 over the course of the year. Consequently, one would expect the accumulated depreciation to have also increased. However, the TB shows that the year-end accumulated depreciation amount is 7,943.673, which is lower than the beginning-of-the-year value of 12,100.92. This difference indicates abiaised depreciation charge for the current year.

Question 3 Check the fixed assets register for arithmetic accuracy

Fixed_3<-FAR_RST_Final_en[,c(11,2,5,6,7,8)]#Extract “NAME”“Date”“Depreciation rate”“Gross value”“Acc.Deprecition”and “Depreciation” from FAR View(Fixed_3) Fixed_3\(Dep<-Fixed_3\)Depreciation rate*Fixed_3\(`Gross value`#calculate the depreciation of the fixed assets Fixed_3\)DepDiff<-Fixed_3\(Dep-Fixed_3\)Depreciation #Comparison of the depreciation after recalculating with the original depreciation in the table sum_deprecation_Diff<-sum(Fixed_3\(DepDiff) sum_deprecation_Diff Fixed_3\)ClosingDate<-as.Date(“2023-04-30”) #Create a new column and insert the current time from Journal Fixed_3\(Date<-as.Date(Fixed_3\)Date)#Change date format library(lubridate) Fixed_3\(MonthDiff<-interval(Fixed_3\)Date,Fixed_3\(ClosingDate)%/% months(1)#Calculation of the number of month between purchase time and current time Fixed_3\)Acc.dep<-(Fixed_3\(Dep/12)*Fixed_3\)MonthDiff#calculate the accumulated dep. Fixed_3\(Acc.dep<-ifelse(Fixed_3\)Acc.dep>Fixed_3\(`Gross value`,Fixed_3\)Gross value,Fixed_3\(Acc.dep)#When the result is higher than gross value,then the answer is gross value Fixed_3\)Acc.depDiff<-(Fixed_3\(Acc.dep-Fixed_3\)Acc.depreciation)#Calculate the difference between original Acc.dep. and recalculated Acc.dep sum_Acc.depDiff<-sum(Fixed_3$Acc.depDiff) sum_Acc.depDiff

Question 4 :lnvalidate the provision for receivables. Prospective and retrospective.

Aging_subset<-Aging_en[Aging_en\(Typ=="Odbiorca",]#Make an extraction based on the keyword “Odbiorca”of Typ column in Ag View(Aging_subset) Aging_subset\)Provision<-rowSums(Aging_subset[,11:16])#calculate the sum of bad debt for each patron sumPro<-sum(Aging_subset\(Provision)# sum of bad debts sumPro Aging_subset\)EL<-Aging_subset\(PD*Aging_subset\)LGD*Aging_subset\(EAD#calculate EL for each patron sumEL<-sum(Aging_subset\)EL) sumEL Provision_TB<-TB_en[36,]#provision of bad debts for trade receivable View(Provision_TB) Diff_1<-sumPro-Provision_TB[1,10]#Compare the provision from TB with the sum of bad debt based on aging analysis Diff_1 Diff_2<-sumEL-Provision_TB[1,10]#Compare the provision from TB with the sum of bad debt based on prospective approach Diff_2 The differences observed when considering the aging analysis and prospective approach are as follows: [1] 12,439,568 [1] 153,575.9. Assessing the aging study and adopting a forward-looking perspective, it becomes apparent that the provision specified in the trial balance (TB) is insufficient to cover the bad debt. Therefore, a modification is necessary to address this issue.

Question 6:Reconcile the equity position to the KRS extract.

Equity_TB<-TB_en[c(99,100,101,102,109,110,111),c(4,7,10)]#Rows related to equity from TB View(Equity_TB) Equity_TB_OB<-Equity_TB[1,2]+Equity_TB[2,2]+Equity_TB[3,2]+Equity_TB[4,2]+Equity_TB[5,2]-Equity_TB[6,2]-Equity_TB[7,2]# equity at the end of previous financial year Equity_TB_OB Equity_TB_CB<-Equity_TB[1,3]+Equity_TB[2,3]+Equity_TB[3,3]+Equity_TB[4,3]+Equity_TB[5,3]-Equity_TB[6,3]-Equity_TB[7,3]#equity at the end of current financial year Equity_TB_CB Equity_01<-c(Equity_TB_OB,Equity_TB_CB) View(Equity_01) Equity_BS<-CC_BS_en[50,]#equity from BS View(Equity_BS) Equity_Diff<-c(Equity_TB_OB-Equity_BS[1,3],Equity_TB_CB-Equity_BS[1,2])#Comparison of the results from TB with the data in BS Equity_Diff

The differences between the end of the previous financial year and the end of the current financial year are as follows: [1] -538,014.9 -553,514.9.

Question 7 Take a sample of fixed assets and check the calculation of depreciation.

sample(c(1:113),10,replace = FALSE)#Pick 10 number from 1 to 113 at random Fixed_asset_07<-FAR_RST_Final_en[c(37,16,11,77,93,72,112,7,85,83),c(11,2,5,6,7,8,9)]#Extract corresponding rows according to the number View(Fixed_asset_07) Fixed_asset_07\(Closingdate<-as.Date("2023-04-30")#Create a new column and insert the current time from Jouranl Fixed_asset_07\)Date<-as.Date(Fixed_asset_07\(Date)#Change the format of the date library(lubridate) Fixed_asset_07\)MonthDiff <- interval( Fixed_asset_07\(Date,Fixed_asset_07\)Closingdate)%/% months(1)#Calculate the number of month between purchase time and current time print(Fixed_asset_07) Fixed_asset_07\(Dep<-Fixed_asset_07\)Depreciation rate*Fixed_asset_07\(`Gross value`#Recalculate the dep. Fixed_asset_07\)DepDiff<-Fixed_asset_07\(Dep-Fixed_asset_07\)Depreciation#Calculate the difference between recalcuted dep. and original data sum_Depreciation_Diff<-sum(Fixed_asset_07$DepDiff) sum_Depreciation_Diff

Difference of depreciation is 0

Question 8: Calculate the correctness of the calculation of interest on liabilities. Assume a rate of 8% pa.

Create a subset of Journal_en where the description is “Kredyty bankowe długoterminowe”

Journal_subset <- Journal_en[Journal_en$Opis.1.35700. == “Kredyty bankowe długoterminowe”, ] View(Journal_subset)

Create a subset of Journal_en where the description is “Kredyty bankowe krótkoterminowe”

Journal_subset_2 <- Journal_en[Journal_en$Opis.1.35700. == “Kredyty bankowe krótkoterminowe”, ] View(Journal_subset_2)

Optional: Limit Journal_subset to the first 239 rows if needed

If this is not necessary, you can remove this step

Journal_subset <- Journal_subset[1:239, ] View(Journal_subset)

Create a subset of BankAcc_en where the description is “Kredyty bankowe długoterminowe”

BA_subset <- BankAcc_en[BankAcc_en$Opis.1.35700. == “Kredyty bankowe długoterminowe”, ] View(BA_subset)

Create a subset of BankAcc_en where the description is “Kredyty bankowe krótkoterminowe”

Bank_account_subset_2 <- BankAcc_en[BankAcc_en$Opis.1.35700. == “Kredyty bankowe krótkoterminowe”, ] View(Bank_account_subset_2)

Question 9 Write the audit program for provisions. Test on Provisions A provision is a liability of uncertain timing or amount that should only be recognized if:

An entity has a present obligation (legal or constructive) as a result of a past event. It is probable (greater than 50%) that an outflow of economic resources will be required to settle the obligation. A reliable estimate can be made of the amount of the obligation. Therefore, the test on provisions should be based on these criteria.

Substantive Process 1. Present Obligation Constructive Obligation a. Determine if a valid expectation has been created in other parties that the entity will discharge the obligation. b. Discuss with the directors whether they have formally announced their intention to address the obligation, and confirm that a present obligation exists at the year-end. If announced before the year-end, review supporting documentation to verify that the decision was formally announced. c. Review evidence of past practices, published policies, and statements made to confirm the existence of a constructive obligation.

Legal Obligation a. Discuss with management the nature of the issue to ensure a full understanding and to assess whether a legal obligation exists. b. Review correspondence and other documentation to assess whether the company has a present obligation as a result of past events.

  1. Probable Outflow
  1. Review the post year-end period to identify whether any payments have been made related to the provision.
  2. Discuss the position with directors regarding similar past provisions. Were these provisions eventually settled?
  3. Review board minutes and company correspondence to ascertain whether it is probable that payments will be made by examining the supporting evidence.
  4. Write and send an inquiry letter to the company’s lawyers to obtain their views on the probability of the claim being successful.
  5. Obtain a written representation from the directors to confirm the completeness of the provision and their view that the chances of a successful claim are remote, indicating that no provision or contingent liability is required.
  1. Reliable Estimate
  1. Obtain a detailed breakdown of the calculation of the provision and verify its completeness. Agree components of the calculation to supporting documentation.
  2. Review any correspondence and other documentation to assess whether the company has a reliable estimate of potential payments that might be made.

This structured approach ensures that provisions are recognized, measured, and disclosed accurately in the financial statements in compliance with the relevant accounting standards.

QUESTION 10: GENERAL AUDIT PROGRAM A general audit program typically consists of two main parts:

  1. Overall Audit Strategy The overall audit strategy is used to determine the scope of the audit, reporting objectives, timing, audit direction, and audit resources. At this stage, it is necessary to confirm the following:

Appropriateness of the Audit Scope: Ensure that the scope of the audit covers all relevant areas and risks. Reasonableness of the Time Budget: Assess whether the time allocated for the audit is sufficient to perform all necessary procedures. Appropriateness of the Selection: Ensure the selection of audit areas, transactions, and balances is appropriate. Determination of Materiality: Establish an appropriate level of materiality for the financial statements as a whole and for specific account balances and transactions. 2. Specific Audit Plan The specific audit plan consists of three main steps: risk assessment, further audit procedures, and other audit procedures.

Risk Assessment (Inherent Risk - IR)

Objective: Understand the entity and its environment. Assess the risk of material misstatement at the financial statement and assertion levels. Procedures: Obtain an understanding of the entity’s business, industry, and regulatory environment. Identify and assess the risks of material misstatement due to fraud or error. Further Audit Procedures There are two types of further audit procedures:

  1. Tests of Control (Control Risk - CR)

Objective: Test the effectiveness of the entity’s internal controls in preventing or detecting material misstatements. Procedures: Evaluate the design and implementation of key internal controls. Perform tests of control to determine whether controls are operating effectively. b. Substantive Procedures (Detection Risk - DR)

Objective: Detect material misstatements in the financial statements. Procedures: Tests of Detail: Verify the accuracy of specific transactions and balances. Examples include: Vouching amounts back to invoices. Performing physical inspection of assets. Analytical Procedures: Use comparisons and relationships to assess the reasonableness of account balances. Examples include: Variance analysis. Ratio analysis. Proof in total. Other Audit Procedures

Objective: Address additional areas of concern based on professional judgment. Procedures: Fraud Risk Assessment: Assess the risk of fraud and design procedures to address identified risks. Going Concern Assessment: Evaluate the entity’s ability to continue as a going concern. Related Party Transactions: Identify and evaluate the nature and business purpose of transactions with related parties. Other Specific Procedures: Perform any additional procedures as required by the specific circumstances of the audit. This general audit program provides a comprehensive framework for conducting an audit, ensuring that all critical areas are thoroughly examined and documented.

This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.

plot(cars)

Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.

When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).

The preview shows you a rendered HTML copy of the contents of the editor. Consequently, unlike Knit, Preview does not run any R code chunks. Instead, the output of the chunk when it was last run in the editor is displayed.

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQpkb3dsb2FkIHRoZSBmaWxlCnN1YjwtIHJlYWRSRFMoIlN1YnN0YXRuaXZlLlJEYXRhIikKVmlldyhzdWIpCgpUUkFOU0xBVEUgQ09MVU1OIEZST00gRU5HTElTSCBUTyBQT0xJU0gKQWdpbmdfZW48LXN1YiRBZ2luZyNhYnN0cmFjdCB0aGUgdGFibGUgb2YgQWdpbmcKVmlldyhBZ2luZ19lbikKY29sbmFtZXMoQWdpbmdfZW4pPC1jKCJMUCIsIk5yIiwiQWNjb3VudCBOYW1lIiwiVHlwIiwiV25fRHIiLCJNYV9DciIsIlR1cm5vdmVyIERyIiwiVHVybm92ZXIgQ3IiLCJTYWxkb19CYWxhbmNlIiwiQ3VycmVudCIsIjwzMCIsIjMxXzYwIiwiNjFfOTAiLCI5MF8xODAiLCIxODBfMzYwIiwiPjFZIiwiUEQiLCJMR0QiLCJFQUQiKQpCYW5rQWNjX2VuPC1zdWIkQmFua0FjYwpWaWV3KEJhbmtBY2NfZW4pCmNvbG5hbWVzKEJhbmtBY2NfZW4pPC1jKCJEYXRlIiwiS29udG9fRFIuMS4zNTcwMC4iLCJLb250b19DUi4xLjM1NzAwLiIsIldhcnRvc2MuMS4zNTcwMC4iLCJPcGlzLjEuMzU3MDAuIikKQ2hPQV9lbjwtc3ViJENoT0EKVmlldyhDaE9BX2VuKQpjb2xuYW1lcyhDaE9BX2VuKTwtYygiU2VjdGlvbiIsIk51bWJlciIsIkFjY291bnQgbmFtZSIsIkNsYXNzIiwiVHlwIikKSm91cm5hbF9lbjwtc3ViJEpvdXJuYWwKVmlldyhKb3VybmFsX2VuKQpjb2xuYW1lcyhKb3VybmFsX2VuKTwtYygiRGF0ZSIsIktvbnRvX0RSLjEuMzU3MDAuIiwiS29udG9fQ1IuMS4zNTcwMC4iLCJXYXJ0b3NjLjEuMzU3MDAuIiwiT3Bpcy4xLjM1NzAwLiIpCkNvdW50ZXI8LXN1YiRLb250cgpWaWV3KENvdW50ZXIpCmNvbG5hbWVzKENvdW50ZXIpPC1jKCJMUCIsIk5yIiwiTmFtZSIsIlR5cCIsIlduX0RyIiwiTWFfQ3IiLCJPQi5fV05fRFIiLCJPQi5fTUFfQ1IiLCJTYWxkb19CYWxhbmNlIikKVEJfZW48LXN1YiRUQgpWaWV3KFRCX2VuKQoKY29sbmFtZXMoVEJfZW4pPC1jKCJOciIsIkNsYXNzIiwiTlIuMSIsIkFjY291bnQgbmFtZSIsIkNsYXNzIiwiU3ViY2xhc3MiLCJPcGVuaW5nIEJhbGFuY2UiLCJEZWJpdCB0dXJub3ZlciIsIkNyZWRpdCB0dXJub3ZlciIsIkNsb3NpbmcgYmFsYW5jZSIpClpQS19lbjwtc3ViJFpQSwpWaWV3KFpQS19lbikKY29sbmFtZXMoWlBLX2VuKTwtYygiU2VjdGlvbiIsIk51bWJlciIsIk5hendhIGtvbnRhIiwiQWNjb3VudCBuYW1lIiwiQWNjb3VudCB0eXBlIikKRkFSX1JTVF9GaW5hbF9lbjwtc3ViJEZBUl9SU1RfRmluYWwKVmlldyhGQVJfUlNUX0ZpbmFsX2VuKQpjb2xuYW1lcyhGQVJfUlNUX0ZpbmFsX2VuKTwtYygiTFAiLCJEYXRlIiwiTmFtZSIsIkNpdHkiLCJEZXByZWNpYXRpb24gcmF0ZSIsIkdyb3NzIHZhbHVlIiwiQWNjLmRlcHJlY2lhdGlvbiIsIkRlcHJlY2lhdGlvbiIsIlNvbGQiLCJUeXBlIiwiTkFNRSIpCkNDX1BMX2VuPC1zdWIkQ0NfUEwKVmlldyhDQ19QTF9lbikKQ0NfQlNfZW48LXN1YiRDQ19CUwpWaWV3KENDX0JTX2VuKQoKUXVlc3Rpb24gMSBSZWNvbmNpbGUgdGhlIFR1cm5vdmVyIHRvIHRoZSBUJkUKCnR1cm5vdmVyIDwtIFRCX2VuJGBDcmVkaXQgdHVybm92ZXJgLVRCX2VuJGBEZWJpdCB0dXJub3ZlcmAKcmVjb25jaWxlZF9UQjwtIGNiaW5kKFRCX2VuLFR1cm5vdmVyPXR1cm5vdmVyKQpWaWV3KHJlY29uY2lsZWRfVEIpCgpRdWVzdGlvbiAyIE1ha2UgYW4gQW5hbHl0aWNhbCByZXZpZXcgb2YgZml4ZWQgYXNzZXRzIEIvTyArIEluY3JlYXNlcyAtIERlY3JlYXNlcyBSZWNsYXNzaWZpY2F0aW9uIEJaIGZvciBncm9zcyBhbmQgbmV0IHdvcnRoLiBBbmFseXRpY2FsbHkgY2hlY2sgdGhlIGFjY3J1YWwgZm9yIHRoZSByZWFzb25hYmxlbmVzcyBvZiB0aGUgZGVwcmVjaWF0aW9uIGNoYXJnZQoKRml4ZWRfYXNzZXRfYnM8LUNDX0JTX2VuWzcsXSNBYnN0cmFjdCBmaXhlZCBhc3NldHMgZnJvbSBCUwpWaWV3KEZpeGVkX2Fzc2V0X2JzKQpGaXhlZF9hc3NldF90YjwtVEJfZW5bYygxLDUpLGMoNCw3LDgsOSwxMCldI0ZpeGVkIGFzc2V0cyBhbmQgYWNjdW11bGF0ZWQgZGVwcmVjaWF0aW9uIGZyb20gVEIKVmlldyhGaXhlZF9hc3NldF90YikKRml4ZWRfYXNzZXRfVGJfT0I8LUZpeGVkX2Fzc2V0X3RiWzEsMl0tRml4ZWRfYXNzZXRfdGJbMiwyXSNDYWxjdWxhdGUgbmV0IHZhbHVlIG9mIGZpeGVkIGFzc2V0cyBhdCBwcmV2aW91cyBmaW5hbmNpYWwgeWVhcgpGaXhlZF9hc3NldF9UYl9PQgpGaXhlZF9hc3NldF9UYl9DQjwtRml4ZWRfYXNzZXRfdGJbMSw1XS1GaXhlZF9hc3NldF90YlsyLDVdI1RoZSBuZXQgdmFsdWUgb2YgZml4ZWQgYXNzZXRzIGF0IGN1cnJlbnQgZmluYW5jaWFsIHllYXIKRml4ZWRfYXNzZXRfVGJfQ0IKRml4ZWRfYXNzZXRfRGlmZjwtYyhGaXhlZF9hc3NldF9UYl9PQi1GaXhlZF9hc3NldF9ic1sxLDNdLEZpeGVkX2Fzc2V0X1RiX0NCLUZpeGVkX2Fzc2V0X2JzWzEsMl0pI0NvbXBhcmlzb24gb2YgdGhlIHJlc3VsdHMgZnJvbSBUQiBhbmQgQlMKRml4ZWRfYXNzZXRfRGlmZgoKVGhlIGZpeGVkIGFzc2V0c+KAmSBmaWd1cmVzIGluIHRoZSB0cmlhbCBiYWxhbmNlIChUQikgZm9yIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIHllYXIgYW5kIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgeWVhciBhcmUgYXMgZm9sbG93czogLTY0MCw4OTUuNCBhbmQgLTY3Myw1ODIuNSwgcmVzcGVjdGl2ZWx5LiBVcG9uIHJldmlld2luZyB0aGUgVEIsIGl0IGlzIGV2aWRlbnQgdGhhdCB0aGUgR3Jvc3MgVmFsdWUgb2YgZml4ZWQgYXNzZXRzIGhhcyBpbmNyZWFzZWQgZnJvbSAxNSw5MzAuNTIgdG8gMjIsODk0LjEzNiBvdmVyIHRoZSBjb3Vyc2Ugb2YgdGhlIHllYXIuIENvbnNlcXVlbnRseSwgb25lIHdvdWxkIGV4cGVjdCB0aGUgYWNjdW11bGF0ZWQgZGVwcmVjaWF0aW9uIHRvIGhhdmUgYWxzbyBpbmNyZWFzZWQuIEhvd2V2ZXIsIHRoZSBUQiBzaG93cyB0aGF0IHRoZSB5ZWFyLWVuZCBhY2N1bXVsYXRlZCBkZXByZWNpYXRpb24gYW1vdW50IGlzIDcsOTQzLjY3Mywgd2hpY2ggaXMgbG93ZXIgdGhhbiB0aGUgYmVnaW5uaW5nLW9mLXRoZS15ZWFyIHZhbHVlIG9mIDEyLDEwMC45Mi4gVGhpcyBkaWZmZXJlbmNlIGluZGljYXRlcyBhYmlhaXNlZCBkZXByZWNpYXRpb24gY2hhcmdlIGZvciB0aGUgY3VycmVudCB5ZWFyLgoKUXVlc3Rpb24gMyBDaGVjayB0aGUgZml4ZWQgYXNzZXRzIHJlZ2lzdGVyIGZvciBhcml0aG1ldGljIGFjY3VyYWN5CgpGaXhlZF8zPC1GQVJfUlNUX0ZpbmFsX2VuWyxjKDExLDIsNSw2LDcsOCldI0V4dHJhY3QgIk5BTUUiIkRhdGUiIkRlcHJlY2lhdGlvbiByYXRlIiJHcm9zcyB2YWx1ZSIiQWNjLkRlcHJlY2l0aW9uImFuZCAiRGVwcmVjaWF0aW9uIiBmcm9tIEZBUgpWaWV3KEZpeGVkXzMpCkZpeGVkXzMkRGVwPC1GaXhlZF8zJGBEZXByZWNpYXRpb24gcmF0ZWAqRml4ZWRfMyRgR3Jvc3MgdmFsdWVgI2NhbGN1bGF0ZSB0aGUgZGVwcmVjaWF0aW9uIG9mIHRoZSBmaXhlZCBhc3NldHMKRml4ZWRfMyREZXBEaWZmPC1GaXhlZF8zJERlcC1GaXhlZF8zJERlcHJlY2lhdGlvbiAgICNDb21wYXJpc29uIG9mIHRoZSBkZXByZWNpYXRpb24gYWZ0ZXIgcmVjYWxjdWxhdGluZyB3aXRoIHRoZSBvcmlnaW5hbCBkZXByZWNpYXRpb24gaW4gdGhlIHRhYmxlCnN1bV9kZXByZWNhdGlvbl9EaWZmPC1zdW0oRml4ZWRfMyREZXBEaWZmKQpzdW1fZGVwcmVjYXRpb25fRGlmZgpGaXhlZF8zJENsb3NpbmdEYXRlPC1hcy5EYXRlKCIyMDIzLTA0LTMwIikgICNDcmVhdGUgYSBuZXcgY29sdW1uIGFuZCBpbnNlcnQgdGhlIGN1cnJlbnQgdGltZSBmcm9tIEpvdXJuYWwKRml4ZWRfMyREYXRlPC1hcy5EYXRlKEZpeGVkXzMkRGF0ZSkjQ2hhbmdlIGRhdGUgZm9ybWF0CmxpYnJhcnkobHVicmlkYXRlKQpGaXhlZF8zJE1vbnRoRGlmZjwtaW50ZXJ2YWwoRml4ZWRfMyREYXRlLEZpeGVkXzMkQ2xvc2luZ0RhdGUpJS8lIG1vbnRocygxKSNDYWxjdWxhdGlvbiBvZiB0aGUgbnVtYmVyIG9mIG1vbnRoIGJldHdlZW4gcHVyY2hhc2UgdGltZSBhbmQgY3VycmVudCB0aW1lCkZpeGVkXzMkQWNjLmRlcDwtKEZpeGVkXzMkRGVwLzEyKSpGaXhlZF8zJE1vbnRoRGlmZiNjYWxjdWxhdGUgdGhlIGFjY3VtdWxhdGVkIGRlcC4KRml4ZWRfMyRBY2MuZGVwPC1pZmVsc2UoRml4ZWRfMyRBY2MuZGVwPkZpeGVkXzMkYEdyb3NzIHZhbHVlYCxGaXhlZF8zJGBHcm9zcyB2YWx1ZWAsRml4ZWRfMyRBY2MuZGVwKSNXaGVuIHRoZSByZXN1bHQgaXMgaGlnaGVyIHRoYW4gZ3Jvc3MgdmFsdWUsdGhlbiB0aGUgYW5zd2VyIGlzIGdyb3NzIHZhbHVlCkZpeGVkXzMkQWNjLmRlcERpZmY8LShGaXhlZF8zJEFjYy5kZXAtRml4ZWRfMyRBY2MuZGVwcmVjaWF0aW9uKSNDYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvcmlnaW5hbCBBY2MuZGVwLiBhbmQgcmVjYWxjdWxhdGVkIEFjYy5kZXAKc3VtX0FjYy5kZXBEaWZmPC1zdW0oRml4ZWRfMyRBY2MuZGVwRGlmZikKc3VtX0FjYy5kZXBEaWZmCgpRdWVzdGlvbiA0IDpsbnZhbGlkYXRlIHRoZSBwcm92aXNpb24gZm9yIHJlY2VpdmFibGVzLiBQcm9zcGVjdGl2ZSBhbmQgcmV0cm9zcGVjdGl2ZS4KCkFnaW5nX3N1YnNldDwtQWdpbmdfZW5bQWdpbmdfZW4kVHlwPT0iT2RiaW9yY2EiLF0jTWFrZSBhbiBleHRyYWN0aW9uIGJhc2VkIG9uIHRoZSBrZXl3b3JkIOKAnE9kYmlvcmNh4oCdb2YgVHlwIGNvbHVtbiBpbiBBZwpWaWV3KEFnaW5nX3N1YnNldCkKQWdpbmdfc3Vic2V0JFByb3Zpc2lvbjwtcm93U3VtcyhBZ2luZ19zdWJzZXRbLDExOjE2XSkjY2FsY3VsYXRlIHRoZSBzdW0gb2YgYmFkIGRlYnQgZm9yIGVhY2ggcGF0cm9uCnN1bVBybzwtc3VtKEFnaW5nX3N1YnNldCRQcm92aXNpb24pIyBzdW0gb2YgYmFkIGRlYnRzCnN1bVBybwpBZ2luZ19zdWJzZXQkRUw8LUFnaW5nX3N1YnNldCRQRCpBZ2luZ19zdWJzZXQkTEdEKkFnaW5nX3N1YnNldCRFQUQjY2FsY3VsYXRlIEVMIGZvciBlYWNoIHBhdHJvbgpzdW1FTDwtc3VtKEFnaW5nX3N1YnNldCRFTCkKc3VtRUwKUHJvdmlzaW9uX1RCPC1UQl9lblszNixdI3Byb3Zpc2lvbiBvZiBiYWQgZGVidHMgZm9yIHRyYWRlIHJlY2VpdmFibGUKVmlldyhQcm92aXNpb25fVEIpCkRpZmZfMTwtc3VtUHJvLVByb3Zpc2lvbl9UQlsxLDEwXSNDb21wYXJlIHRoZSBwcm92aXNpb24gZnJvbSBUQiB3aXRoIHRoZSBzdW0gb2YgYmFkIGRlYnQgYmFzZWQgb24gYWdpbmcgYW5hbHlzaXMKRGlmZl8xCkRpZmZfMjwtc3VtRUwtUHJvdmlzaW9uX1RCWzEsMTBdI0NvbXBhcmUgdGhlIHByb3Zpc2lvbiBmcm9tIFRCIHdpdGggdGhlIHN1bSBvZiBiYWQgZGVidCBiYXNlZCBvbiBwcm9zcGVjdGl2ZSBhcHByb2FjaApEaWZmXzIKVGhlIGRpZmZlcmVuY2VzIG9ic2VydmVkIHdoZW4gY29uc2lkZXJpbmcgdGhlIGFnaW5nIGFuYWx5c2lzIGFuZCBwcm9zcGVjdGl2ZSBhcHByb2FjaCBhcmUgYXMgZm9sbG93czogWzFdIDEyLDQzOSw1NjggWzFdIDE1Myw1NzUuOS4gQXNzZXNzaW5nIHRoZSBhZ2luZyBzdHVkeSBhbmQgYWRvcHRpbmcgYSBmb3J3YXJkLWxvb2tpbmcgcGVyc3BlY3RpdmUsIGl0IGJlY29tZXMgYXBwYXJlbnQgdGhhdCB0aGUgcHJvdmlzaW9uIHNwZWNpZmllZCBpbiB0aGUgdHJpYWwgYmFsYW5jZSAoVEIpIGlzIGluc3VmZmljaWVudCB0byBjb3ZlciB0aGUgYmFkIGRlYnQuIFRoZXJlZm9yZSwgYSBtb2RpZmljYXRpb24gaXMgbmVjZXNzYXJ5IHRvIGFkZHJlc3MgdGhpcyBpc3N1ZS4KClF1ZXN0aW9uIDY6UmVjb25jaWxlIHRoZSBlcXVpdHkgcG9zaXRpb24gdG8gdGhlIEtSUyBleHRyYWN0LgoKRXF1aXR5X1RCPC1UQl9lbltjKDk5LDEwMCwxMDEsMTAyLDEwOSwxMTAsMTExKSxjKDQsNywxMCldI1Jvd3MgcmVsYXRlZCB0byBlcXVpdHkgZnJvbSBUQgpWaWV3KEVxdWl0eV9UQikKRXF1aXR5X1RCX09CPC1FcXVpdHlfVEJbMSwyXStFcXVpdHlfVEJbMiwyXStFcXVpdHlfVEJbMywyXStFcXVpdHlfVEJbNCwyXStFcXVpdHlfVEJbNSwyXS1FcXVpdHlfVEJbNiwyXS1FcXVpdHlfVEJbNywyXSMgZXF1aXR5IGF0IHRoZSBlbmQgb2YgcHJldmlvdXMgZmluYW5jaWFsIHllYXIKRXF1aXR5X1RCX09CCkVxdWl0eV9UQl9DQjwtRXF1aXR5X1RCWzEsM10rRXF1aXR5X1RCWzIsM10rRXF1aXR5X1RCWzMsM10rRXF1aXR5X1RCWzQsM10rRXF1aXR5X1RCWzUsM10tRXF1aXR5X1RCWzYsM10tRXF1aXR5X1RCWzcsM10jZXF1aXR5IGF0IHRoZSBlbmQgb2YgY3VycmVudCBmaW5hbmNpYWwgeWVhcgpFcXVpdHlfVEJfQ0IKRXF1aXR5XzAxPC1jKEVxdWl0eV9UQl9PQixFcXVpdHlfVEJfQ0IpClZpZXcoRXF1aXR5XzAxKQpFcXVpdHlfQlM8LUNDX0JTX2VuWzUwLF0jZXF1aXR5IGZyb20gQlMKVmlldyhFcXVpdHlfQlMpCkVxdWl0eV9EaWZmPC1jKEVxdWl0eV9UQl9PQi1FcXVpdHlfQlNbMSwzXSxFcXVpdHlfVEJfQ0ItRXF1aXR5X0JTWzEsMl0pI0NvbXBhcmlzb24gb2YgdGhlIHJlc3VsdHMgZnJvbSBUQiB3aXRoIHRoZSBkYXRhIGluIEJTCkVxdWl0eV9EaWZmCgpUaGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBmaW5hbmNpYWwgeWVhciBhbmQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBmaW5hbmNpYWwgeWVhciBhcmUgYXMgZm9sbG93czogWzFdIC01MzgsMDE0LjkgLTU1Myw1MTQuOS4KClF1ZXN0aW9uIDcgVGFrZSBhIHNhbXBsZSBvZiBmaXhlZCBhc3NldHMgYW5kIGNoZWNrIHRoZSBjYWxjdWxhdGlvbiBvZiBkZXByZWNpYXRpb24uCgpzYW1wbGUoYygxOjExMyksMTAscmVwbGFjZSA9IEZBTFNFKSNQaWNrIDEwIG51bWJlciBmcm9tIDEgdG8gMTEzIGF0IHJhbmRvbQpGaXhlZF9hc3NldF8wNzwtRkFSX1JTVF9GaW5hbF9lbltjKDM3LDE2LDExLDc3LDkzLDcyLDExMiw3LDg1LDgzKSxjKDExLDIsNSw2LDcsOCw5KV0jRXh0cmFjdCBjb3JyZXNwb25kaW5nIHJvd3MgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIKVmlldyhGaXhlZF9hc3NldF8wNykKRml4ZWRfYXNzZXRfMDckQ2xvc2luZ2RhdGU8LWFzLkRhdGUoIjIwMjMtMDQtMzAiKSNDcmVhdGUgYSBuZXcgY29sdW1uIGFuZCBpbnNlcnQgdGhlIGN1cnJlbnQgdGltZSBmcm9tIEpvdXJhbmwKRml4ZWRfYXNzZXRfMDckRGF0ZTwtYXMuRGF0ZShGaXhlZF9hc3NldF8wNyREYXRlKSNDaGFuZ2UgdGhlIGZvcm1hdCBvZiB0aGUgZGF0ZQpsaWJyYXJ5KGx1YnJpZGF0ZSkKRml4ZWRfYXNzZXRfMDckTW9udGhEaWZmIDwtIGludGVydmFsKCBGaXhlZF9hc3NldF8wNyREYXRlLEZpeGVkX2Fzc2V0XzA3JENsb3NpbmdkYXRlKSUvJSBtb250aHMoMSkjQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgbW9udGggYmV0d2VlbiBwdXJjaGFzZSB0aW1lIGFuZCBjdXJyZW50IHRpbWUKcHJpbnQoRml4ZWRfYXNzZXRfMDcpCkZpeGVkX2Fzc2V0XzA3JERlcDwtRml4ZWRfYXNzZXRfMDckYERlcHJlY2lhdGlvbiByYXRlYCpGaXhlZF9hc3NldF8wNyRgR3Jvc3MgdmFsdWVgI1JlY2FsY3VsYXRlIHRoZSBkZXAuCkZpeGVkX2Fzc2V0XzA3JERlcERpZmY8LUZpeGVkX2Fzc2V0XzA3JERlcC1GaXhlZF9hc3NldF8wNyREZXByZWNpYXRpb24jQ2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcmVjYWxjdXRlZCBkZXAuIGFuZCBvcmlnaW5hbCBkYXRhCnN1bV9EZXByZWNpYXRpb25fRGlmZjwtc3VtKEZpeGVkX2Fzc2V0XzA3JERlcERpZmYpCnN1bV9EZXByZWNpYXRpb25fRGlmZgoKRGlmZmVyZW5jZSBvZiBkZXByZWNpYXRpb24gaXMgMAoKUXVlc3Rpb24gODogQ2FsY3VsYXRlIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgY2FsY3VsYXRpb24gb2YgaW50ZXJlc3Qgb24gbGlhYmlsaXRpZXMuIEFzc3VtZSBhIHJhdGUgb2YgOCUgcGEuCgojIENyZWF0ZSBhIHN1YnNldCBvZiBKb3VybmFsX2VuIHdoZXJlIHRoZSBkZXNjcmlwdGlvbiBpcyAiS3JlZHl0eSBiYW5rb3dlIGTFgnVnb3Rlcm1pbm93ZSIKSm91cm5hbF9zdWJzZXQgPC0gSm91cm5hbF9lbltKb3VybmFsX2VuJE9waXMuMS4zNTcwMC4gPT0gIktyZWR5dHkgYmFua293ZSBkxYJ1Z290ZXJtaW5vd2UiLCBdClZpZXcoSm91cm5hbF9zdWJzZXQpCgojIENyZWF0ZSBhIHN1YnNldCBvZiBKb3VybmFsX2VuIHdoZXJlIHRoZSBkZXNjcmlwdGlvbiBpcyAiS3JlZHl0eSBiYW5rb3dlIGtyw7N0a290ZXJtaW5vd2UiCkpvdXJuYWxfc3Vic2V0XzIgPC0gSm91cm5hbF9lbltKb3VybmFsX2VuJE9waXMuMS4zNTcwMC4gPT0gIktyZWR5dHkgYmFua293ZSBrcsOzdGtvdGVybWlub3dlIiwgXQpWaWV3KEpvdXJuYWxfc3Vic2V0XzIpCgojIE9wdGlvbmFsOiBMaW1pdCBKb3VybmFsX3N1YnNldCB0byB0aGUgZmlyc3QgMjM5IHJvd3MgaWYgbmVlZGVkCiMgSWYgdGhpcyBpcyBub3QgbmVjZXNzYXJ5LCB5b3UgY2FuIHJlbW92ZSB0aGlzIHN0ZXAKSm91cm5hbF9zdWJzZXQgPC0gSm91cm5hbF9zdWJzZXRbMToyMzksIF0KVmlldyhKb3VybmFsX3N1YnNldCkKCiMgQ3JlYXRlIGEgc3Vic2V0IG9mIEJhbmtBY2NfZW4gd2hlcmUgdGhlIGRlc2NyaXB0aW9uIGlzICJLcmVkeXR5IGJhbmtvd2UgZMWCdWdvdGVybWlub3dlIgpCQV9zdWJzZXQgPC0gQmFua0FjY19lbltCYW5rQWNjX2VuJE9waXMuMS4zNTcwMC4gPT0gIktyZWR5dHkgYmFua293ZSBkxYJ1Z290ZXJtaW5vd2UiLCBdClZpZXcoQkFfc3Vic2V0KQoKIyBDcmVhdGUgYSBzdWJzZXQgb2YgQmFua0FjY19lbiB3aGVyZSB0aGUgZGVzY3JpcHRpb24gaXMgIktyZWR5dHkgYmFua293ZSBrcsOzdGtvdGVybWlub3dlIgpCYW5rX2FjY291bnRfc3Vic2V0XzIgPC0gQmFua0FjY19lbltCYW5rQWNjX2VuJE9waXMuMS4zNTcwMC4gPT0gIktyZWR5dHkgYmFua293ZSBrcsOzdGtvdGVybWlub3dlIiwgXQpWaWV3KEJhbmtfYWNjb3VudF9zdWJzZXRfMikKCgpRdWVzdGlvbiA5IFdyaXRlIHRoZSBhdWRpdCBwcm9ncmFtIGZvciBwcm92aXNpb25zLgpUZXN0IG9uIFByb3Zpc2lvbnMKQSBwcm92aXNpb24gaXMgYSBsaWFiaWxpdHkgb2YgdW5jZXJ0YWluIHRpbWluZyBvciBhbW91bnQgdGhhdCBzaG91bGQgb25seSBiZSByZWNvZ25pemVkIGlmOgogIAogIEFuIGVudGl0eSBoYXMgYSBwcmVzZW50IG9ibGlnYXRpb24gKGxlZ2FsIG9yIGNvbnN0cnVjdGl2ZSkgYXMgYSByZXN1bHQgb2YgYSBwYXN0IGV2ZW50LgpJdCBpcyBwcm9iYWJsZSAoZ3JlYXRlciB0aGFuIDUwJSkgdGhhdCBhbiBvdXRmbG93IG9mIGVjb25vbWljIHJlc291cmNlcyB3aWxsIGJlIHJlcXVpcmVkIHRvIHNldHRsZSB0aGUgb2JsaWdhdGlvbi4KQSByZWxpYWJsZSBlc3RpbWF0ZSBjYW4gYmUgbWFkZSBvZiB0aGUgYW1vdW50IG9mIHRoZSBvYmxpZ2F0aW9uLgpUaGVyZWZvcmUsIHRoZSB0ZXN0IG9uIHByb3Zpc2lvbnMgc2hvdWxkIGJlIGJhc2VkIG9uIHRoZXNlIGNyaXRlcmlhLgoKU3Vic3RhbnRpdmUgUHJvY2VzcwoxLiBQcmVzZW50IE9ibGlnYXRpb24KQ29uc3RydWN0aXZlIE9ibGlnYXRpb24KYS4gRGV0ZXJtaW5lIGlmIGEgdmFsaWQgZXhwZWN0YXRpb24gaGFzIGJlZW4gY3JlYXRlZCBpbiBvdGhlciBwYXJ0aWVzIHRoYXQgdGhlIGVudGl0eSB3aWxsIGRpc2NoYXJnZSB0aGUgb2JsaWdhdGlvbi4KYi4gRGlzY3VzcyB3aXRoIHRoZSBkaXJlY3RvcnMgd2hldGhlciB0aGV5IGhhdmUgZm9ybWFsbHkgYW5ub3VuY2VkIHRoZWlyIGludGVudGlvbiB0byBhZGRyZXNzIHRoZSBvYmxpZ2F0aW9uLCBhbmQgY29uZmlybSB0aGF0IGEgcHJlc2VudCBvYmxpZ2F0aW9uIGV4aXN0cyBhdCB0aGUgeWVhci1lbmQuIElmIGFubm91bmNlZCBiZWZvcmUgdGhlIHllYXItZW5kLCByZXZpZXcgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uIHRvIHZlcmlmeSB0aGF0IHRoZSBkZWNpc2lvbiB3YXMgZm9ybWFsbHkgYW5ub3VuY2VkLgpjLiBSZXZpZXcgZXZpZGVuY2Ugb2YgcGFzdCBwcmFjdGljZXMsIHB1Ymxpc2hlZCBwb2xpY2llcywgYW5kIHN0YXRlbWVudHMgbWFkZSB0byBjb25maXJtIHRoZSBleGlzdGVuY2Ugb2YgYSBjb25zdHJ1Y3RpdmUgb2JsaWdhdGlvbi4KCkxlZ2FsIE9ibGlnYXRpb24KYS4gRGlzY3VzcyB3aXRoIG1hbmFnZW1lbnQgdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUgdG8gZW5zdXJlIGEgZnVsbCB1bmRlcnN0YW5kaW5nIGFuZCB0byBhc3Nlc3Mgd2hldGhlciBhIGxlZ2FsIG9ibGlnYXRpb24gZXhpc3RzLgpiLiBSZXZpZXcgY29ycmVzcG9uZGVuY2UgYW5kIG90aGVyIGRvY3VtZW50YXRpb24gdG8gYXNzZXNzIHdoZXRoZXIgdGhlIGNvbXBhbnkgaGFzIGEgcHJlc2VudCBvYmxpZ2F0aW9uIGFzIGEgcmVzdWx0IG9mIHBhc3QgZXZlbnRzLgoKMi4gUHJvYmFibGUgT3V0ZmxvdwphLiBSZXZpZXcgdGhlIHBvc3QgeWVhci1lbmQgcGVyaW9kIHRvIGlkZW50aWZ5IHdoZXRoZXIgYW55IHBheW1lbnRzIGhhdmUgYmVlbiBtYWRlIHJlbGF0ZWQgdG8gdGhlIHByb3Zpc2lvbi4KYi4gRGlzY3VzcyB0aGUgcG9zaXRpb24gd2l0aCBkaXJlY3RvcnMgcmVnYXJkaW5nIHNpbWlsYXIgcGFzdCBwcm92aXNpb25zLiBXZXJlIHRoZXNlIHByb3Zpc2lvbnMgZXZlbnR1YWxseSBzZXR0bGVkPwogIGMuIFJldmlldyBib2FyZCBtaW51dGVzIGFuZCBjb21wYW55IGNvcnJlc3BvbmRlbmNlIHRvIGFzY2VydGFpbiB3aGV0aGVyIGl0IGlzIHByb2JhYmxlIHRoYXQgcGF5bWVudHMgd2lsbCBiZSBtYWRlIGJ5IGV4YW1pbmluZyB0aGUgc3VwcG9ydGluZyBldmlkZW5jZS4KZC4gV3JpdGUgYW5kIHNlbmQgYW4gaW5xdWlyeSBsZXR0ZXIgdG8gdGhlIGNvbXBhbnnigJlzIGxhd3llcnMgdG8gb2J0YWluIHRoZWlyIHZpZXdzIG9uIHRoZSBwcm9iYWJpbGl0eSBvZiB0aGUgY2xhaW0gYmVpbmcgc3VjY2Vzc2Z1bC4KZS4gT2J0YWluIGEgd3JpdHRlbiByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBkaXJlY3RvcnMgdG8gY29uZmlybSB0aGUgY29tcGxldGVuZXNzIG9mIHRoZSBwcm92aXNpb24gYW5kIHRoZWlyIHZpZXcgdGhhdCB0aGUgY2hhbmNlcyBvZiBhIHN1Y2Nlc3NmdWwgY2xhaW0gYXJlIHJlbW90ZSwgaW5kaWNhdGluZyB0aGF0IG5vIHByb3Zpc2lvbiBvciBjb250aW5nZW50IGxpYWJpbGl0eSBpcyByZXF1aXJlZC4KCjMuIFJlbGlhYmxlIEVzdGltYXRlCmEuIE9idGFpbiBhIGRldGFpbGVkIGJyZWFrZG93biBvZiB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIHByb3Zpc2lvbiBhbmQgdmVyaWZ5IGl0cyBjb21wbGV0ZW5lc3MuIEFncmVlIGNvbXBvbmVudHMgb2YgdGhlIGNhbGN1bGF0aW9uIHRvIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4KYi4gUmV2aWV3IGFueSBjb3JyZXNwb25kZW5jZSBhbmQgb3RoZXIgZG9jdW1lbnRhdGlvbiB0byBhc3Nlc3Mgd2hldGhlciB0aGUgY29tcGFueSBoYXMgYSByZWxpYWJsZSBlc3RpbWF0ZSBvZiBwb3RlbnRpYWwgcGF5bWVudHMgdGhhdCBtaWdodCBiZSBtYWRlLgoKVGhpcyBzdHJ1Y3R1cmVkIGFwcHJvYWNoIGVuc3VyZXMgdGhhdCBwcm92aXNpb25zIGFyZSByZWNvZ25pemVkLCBtZWFzdXJlZCwgYW5kIGRpc2Nsb3NlZCBhY2N1cmF0ZWx5IGluIHRoZSBmaW5hbmNpYWwgc3RhdGVtZW50cyBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHJlbGV2YW50IGFjY291bnRpbmcgc3RhbmRhcmRzLgoKClFVRVNUSU9OIDEwOiBHRU5FUkFMIEFVRElUIFBST0dSQU0KQSBnZW5lcmFsIGF1ZGl0IHByb2dyYW0gdHlwaWNhbGx5IGNvbnNpc3RzIG9mIHR3byBtYWluIHBhcnRzOgoKMS4gT3ZlcmFsbCBBdWRpdCBTdHJhdGVneQpUaGUgb3ZlcmFsbCBhdWRpdCBzdHJhdGVneSBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlIGF1ZGl0LCByZXBvcnRpbmcgb2JqZWN0aXZlcywgdGltaW5nLCBhdWRpdCBkaXJlY3Rpb24sIGFuZCBhdWRpdCByZXNvdXJjZXMuIEF0IHRoaXMgc3RhZ2UsIGl0IGlzIG5lY2Vzc2FyeSB0byBjb25maXJtIHRoZSBmb2xsb3dpbmc6CgpBcHByb3ByaWF0ZW5lc3Mgb2YgdGhlIEF1ZGl0IFNjb3BlOiBFbnN1cmUgdGhhdCB0aGUgc2NvcGUgb2YgdGhlIGF1ZGl0IGNvdmVycyBhbGwgcmVsZXZhbnQgYXJlYXMgYW5kIHJpc2tzLgpSZWFzb25hYmxlbmVzcyBvZiB0aGUgVGltZSBCdWRnZXQ6IEFzc2VzcyB3aGV0aGVyIHRoZSB0aW1lIGFsbG9jYXRlZCBmb3IgdGhlIGF1ZGl0IGlzIHN1ZmZpY2llbnQgdG8gcGVyZm9ybSBhbGwgbmVjZXNzYXJ5IHByb2NlZHVyZXMuCkFwcHJvcHJpYXRlbmVzcyBvZiB0aGUgU2VsZWN0aW9uOiBFbnN1cmUgdGhlIHNlbGVjdGlvbiBvZiBhdWRpdCBhcmVhcywgdHJhbnNhY3Rpb25zLCBhbmQgYmFsYW5jZXMgaXMgYXBwcm9wcmlhdGUuCkRldGVybWluYXRpb24gb2YgTWF0ZXJpYWxpdHk6IEVzdGFibGlzaCBhbiBhcHByb3ByaWF0ZSBsZXZlbCBvZiBtYXRlcmlhbGl0eSBmb3IgdGhlIGZpbmFuY2lhbCBzdGF0ZW1lbnRzIGFzIGEgd2hvbGUgYW5kIGZvciBzcGVjaWZpYyBhY2NvdW50IGJhbGFuY2VzIGFuZCB0cmFuc2FjdGlvbnMuCjIuIFNwZWNpZmljIEF1ZGl0IFBsYW4KVGhlIHNwZWNpZmljIGF1ZGl0IHBsYW4gY29uc2lzdHMgb2YgdGhyZWUgbWFpbiBzdGVwczogcmlzayBhc3Nlc3NtZW50LCBmdXJ0aGVyIGF1ZGl0IHByb2NlZHVyZXMsIGFuZCBvdGhlciBhdWRpdCBwcm9jZWR1cmVzLgoKUmlzayBBc3Nlc3NtZW50IChJbmhlcmVudCBSaXNrIC0gSVIpCgpPYmplY3RpdmU6IFVuZGVyc3RhbmQgdGhlIGVudGl0eSBhbmQgaXRzIGVudmlyb25tZW50LiBBc3Nlc3MgdGhlIHJpc2sgb2YgbWF0ZXJpYWwgbWlzc3RhdGVtZW50IGF0IHRoZSBmaW5hbmNpYWwgc3RhdGVtZW50IGFuZCBhc3NlcnRpb24gbGV2ZWxzLgpQcm9jZWR1cmVzOgpPYnRhaW4gYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgZW50aXR54oCZcyBidXNpbmVzcywgaW5kdXN0cnksIGFuZCByZWd1bGF0b3J5IGVudmlyb25tZW50LgpJZGVudGlmeSBhbmQgYXNzZXNzIHRoZSByaXNrcyBvZiBtYXRlcmlhbCBtaXNzdGF0ZW1lbnQgZHVlIHRvIGZyYXVkIG9yIGVycm9yLgpGdXJ0aGVyIEF1ZGl0IFByb2NlZHVyZXMKVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBmdXJ0aGVyIGF1ZGl0IHByb2NlZHVyZXM6CgphLiBUZXN0cyBvZiBDb250cm9sIChDb250cm9sIFJpc2sgLSBDUikKCk9iamVjdGl2ZTogVGVzdCB0aGUgZWZmZWN0aXZlbmVzcyBvZiB0aGUgZW50aXR54oCZcyBpbnRlcm5hbCBjb250cm9scyBpbiBwcmV2ZW50aW5nIG9yIGRldGVjdGluZyBtYXRlcmlhbCBtaXNzdGF0ZW1lbnRzLgpQcm9jZWR1cmVzOgpFdmFsdWF0ZSB0aGUgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBrZXkgaW50ZXJuYWwgY29udHJvbHMuClBlcmZvcm0gdGVzdHMgb2YgY29udHJvbCB0byBkZXRlcm1pbmUgd2hldGhlciBjb250cm9scyBhcmUgb3BlcmF0aW5nIGVmZmVjdGl2ZWx5LgpiLiBTdWJzdGFudGl2ZSBQcm9jZWR1cmVzIChEZXRlY3Rpb24gUmlzayAtIERSKQoKT2JqZWN0aXZlOiBEZXRlY3QgbWF0ZXJpYWwgbWlzc3RhdGVtZW50cyBpbiB0aGUgZmluYW5jaWFsIHN0YXRlbWVudHMuClByb2NlZHVyZXM6ClRlc3RzIG9mIERldGFpbDogVmVyaWZ5IHRoZSBhY2N1cmFjeSBvZiBzcGVjaWZpYyB0cmFuc2FjdGlvbnMgYW5kIGJhbGFuY2VzLiBFeGFtcGxlcyBpbmNsdWRlOgpWb3VjaGluZyBhbW91bnRzIGJhY2sgdG8gaW52b2ljZXMuClBlcmZvcm1pbmcgcGh5c2ljYWwgaW5zcGVjdGlvbiBvZiBhc3NldHMuCkFuYWx5dGljYWwgUHJvY2VkdXJlczogVXNlIGNvbXBhcmlzb25zIGFuZCByZWxhdGlvbnNoaXBzIHRvIGFzc2VzcyB0aGUgcmVhc29uYWJsZW5lc3Mgb2YgYWNjb3VudCBiYWxhbmNlcy4gRXhhbXBsZXMgaW5jbHVkZToKVmFyaWFuY2UgYW5hbHlzaXMuClJhdGlvIGFuYWx5c2lzLgpQcm9vZiBpbiB0b3RhbC4KT3RoZXIgQXVkaXQgUHJvY2VkdXJlcwoKT2JqZWN0aXZlOiBBZGRyZXNzIGFkZGl0aW9uYWwgYXJlYXMgb2YgY29uY2VybiBiYXNlZCBvbiBwcm9mZXNzaW9uYWwganVkZ21lbnQuClByb2NlZHVyZXM6CkZyYXVkIFJpc2sgQXNzZXNzbWVudDogQXNzZXNzIHRoZSByaXNrIG9mIGZyYXVkIGFuZCBkZXNpZ24gcHJvY2VkdXJlcyB0byBhZGRyZXNzIGlkZW50aWZpZWQgcmlza3MuCkdvaW5nIENvbmNlcm4gQXNzZXNzbWVudDogRXZhbHVhdGUgdGhlIGVudGl0eeKAmXMgYWJpbGl0eSB0byBjb250aW51ZSBhcyBhIGdvaW5nIGNvbmNlcm4uClJlbGF0ZWQgUGFydHkgVHJhbnNhY3Rpb25zOiBJZGVudGlmeSBhbmQgZXZhbHVhdGUgdGhlIG5hdHVyZSBhbmQgYnVzaW5lc3MgcHVycG9zZSBvZiB0cmFuc2FjdGlvbnMgd2l0aCByZWxhdGVkIHBhcnRpZXMuCk90aGVyIFNwZWNpZmljIFByb2NlZHVyZXM6IFBlcmZvcm0gYW55IGFkZGl0aW9uYWwgcHJvY2VkdXJlcyBhcyByZXF1aXJlZCBieSB0aGUgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyBvZiB0aGUgYXVkaXQuClRoaXMgZ2VuZXJhbCBhdWRpdCBwcm9ncmFtIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSBmcmFtZXdvcmsgZm9yIGNvbmR1Y3RpbmcgYW4gYXVkaXQsIGVuc3VyaW5nIHRoYXQgYWxsIGNyaXRpY2FsIGFyZWFzIGFyZSB0aG9yb3VnaGx5IGV4YW1pbmVkIGFuZCBkb2N1bWVudGVkLgoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gCgpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ3RybCtTaGlmdCtFbnRlciouIAoKYGBge3J9CnBsb3QoY2FycykKYGBgCgpBZGQgYSBuZXcgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpJbnNlcnQgQ2h1bmsqIGJ1dHRvbiBvbiB0aGUgdG9vbGJhciBvciBieSBwcmVzc2luZyAqQ3RybCtBbHQrSSouCgpXaGVuIHlvdSBzYXZlIHRoZSBub3RlYm9vaywgYW4gSFRNTCBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvZGUgYW5kIG91dHB1dCB3aWxsIGJlIHNhdmVkIGFsb25nc2lkZSBpdCAoY2xpY2sgdGhlICpQcmV2aWV3KiBidXR0b24gb3IgcHJlc3MgKkN0cmwrU2hpZnQrSyogdG8gcHJldmlldyB0aGUgSFRNTCBmaWxlKS4KClRoZSBwcmV2aWV3IHNob3dzIHlvdSBhIHJlbmRlcmVkIEhUTUwgY29weSBvZiB0aGUgY29udGVudHMgb2YgdGhlIGVkaXRvci4gQ29uc2VxdWVudGx5LCB1bmxpa2UgKktuaXQqLCAqUHJldmlldyogZG9lcyBub3QgcnVuIGFueSBSIGNvZGUgY2h1bmtzLiBJbnN0ZWFkLCB0aGUgb3V0cHV0IG9mIHRoZSBjaHVuayB3aGVuIGl0IHdhcyBsYXN0IHJ1biBpbiB0aGUgZWRpdG9yIGlzIGRpc3BsYXllZC4K