Chapter 5 Aggregate Loss Models

Chapter Description

This chapter introduces probability models for describing the aggregate (total) claims that arise from a portfolio of insurance contracts. We present two standard modeling approaches, the individual risk model and the collective risk model. Further, we discuss strategies for computing the distribution of the aggregate claims, including exact methods for special cases, recursion, and simulation. Finally, we examine the effects of individual policy modifications such as deductibles, coinsurance, and inflation, on the frequency and severity distributions, and thus on the aggregate loss distribution.

5.1 Introduction


In this section, we learn how to:

  • Record aggregate losses from an insurance system.
  • Identify actuarial applications of aggregate loss models.

Video: Introduction to Aggregate Loss Models

Overheads: Introduction to Aggregate Loss Models (Click Tab to View)

Hide
Hide
Hide
Hide
Hide

5.2 Individual Risk Model


In this section, we learn how to:

  • Build an individual risk model for a portfolio of insurance contracts.
  • Apply the individual risk model to life and nonlife insurance.
  • Compute the distribution of aggregate losses from an individual risk model.

Video: Individual Risk Model

Overheads: Individual Risk Model (Click Tab to View)

Hide
Hide
Hide
Hide
Hide
Hide

5.2.1 Exercise. Simulating Claim Frequency

Assignment Text

In this assignment, we revisit Example 5.2.1 of Loss Data Analytics using simulation in R. Even though we “officially” start to work with simulation beginning in Chapter 6 in Loss Data Analytics, this exercise provides you with an opportunity to taste a flavor of simulation.

Instructions

  • Use the function rbinom() to simulate the number of claims that follow binomial distribution. For reproducibility of results set the initial ‘seed’ as 1000 and then generate 10,000 observations of claim frequencies for each group of policies.
  • Specify the size and probability when you simulate the number of claims with binomial distribution in each group of policies.


eyJsYW5ndWFnZSI6InIiLCJzYW1wbGUiOiJzZXQuc2VlZCg/PykgICAgIFxuciAgPC0gPz8gICAgICAgICBcbnExIDwtIDAuMDUgICAgICAgICBcbnEyIDwtID8/ICAgICAgICAgXG5uMSA8LSA/PyAgICAgICAgIFxubjIgPC0gMjAwICAgICAgICAgIFxuXG5uMSA8LSByYmlub20ociwgc2l6ZT1uMSwgcHJvYj1xMSkgXG5uMiA8LSByYmlub20ociwgc2l6ZT0/PywgcHJvYj0/PykgIiwic29sdXRpb24iOiJzZXQuc2VlZCgxMDAwKSAgICAgIyBGb3IgcmVwcm9kdWNpYmlsaXR5IG9mIHJlc3VsdHNcbnIgIDwtIDEwMDAwICAgICAgICAjIE51bWJlciBvZiBvYnNlcnZhdGlvbnMgdG8gc2ltdWxhdGUgZm9yIGVhY2ggcG9saWN5XG5xMSA8LSAwLjA1ICAgICAgICAgIyBQcm9iYWJpbGl0eSBvZiBjbGFpbSBmcm9tIHBvbGljeSAxXG5xMiA8LSAwLjA2ICAgICAgICAgIyBQcm9iYWJpbGl0eSBvZiBjbGFpbSBmcm9tIHBvbGljeSAyXG5uMSA8LSAxMDAgICAgICAgICAgIyBOdW1iZXIgb2YgdHlwZSAxIHBvbGljaWVzXG5uMiA8LSAyMDAgICAgICAgICAgIyBOdW1iZXIgb2YgdHlwZSAyIHBvbGljaWVzXG5cbm4xIDwtIHJiaW5vbShyLCBzaXplPW4xLCBwcm9iPXExKSAjIEdlbmVyYXRlIHI9MTAwMDAgb2JzZXJ2YXRpb25zIG9mIE4xIGZyb20gQmlub21pYWxcbm4yIDwtIHJiaW5vbShyLCBzaXplPW4yLCBwcm9iPXEyKSAjIEdlbmVyYXRlIHI9MTAwMDAgb2JzZXJ2YXRpb25zIG9mIE4yIGZyb20gQmlub21pYWwiLCJzY3QiOiJuMW1zZyA8LSBcIkRpZCB5b3UgY29ycmVjdGx5IHNwZWNpZnkgdGhlIG9iamVjdCBgbjFgP1wiXG5leCgpICU+JSBjaGVja19vYmplY3QoXCJuMVwiLCB1bmRlZmluZWRfbXNnID0gXCJNYWtlIHN1cmUgdG8gbm90IHJlbW92ZSBgbjFgIVwiKSAlPiUgY2hlY2tfZXF1YWwoaW5jb3JyZWN0X21zZz1uMW1zZylcbm4ybXNnIDwtIFwiRGlkIHlvdSBjb3JyZWN0bHkgc3BlY2lmeSB0aGUgb2JqZWN0IGBuMmA/XCJcbmV4KCkgJT4lIGNoZWNrX29iamVjdChcIm4yXCIsIHVuZGVmaW5lZF9tc2cgPSBcIk1ha2Ugc3VyZSB0byBub3QgcmVtb3ZlIGBuMmAhXCIpICU+JSBjaGVja19lcXVhbChpbmNvcnJlY3RfbXNnPW4ybXNnKVxuc3VjY2Vzc19tc2coXCJHb29kIGpvYiEgSW4gQ2hhcHRlciAyLCB3ZSByZXZpZXdlZCBmcmVxdWVuY3kgbW9kZWxpbmcuIFRoaXMgdHV0b3JpYWwgaW50cm9kdWNlcyBzaW11bGF0aW9uIHRlY2huaXF1ZXMgdGhhdCBjb25zaWRlcmFibHkgZW5oYWNlIHRoZSBicmVhZHRoIG9mIGFjdHVhcmlhbCBhcHBsaWNhdGlvbnMuIEFzIG5vdGVkIGluIHRoZSBhc3NpZ25tZW50IHRleHQgb2YgdGhpcyB0dXRvcmlhbCwgeW91IGNhbiBjaGVjayBvdXQgQ2hhcHRlciA2IG9mIExvc3MgRGF0YSBBbmFseXRpY3MgZm9yIG1vcmUgYmFja2dyb3VuZCBvbiBzaW11bGF0aW9uIHRlY2huaXF1ZXMuXCIpIiwiaGludCI6Ik5vdGUgdGhhdCBudW1iZXIgb2YgcG9saWNpZXMgYW5kIHByb2JhYmlsaXR5IG9mIGNsYWltIHBlciBwb2xpY3kgY29ycmVzcG9uZCB0byB0aGUgc2l6ZSBhbmQgaW5jaWRlbmNlIHByb2JhYmlsaXR5IGluIGEgYmlub21pYWwgZGlzdHJpYnV0aW9uIGZvciBhIGNsYWltIGZyZXF1ZW5jeSByYW5kb20gdmFyaWFibGUuIn0=

5.2.2 Exercise. Individual Risk Model

Assignment Text

Continuing our work in Exercise 5.2.1, we now reproduce the theoretical results for calculation of moments in individual risk models using simulation. We use the simulated frequencies for each group of policies from Exercise 5.2.1 and continue to simulate compound losses in an individual risk model as elaborated in Section 5.4.2 on Loss Data Analytics.

Instructions

  • Use the function runif() to claim amounts that follow uniform distribution for each group of policies.
  • Specify the parameters of uniform random variables, minimum and maximum values of claim amounts from each type of policies.
  • Initialize an empty vector of length \(R\) to store \(R\) observations of simulated \(S\). In each simulation, calculate the \(j\)th simulated aggregate loss and store it in \(j\)th component of \(S\) for \(j=1, \ldots, R\).
  • Compute the mean and variance of \(S\) by simulation using mean() and var(). Then, compare these values to their corresponding theoretical values, 2,800 and 600,467, respectively.
  • Produce a visual summary of the distribution of \(S\) using the histogram function, hist() .


eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6InNldC5zZWVkKDEwMDApICAgICAjIEZvciByZXByb2R1Y2liaWxpdHkgb2YgcmVzdWx0c1xuciAgPC0gMTAwMDAgICAgICAgICMgTnVtYmVyIG9mIG9ic2VydmF0aW9ucyB0byBzaW11bGF0ZSBmb3IgZWFjaCBwb2xpY3lcbnExIDwtIDAuMDUgICAgICAgICAjIFByb2JhYmlsaXR5IG9mIGNsYWltIGZyb20gcG9saWN5IDFcbnEyIDwtIDAuMDYgICAgICAgICAjIFByb2JhYmlsaXR5IG9mIGNsYWltIGZyb20gcG9saWN5IDJcbm4xIDwtIDEwMCAgICAgICAgICAjIE51bWJlciBvZiB0eXBlIDEgcG9saWNpZXNcbm4yIDwtIDIwMCAgICAgICAgICAjIE51bWJlciBvZiB0eXBlIDIgcG9saWNpZXNcblxubjEgPC0gcmJpbm9tKHIsIHNpemU9bjEsIHByb2I9cTEpICMgR2VuZXJhdGUgcj0xMDAwMCBvYnNlcnZhdGlvbnMgb2YgTjEgZnJvbSBCaW5vbWlhbFxubjIgPC0gcmJpbm9tKHIsIHNpemU9bjIsIHByb2I9cTIpICMgR2VuZXJhdGUgcj0xMDAwMCBvYnNlcnZhdGlvbnMgb2YgTjIgZnJvbSBCaW5vbWlhbCIsInNhbXBsZSI6InNldC5zZWVkKDEwMDApICAgICBcbnIgIDwtIDEwMDAwICAgICAgICBcbm0xIDwtIDA7ICBNMSA8LSA/PyBcbm0yIDwtID8/OyBNMiA8LSAzMDAgXG4jIG4xOiBHZW5lcmF0ZWQgMTAwMDAgb2JzZXJ2YXRpb25zIG9mIGNsYWltIGZyZXF1ZW5jeSBmcm9tIHRoZSBmaXJzdCAgZ3JvdXAgb2YgcG9saWNpZXMgd2l0aCBCaW5vbWlhbFxuIyBuMjogR2VuZXJhdGVkIDEwMDAwIG9ic2VydmF0aW9ucyBvZiBjbGFpbSBmcmVxdWVuY3kgZnJvbSB0aGUgc2Vjb25kIGdyb3VwIG9mIHBvbGljaWVzIHdpdGggQmlub21pYWxcblMgPC0gcmVwKD8/LCByKSBcblxuZm9yKGogaW4gMTpyKSB7IFxuICB4MV9qIDwtIHJ1bmlmKG4xW2pdLCBtaW49bTEsIG1heD0/PylcbiAgeDJfaiA8LSBydW5pZig/PywgbWluPT8/LCBtYXg9TTIpXG4gIFNbal0gPC0gc3VtKHgxX2opK3N1bSg/Pylcbn1cbj8/KFMpIFxudmFyKD8/KVxuPz8oUykiLCJzb2x1dGlvbiI6InNldC5zZWVkKDEwMDApICAgICAjIEZvciByZXByb2R1Y2liaWxpdHkgb2YgcmVzdWx0c1xuciAgPC0gMTAwMDAgICAgICAgICMgTnVtYmVyIG9mIG9ic2VydmF0aW9ucyB0byBzaW11bGF0ZSBmb3IgZWFjaCBwb2xpY3lcbm0xIDwtIDA7IE0xIDwtIDQwMCAjIFBhcmFtZXRlcnMgZm9yIHNldmVyaXR5IGRpc3RyaWJ1dGlvbiBYXzFcbm0yIDwtIDA7IE0yIDwtIDMwMCAjIFBhcmFtZXRlcnMgZm9yIHNldmVyaXR5IGRpc3RyaWJ1dGlvbiBYXzJcbiMgbjE6IEdlbmVyYXRlZCAxMDAwMCBvYnNlcnZhdGlvbnMgb2YgY2xhaW0gZnJlcXVlbmN5IGZyb20gdGhlIGZpcnN0ICBncm91cCBvZiBwb2xpY2llcyB3aXRoIEJpbm9taWFsXG4jIG4yOiBHZW5lcmF0ZWQgMTAwMDAgb2JzZXJ2YXRpb25zIG9mIGNsYWltIGZyZXF1ZW5jeSBmcm9tIHRoZSBzZWNvbmQgZ3JvdXAgb2YgcG9saWNpZXMgd2l0aCBCaW5vbWlhbFxuUyA8LSByZXAoTkEsIHIpICMgSW5pdGlhbGl6ZSBhbiBlbXB0eSB2ZWN0b3IgdG8gc3RvcmUgUyBvYnNlcnZhdGlvbnNcblxuZm9yKGogaW4gMTpyKSB7IFxuICB4MV9qIDwtIHJ1bmlmKG4xW2pdLCBtaW49bTEsIG1heD1NMSlcbiAgeDJfaiA8LSBydW5pZihuMltqXSwgbWluPW0yLCBtYXg9TTIpXG4gIFNbal0gIDwtIHN1bSh4MV9qKStzdW0oeDJfaikgIyBDYWxjdWxhdGUganRoIHNpbXVsYXRlZCBhZ2dyZWdhdGUgbG9zcyBhbmQgc3RvcmUgaXQgYXQgU1tqXVxufVxubWVhbihTKSAjIENvbXBhcmUgdG8gdGhlb3JldGljYWwgdmFsdWUgb2YgMiw4MDBcbnZhcihTKSAgIyBDb21wYXJlIHRvIHRoZW9yZXRpY2FsIHZhbHVlIG9mIDYwMCw0Njdcbmhpc3QoUykiLCJzY3QiOiJNMW1zZyA8LSBcIkRpZCB5b3UgY29ycmVjdGx5IHNwZWNpZnkgdGhlIG9iamVjdCBgTTFgP1wiXG5leCgpICU+JSBjaGVja19vYmplY3QoXCJNMVwiLCB1bmRlZmluZWRfbXNnID0gXCJNYWtlIHN1cmUgdG8gbm90IHJlbW92ZSBgTTFgIVwiKSAlPiUgY2hlY2tfZXF1YWwoaW5jb3JyZWN0X21zZz1NMW1zZylcbm4ybXNnIDwtIFwiRGlkIHlvdSBjb3JyZWN0bHkgc3BlY2lmeSB0aGUgb2JqZWN0IGBuMmA/XCJcbmV4KCkgJT4lIGNoZWNrX29iamVjdChcIm4yXCIsIHVuZGVmaW5lZF9tc2cgPSBcIk1ha2Ugc3VyZSB0byBub3QgcmVtb3ZlIGBuMmAhXCIpICU+JSBjaGVja19lcXVhbChpbmNvcnJlY3RfbXNnPW4ybXNnKVxuc3VjY2Vzc19tc2coXCJHb29kIGpvYiEgRGVzcGl0ZSB0aGUgc2VlbWluZyBzaW1wbGljaXR5IG9mIHRoaXMgZXhhbXBsZSAod2l0aCB1bmlmb3JtIHNpemUgZGlzdHJpYnV0aW9ucyksIGNvbXB1dGluZyB0aGUgZGlzdHJpYnV0aW9uIG9mIGNsYWltcyBTIGlzIGF0IGJlc3QgdGVkaW91cyB3aGVuIHVzaW5nIGV4YWN0IG1ldGhvZHMuIFlvdSBjYW4gdXNlIHNpbXVsYXRpb24gdG8gcXVpY2tseSBnZXQgYSBzZW5zZSBvZiB0aGUgZGlzdHJpYnV0aW9uIGFuZCB1c2UgdGhpcyBhcyBhIGJhc2UgYXMgeW91IGFkanVzdCB0aGUgbW9kZWwgdG8gbWFrZSBpdCBiZXR0ZXIgc3VpdGVkIHRvIGFwcHJveGltYXRlIGFuIGFjdHVhcmlhbCBhcHBsaWNhdGlvbiBvZiBpbnRlcmVzdC5cIikiLCJoaW50IjoiTm90ZSB0aGF0IHdlIG5lZWQgdG8gc2ltdWxhdGUgY2xhaW0gYW1vdW50cyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2YgY2xhaW1zIHNvIHRoYXQgdGhlIHBhcmFtZXRlcnMgdXNlZCBpbiA8Y29kZT5ydW5pZigpPC9jb2RlPiBmdW5jdGlvbiBtYXkgZGVwZW5kIG9uIHRoZSBudW1iZXIgb2Ygc2ltdWxhdGVkIGNsYWltcy4ifQ==

5.3 Fitting a Collective Risk Model in Two Parts


In this section, we learn how to:

  • Build a collective risk model for a portfolio of insurance contracts.
  • Calculate the mean and variance of the aggregate loss.
  • Fit frequency and severity components in a collective risk model.

Video: Fitting a Two Part Collective Risk Model

Overheads: Fitting a Two Part Collective Risk Model (Click Tab to View)

Hide
Hide
Hide
Hide
Hide

5.3.1 Exercise. Estimating the Frequency Component of the Collective Risk Model

Assignment Text

In this exercise and the next, you will use data to calibrate the frequency and severity components of the collective risk model. The basis for this is the LGPIF data, introduced in Section 1.3 and used in many exercises.

In this assignment, we fit a negative binomial distribution to the frequency component. You may wish to review Exercise 2.3.5 where we fit a negative binomial distribution to a small synthetic data set.

Instructions

  • Restrict the sample to the subset of towns and identify the claims counts as a global variable \(N\).
  • Construct a function to determine the negative log-likelihood. Do this based on the probability mass function for the negative binomial distribution, dnbinom(). Note that we use the same parametrization as in the Section 2.2 of Loss Data Analytics so that \(\text{size}=r\) and \(\text{prob}=1/(1+\beta)\).
  • Determine initial, or starting, values for the algorithm using the method of moments.
  • Use the function optim() to find the maximum likelihood estimates of the frequency distribution.
  • Provide a table to compare the empirical distribution to the fitted negative binomial distribution.


eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6Ikluc2FtcGxlIDwtIHJlYWQuY3N2KFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL09wZW5BY3RUZXh0cy9MREFDb3Vyc2UxL21haW4vRGF0YS9JbnNhbXBsZS5jc3ZcIiwgaGVhZGVyPVQsIG5hLnN0cmluZ3M9YyhcIi5cIiksIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpXG5saWJyYXJ5KGxtZTQpIiwic2FtcGxlIjoiSW5zYW1wbGVUb3duIDwtIHN1YnNldChJbnNhbXBsZSwgVHlwZVRvd249PTEpXG5OIDwtIEluc2FtcGxlVG93biRGcmVxXG4jIFRoZSBuZWdhdGl2ZSBMb2cgLSBsaWtlbGlob29kXG5mcmVxX2xpayA8LSBmdW5jdGlvbihwYXJtKSB7XG4gIHIgICAgPC0gcGFybVsxXVxuICBiZXRhIDwtIHBhcm1bMl1cbiAgbGlrICA8LSAtc3VtKGRuYmlub20oTiwgc2l6ZT0gPz8sIHByb2I9MS8oMSs/PyksIGxvZz1UUlVFKSlcbiAgcmV0dXJuKGxpaykgfVxuIyBpbml0aWFsIGVzdGltYXRlcyBieSBtZXRob2Qgb2YgbW9tZW50c1xuaW5pdC5wYXJtLmZyZXEgPC0gYyhtZWFuKE4pLyh2YXIoTikvbWVhbihOKS0xKSwgdmFyKE4pL21lYW4oTiktMSkgXG4jIE1heGltdW0gbGlrZWxpaG9vZCBlc3RpbWF0aW9uIGZvciB0aGUgZnJlcXVlbmN5IG1vZGVsXG5mcmVxX21vZCAgICAgICA8LSA/PyhwYXI9aW5pdC5wYXJtLmZyZXEsIGZuPT8/KSBcbnIuZXN0ICAgIDwtIGZyZXFfbW9kJHBhclsxXVxuYmV0YS5lc3QgPC0gZnJlcV9tb2QkcGFyWzJdXG4jIEVtcGlyaWNhbCBhbmQgZml0dGVkIGRpc3RyaWJ1dGlvbnMgb2Ygb2JzZXJ2ZWQgTlxuZnJlcV90YWJsZSA8LSBjYmluZCh0YWJsZShOKVsxOjRdL2xlbmd0aChOKSwgZG5iaW5vbSgwOjMsIHNpemU9Pz8sIHByb2I9MS8oMStiZXRhLmVzdCkpKVxuZnJlcV90YWJsZSA8LSByYmluZChmcmVxX3RhYmxlLCAxLWNvbFN1bXMoZnJlcV90YWJsZSkpICMgc28gcHJvYnMgc3VtIHRvIG9uZVxucm93bmFtZXMoZnJlcV90YWJsZSlbNV0gPC0gXCI0K1wiXG5jb2xuYW1lcyhmcmVxX3RhYmxlKSA8LSBjKFwiRW1waXJpY2FsXCIsIFwiRml0dGVkXCIpXG5yb3VuZChmcmVxX3RhYmxlLCBkaWdpdHMgPSA2KSIsInNvbHV0aW9uIjoiSW5zYW1wbGVUb3duIDwtIHN1YnNldChJbnNhbXBsZSwgVHlwZVRvd249PTEpXG5OIDwtIEluc2FtcGxlVG93biRGcmVxXG4jIFRoZSBuZWdhdGl2ZSBMb2cgLSBsaWtlbGlob29kXG5mcmVxX2xpayA8LSBmdW5jdGlvbihwYXJtKSB7XG4gIHIgICAgPC0gcGFybVsxXVxuICBiZXRhIDwtIHBhcm1bMl1cbiAgbGlrICA8LSAtc3VtKGRuYmlub20oTiwgc2l6ZT1yLCBwcm9iPTEvKDErYmV0YSksIGxvZz1UUlVFKSlcbiAgcmV0dXJuKGxpaykgfVxuIyBpbml0aWFsIGVzdGltYXRlcyBieSBtZXRob2Qgb2YgbW9tZW50c1xuaW5pdC5wYXJtLmZyZXEgPC0gYyhtZWFuKE4pLyh2YXIoTikvbWVhbihOKS0xKSwgdmFyKE4pL21lYW4oTiktMSkgXG4jIE1heGltdW0gbGlrZWxpaG9vZCBlc3RpbWF0aW9uIGZvciB0aGUgZnJlcXVlbmN5IG1vZGVsXG5mcmVxX21vZCAgICAgICA8LSBvcHRpbShwYXI9aW5pdC5wYXJtLmZyZXEsIGZuPWZyZXFfbGlrKSBcbnIuZXN0ICAgIDwtIGZyZXFfbW9kJHBhclsxXVxuYmV0YS5lc3QgPC0gZnJlcV9tb2QkcGFyWzJdXG4jIEVtcGlyaWNhbCBhbmQgZml0dGVkIGRpc3RyaWJ1dGlvbnMgb2Ygb2JzZXJ2ZWQgTlxuZnJlcV90YWJsZSA8LSBjYmluZCh0YWJsZShOKVsxOjRdL2xlbmd0aChOKSwgZG5iaW5vbSgwOjMsIHNpemU9ci5lc3QsIHByb2I9MS8oMStiZXRhLmVzdCkpKVxuZnJlcV90YWJsZSA8LSByYmluZChmcmVxX3RhYmxlLCAxLWNvbFN1bXMoZnJlcV90YWJsZSkpICMgc28gcHJvYnMgc3VtIHRvIG9uZVxucm93bmFtZXMoZnJlcV90YWJsZSlbNV0gPC0gXCI0K1wiXG5jb2xuYW1lcyhmcmVxX3RhYmxlKSA8LSBjKFwiRW1waXJpY2FsXCIsIFwiRml0dGVkXCIpXG5yb3VuZChmcmVxX3RhYmxlLCBkaWdpdHMgPSA2KSIsInNjdCI6Ik5tc2cgPC0gXCJEaWQgeW91IGNvcnJlY3RseSBzcGVjaWZ5IHRoZSBvYmplY3QgYE5gP1wiXG5leCgpICU+JSBjaGVja19vYmplY3QoXCJOXCIsIHVuZGVmaW5lZF9tc2cgPSBcIk1ha2Ugc3VyZSB0byBub3QgcmVtb3ZlIGBOYCFcIikgJT4lIGNoZWNrX2VxdWFsKGluY29ycmVjdF9tc2c9Tm1zZylcbmluaXRmcmVxbXNnIDwtIFwiRGlkIHlvdSBjb3JyZWN0bHkgc3BlY2lmeSB0aGUgb2JqZWN0IGBpbml0LnBhcm0uZnJlcWA/XCJcbmV4KCkgJT4lIGNoZWNrX29iamVjdChcImluaXQucGFybS5mcmVxXCIsIHVuZGVmaW5lZF9tc2cgPSBcIk1ha2Ugc3VyZSB0byBub3QgcmVtb3ZlIGBpbml0LnBhcm0uZnJlcWAhXCIpICU+JSBjaGVja19lcXVhbChpbmNvcnJlY3RfbXNnPWluaXRmcmVxbXNnKVxuZnJlcV9tb2Rtc2cgPC0gXCJEaWQgeW91IGNvcnJlY3RseSBzcGVjaWZ5IHRoZSBvYmplY3QgYGZyZXFfbW9kYD9cIlxuZXgoKSAlPiUgY2hlY2tfb2JqZWN0KFwiZnJlcV9tb2RcIiwgdW5kZWZpbmVkX21zZyA9IFwiTWFrZSBzdXJlIHRvIG5vdCByZW1vdmUgYGZyZXFfbW9kYCFcIikgJT4lIGNoZWNrX2VxdWFsKGluY29ycmVjdF9tc2c9ZnJlcV9tb2Rtc2cpXG5mcmVxX3RhYmxlbXNnIDwtIFwiRGlkIHlvdSBjb3JyZWN0bHkgc3BlY2lmeSB0aGUgb2JqZWN0IGBmcmVxX3RhYmxlYD9cIlxuZXgoKSAlPiUgY2hlY2tfb2JqZWN0KFwiZnJlcV90YWJsZVwiLCB1bmRlZmluZWRfbXNnID0gXCJNYWtlIHN1cmUgdG8gbm90IHJlbW92ZSBgZnJlcV90YWJsZWAhXCIpICU+JSBjaGVja19lcXVhbChpbmNvcnJlY3RfbXNnPWZyZXFfdGFibGVtc2cpXG5zdWNjZXNzX21zZyhcIkNoZWVycyEgVGhpcyBleGVyY2lzZSBwcm92aWRlcyBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBpbXBvcnRhbnQgc3RlcHMgbmVlZGVkIGZvciBmcmVxdWVuY3kgbW9kZWxpbmcuIEluIGFjdHVhcmlhbCBwcmFjdGljZSwgaXQgaXMgY29tbW9uIHRvIGFkZCBjb3ZhcmlhdGVzIChyYXRpbmcgZmFjdG9ycykgZm9yIHJpc2sgY2xhc3NpZmljYXRpb24gcHVycG9zZXMuXCIpIiwiaGludCI6IlNpbmNlIDxlbT5vcHRpbTwvZW0+IG1pbmltaXplcyBnaXZlbiBmdW5jdGlvbiBieSBkZWZhdWx0LCB3ZSBwdXQgdGhlIG5lZ2F0aXZlIGxpa2VsaWhvb2QgYXMgYW4gb2JqZWN0aXZlIGZ1bmN0aW9uIHRvIGJlIG1pbmltaXplZC4ifQ==

5.3.2 Exercise. Estimating the Severity Component of the Collective Risk Model

Assignment Text

This is a continuation of Exercise 5.3.1. In this assignment, we fit a Pareto distribution to the severity component. You may wish to review Exercise 3.5.1 where we fit a Pareto distribution to a different subset of the LGPIF data.

Instructions

  • Restrict the sample to the subset of towns and identify the average claim severity as a global variable \(Xbar\).
  • Construct a function to determine the negative log-likelihood. Do this based on the probability density function dlomax(). Note that we use the same parametrization as in the Section 3.2 of Loss Data Analytics so that \(\text{shape}=\alpha\) and \(\text{scale}=\theta\).
  • Determine initial, or starting, values for the algorithm using the method of moments.
  • Use the function optim() to find the maximum likelihood estimates of the severity distribution.
  • Provide a \(qq\) plots of the empirical versus fitted quantiles to assess the adequacy of the model fit.


eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6Ikluc2FtcGxlIDwtIHJlYWQuY3N2KFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL09wZW5BY3RUZXh0cy9MREFDb3Vyc2UxL21haW4vRGF0YS9JbnNhbXBsZS5jc3ZcIiwgaGVhZGVyPVQsIG5hLnN0cmluZ3M9YyhcIi5cIiksIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpXG5saWJyYXJ5KGxtZTQpXG5cbmRsb21heCA8LSBmdW5jdGlvbih4LCBzaGFwZT0xLCBzY2FsZT0xLCBsb2c9RkFMU0UpIHtcbiAgaWYgKGxvZz09RkFMU0UpIHJlc3VsdCA8LSBzaGFwZSpzY2FsZV5zaGFwZSAvIChzY2FsZSArIHgpXihzaGFwZSsxKVxuICBpZiAobG9nPT1UUlVFICkgcmVzdWx0IDwtIGxvZyhzaGFwZSkrc2hhcGUqbG9nKHNjYWxlKS0oc2hhcGUrMSkqbG9nKHNjYWxlICsgeClcbiAgcmV0dXJuKHJlc3VsdCkgfSIsInNhbXBsZSI6Ikluc2FtcGxlVG93biA8LSBzdWJzZXQoSW5zYW1wbGUsIFR5cGVUb3duPT0xKVxuWGJhciA8LSBJbnNhbXBsZVRvd24keUF2Z1t3aGljaChJbnNhbXBsZVRvd24kRnJlcT4wKV1cbiMgVGhlIG5lZ2F0aXZlIExvZyAtIGxpa2VsaWhvb2RcbnNldl9saWsgPC0gZnVuY3Rpb24ocGFybSkge1xuICBhbHBoYSA8LSAgcGFybVsxXVxuICB0aGV0YSA8LSAgcGFybVsyXVxuICBsaWsgICA8LSAtc3VtKGRsb21heChYYmFyLCBzaGFwZT0/Pywgc2NhbGU9Pz8sIGxvZz1UUlVFKSlcbiAgcmV0dXJuKGxpaylcbn1cbiMgaW5pdGlhbCBlc3RpbWF0ZXMgYnkgbWV0aG9kIG9mIG1vbWVudHNcbmluaXQucGFybS5zZXYgPC0gYyggMi8oMS1tZWFuKFhiYXIpXjIvdmFyKFhiYXIpKSAgLCBtZWFuKFhiYXIpKigyLygxLW1lYW4oWGJhcileMi92YXIoWGJhcikpLTEpICkgXG4jIE1heGltdW0gbGlrZWxpaG9vZCBlc3RpbWF0aW9uIGZvciB0aGUgc2V2ZXJpdHkgbW9kZWxcbnNldl9tb2QgICAgPC0gPz8ocGFyPT8/LCBmbj1zZXZfbGlrLCBtZXRob2Q9XCJMLUJGR1MtQlwiKSBcbmFscGhhLmVzdCAgPC0gc2V2X21vZCRwYXJbMV1cbnRoZXRhLmVzdCAgPC0gc2V2X21vZCRwYXJbMl1cbiMgRW1waXJpY2FsIGFuZCBmaXR0ZWQgZGlzdHJpYnV0aW9ucyBvZiBvYnNlcnZlZCBYYmFyXG5wbG90KDEtKHRoZXRhLmVzdC8odGhldGEuZXN0K3NvcnQoWGJhcikpKV5hbHBoYS5lc3QsIHJhbmsoc29ydChYYmFyKSkvKGxlbmd0aChYYmFyKSsxKSxcbiAgICAgeWxhYiA9IFwiRW1waXJpY2FsIFF1YW50aWxlc1wiLCB4bGFiID0gXCJGaXR0ZWQgUXVhbnRpbGVzXCIsXG4gICAgIG1haW4gPSBcIlNldmVyaXR5IE1vZGVsIFFRIFBsb3RcIikiLCJzb2x1dGlvbiI6Ikluc2FtcGxlVG93biA8LSBzdWJzZXQoSW5zYW1wbGUsIFR5cGVUb3duPT0xKVxuWGJhciA8LSBJbnNhbXBsZVRvd24keUF2Z1t3aGljaChJbnNhbXBsZVRvd24kRnJlcT4wKV1cbiMgVGhlIG5lZ2F0aXZlIExvZyAtIGxpa2VsaWhvb2RcbnNldl9saWsgPC0gZnVuY3Rpb24ocGFybSkge1xuICBhbHBoYSA8LSAgcGFybVsxXVxuICB0aGV0YSA8LSAgcGFybVsyXVxuICBsaWsgICA8LSAtc3VtKGRsb21heChYYmFyLCBzaGFwZT1hbHBoYSwgc2NhbGU9dGhldGEsIGxvZz1UUlVFKSlcbiAgcmV0dXJuKGxpaylcbn1cbiMgaW5pdGlhbCBlc3RpbWF0ZXMgYnkgbWV0aG9kIG9mIG1vbWVudHNcbmluaXQucGFybS5zZXYgPC0gYyggMi8oMS1tZWFuKFhiYXIpXjIvdmFyKFhiYXIpKSAgLCBtZWFuKFhiYXIpKigyLygxLW1lYW4oWGJhcileMi92YXIoWGJhcikpLTEpICkgXG4jIE1heGltdW0gbGlrZWxpaG9vZCBlc3RpbWF0aW9uIGZvciB0aGUgc2V2ZXJpdHkgbW9kZWxcbnNldl9tb2QgICAgICAgPC0gb3B0aW0ocGFyPWluaXQucGFybS5zZXYsIGZuPXNldl9saWssIG1ldGhvZD1cIkwtQkZHUy1CXCIpIFxuYWxwaGEuZXN0ICAgICA8LSBzZXZfbW9kJHBhclsxXVxudGhldGEuZXN0ICAgICA8LSBzZXZfbW9kJHBhclsyXVxuIyBFbXBpcmljYWwgYW5kIGZpdHRlZCBkaXN0cmlidXRpb25zIG9mIG9ic2VydmVkIFhiYXJcbnBsb3QoMS0odGhldGEuZXN0Lyh0aGV0YS5lc3Qrc29ydChYYmFyKSkpXmFscGhhLmVzdCwgcmFuayhzb3J0KFhiYXIpKS8obGVuZ3RoKFhiYXIpKzEpLFxuICAgICB5bGFiID0gXCJFbXBpcmljYWwgUXVhbnRpbGVzXCIsIHhsYWIgPSBcIkZpdHRlZCBRdWFudGlsZXNcIixcbiAgICAgbWFpbiA9IFwiU2V2ZXJpdHkgTW9kZWwgUVEgUGxvdFwiKSIsInNjdCI6IlhiYXJtc2cgPC0gXCJEaWQgeW91IGNvcnJlY3RseSBzcGVjaWZ5IHRoZSBvYmplY3QgYFhiYXJgP1wiXG5leCgpICU+JSBjaGVja19vYmplY3QoXCJYYmFyXCIsIHVuZGVmaW5lZF9tc2cgPSBcIk1ha2Ugc3VyZSB0byBub3QgcmVtb3ZlIGBYYmFyYCFcIikgJT4lIGNoZWNrX2VxdWFsKGluY29ycmVjdF9tc2c9WGJhcm1zZylcbmluaXRzZXZtc2cgPC0gXCJEaWQgeW91IGNvcnJlY3RseSBzcGVjaWZ5IHRoZSBvYmplY3QgYGluaXQucGFybS5zZXZgP1wiXG5leCgpICU+JSBjaGVja19vYmplY3QoXCJpbml0LnBhcm0uc2V2XCIsIHVuZGVmaW5lZF9tc2cgPSBcIk1ha2Ugc3VyZSB0byBub3QgcmVtb3ZlIGBpbml0LnBhcm0uc2V2YCFcIikgJT4lIGNoZWNrX2VxdWFsKGluY29ycmVjdF9tc2c9aW5pdHNldm1zZylcbnNldl9tb2Rtc2cgPC0gXCJEaWQgeW91IGNvcnJlY3RseSBzcGVjaWZ5IHRoZSBvYmplY3QgYHNldl9tb2RgP1wiXG5leCgpICU+JSBjaGVja19vYmplY3QoXCJzZXZfbW9kXCIsIHVuZGVmaW5lZF9tc2cgPSBcIk1ha2Ugc3VyZSB0byBub3QgcmVtb3ZlIGBzZXZfbW9kYCFcIikgJT4lIGNoZWNrX2VxdWFsKGluY29ycmVjdF9tc2c9c2V2X21vZG1zZylcbnN1Y2Nlc3NfbXNnKFwiQ2hlZXJzISBUaGlzIGV4ZXJjaXNlIHByb3ZpZGVzIGEgcXVpY2sgb3ZlcnZpZXcgb2YgdGhlIGltcG9ydGFudCBzdGVwcyBuZWVkZWQgZm9yIHNldmVyaXR5IG1vZGVsaW5nLiBOb3RlIHRoYXQgaXQgaXMgdXN1YWwgdG8gb2JzZXJ2ZSB0aGF0IGFuIGFjdHVhbCBjbGFpbXMgZGF0YXNldCBtYXkgY29tZSB3aXRoIHZlcnkgZmV3IHBvc2l0aXZlIGNsYWltcyBidXQgYWxzbyBoZWF2eSB0YWlsIGJlaGF2aW9yLlwiKSIsImhpbnQiOiJTaW5jZSA8ZW0+b3B0aW08L2VtPiBtaW5pbWl6ZXMgZ2l2ZW4gZnVuY3Rpb24gYnkgZGVmYXVsdCwgd2UgcHV0IHRoZSBuZWdhdGl2ZSBsaWtlbGlob29kIGFzIGFuIG9iamVjdGl2ZSBmdW5jdGlvbiB0byBiZSBtaW5pbWl6ZWQuIn0=

5.4 Computation Strategies for a Collective Risk Model


In this section, we learn how to:

  • Compute the aggregate loss distribution.
  • Implement numerical strategies in R.

Video: Computing a Collective Risk Model Distribution

Overheads: Computing a Collective Risk Model Distribution (Click Tab to View)

Hide
Hide
Hide
Hide
Hide
Hide

xx ### Exercise. Collective Risk Model II

Assignment Text

In this assignment, we analyze the aggregate loss distribution by combining fitted frequency and severity components. Because it is usually very hard to obtain a closed form expression for the distribution function of the compound loss in a collective risk model, we rely on simulations to compute the aggregate loss distribution. We use the fitted parameters from the exercises in Section 5.3. Specifically, fitted shape and scale negative binomial parameters have already been recorded as the global variables r.est and beta.est, respectively. In the same way, fitted shape and scale Pareto parameters have already been recorded as the global variables alpha.est and theta.est, respectively.

Instructions

  • As an input to calculating the aggregate distribution, we need the expression function. This function allows to call functions without actually evaluating them.
  • Also, to generate random samples from the fitted frequency and severity models, we use rnbinom() and rlomax(). Note that these generated random samples are also used as inputs to compute the aggregate claim amount distribution.
  • We use aggregateDist() to simulate compound losses that match the observed data upon the fitted frequency and severity models.
  • With the aggregate distribution, plot its distribution function. For comparison, superimpose on this plot the empiricial (cumulative) distribution function, created using the ecdf() function.


eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6Ikluc2FtcGxlIDwtIHJlYWQuY3N2KFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL09wZW5BY3RUZXh0cy9MREFDb3Vyc2UxL21haW4vRGF0YS9JbnNhbXBsZS5jc3ZcIiwgaGVhZGVyPVQsIG5hLnN0cmluZ3M9YyhcIi5cIiksIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpXG5saWJyYXJ5KGxtZTQpXG5cbmFnZ3JlZ2F0ZS5wb3J0Zm9saW8gPC0gZnVuY3Rpb24oeCwgYnkgPSBuYW1lcyh4JG5vZGVzKSwgRlVOID0gc3VtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmaWNhdGlvbiA9IFRSVUUsIHByZWZpeCA9IE5VTEwsIC4uLilcbntcbiAgICBsZXZlbC5uYW1lcyA8LSBuYW1lcyh4JG5vZGVzKSAgICAgICAjIGxldmVsIG5hbWVzXG4gICAgbmxldmVscyA8LSBsZW5ndGgobGV2ZWwubmFtZXMpICAgICAgIyBudW1iZXIgb2YgbGV2ZWxzXG4gICAgeWVhcnMgPC0gbGV2ZWwubmFtZXNbbmxldmVsc10gICAgICAgIyBuYW1lIG9mIGxhc3QgbGV2ZWxcblxuICAgICMjIE1hdGNoIGxldmVsIG5hbWVzIGluICdieScgdG8gdGhvc2UgaW4gdGhlIG1vZGVsXG4gICAgYnkgPC0gbWF0Y2guYXJnKGJ5LCBsZXZlbC5uYW1lcywgc2V2ZXJhbC5vayA9IFRSVUUpXG5cbiAgICAjIyBWZXJzaW9uIG9mIEZVTiBhYmxlIHRvIHdvcmsgb24gbGlzdHNcbiAgICBmdW4gPC0gZnVuY3Rpb24oeCwgLi4uKSBGVU4odW5saXN0KHgpLCAuLi4pXG5cbiAgICAjIyBUaGUgbW9zdCBjb21tb24gY2FzZSBzaG91bGQgYmUgdG8gYWdncmVnYXRlIGNsYWltIGFtb3VudHMgYnlcbiAgICAjIyBub2RlLiBUaGlzIGNhc2UgYmVpbmcgdmVyeSBzaW1wbGUsIGl0IGlzIHRyZWF0ZWQgc2VwYXJhdGVseS5cbiAgICBpZiAoaWRlbnRpY2FsKGJ5LCBsZXZlbC5uYW1lcykpXG4gICAgICAgIHJldHVybihjYmluZChpZiAoY2xhc3NpZmljYXRpb24pIHgkY2xhc3NpZmljYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICBhcnJheShzYXBwbHkoeCRkYXRhLCBGVU4sIC4uLiksIGRpbSh4JGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltbmFtZXMgPSBsaXN0KE5VTEwsIHBhc3RlKHByZWZpeCwgY29sbmFtZXMoeCRkYXRhKSwgc2VwID0gXCJcIikpKSkpXG5cbiAgICAjIyBTdW1tYXJpZXMgb25seSBieSBsYXN0IGxldmVsICh5ZWFycykgYXJlIGFsc28gc2ltcGxlIHRvIGhhbmRsZS5cbiAgICBpZiAoaWRlbnRpY2FsKGJ5LCB5ZWFycykpXG4gICAge1xuICAgICAgICByZXMgPC0gYXBwbHkoeCRkYXRhLCAyLCBmdW4sIC4uLilcbiAgICAgICAgbmFtZXMocmVzKSA8LSBwYXN0ZShwcmVmaXgsIGNvbG5hbWVzKHgkZGF0YSksIHNlcCA9IFwiXCIpXG4gICAgICAgIHJldHVybihyZXMpXG4gICAgfVxuXG4gICAgIyMgVGhlIG90aGVyIHBvc3NpYmlsaXRpZXMgcmVxdWlyZSB0byBzcGxpdCB0aGUgZGF0YSBpbiBncm91cHMgYXNcbiAgICAjIyBzcGVjaWZpZWQgaW4gYXJndW1lbnQgJ2J5Jy4gSWYgdGhlIGxhc3QgbGV2ZWwgKHllYXJzKSBpcyBpblxuICAgICMjICdieScsIHRoZW4gdGhlIG1hdHJpeCBzdHJ1Y3R1cmUgbXVzdCBiZSByZXRhaW5lZCB0byBtYWtlIHRoZVxuICAgICMjIHN1bW1hcmllcy4gT3RoZXJ3aXNlLCBpdCBjYW4ganVzdCBiZSBkcm9wcGVkIHNpbmNlIHN1bW1hcmllc1xuICAgICMjIHdpbGwgc3BhbiB0aGUgeWVhcnMgb2Ygb2JzZXJ2YXRpb24uXG4gICAgIyNcbiAgICAjIyBDb252ZXJ0IHRoZSBzZXF1ZW5jZSBvZiBzdWJzY3JpcHRzIGludG8gZmFjdG9ycyBieSBwYXN0aW5nIHRoZVxuICAgICMjIGRpZ2l0cyB0b2dldGhlci4gSXQgaXMgaW1wb3J0YW50ICpub3QqIHRvIHNvcnQgdGhlIGxldmVscyBpblxuICAgICMjIGNhc2UgdGhlIGxldmVscyBpbiAnYnknIGFyZSBub3QgaW4gdGhlIHNhbWUgb3JkZXIgYXMgaW5cbiAgICAjIyAnbGV2ZWwubmFtZXMnLlxuICAgIHJvd3MgPC0gc2V0ZGlmZihieSwgeWVhcnMpICAgICAgICAgICMgZ3JvdXBzIG90aGVyIHRoYW4geWVhcnNcbiAgICBzIDwtIHgkY2xhc3NpZmljYXRpb25bLCByb3dzLCBkcm9wID0gRkFMU0VdICMgc3Vic2NyaXB0c1xuICAgIGYgPC0gYXBwbHkocywgMSwgcGFzdGUsIGNvbGxhcHNlID0gXCJcIikgICAgICAjIGdyb3VwaW5nIElEc1xuICAgIGYgPC0gZmFjdG9yKGYsIGxldmVscyA9IHVuaXF1ZShmKSkgICAgICAgICAgIyBmYWN0b3JzXG4gICAgcyA8LSBzW21hdGNoKGxldmVscyhmKSwgZiksICwgZHJvcCA9IEZBTFNFXSAjIHVuaXF1ZSBzdWJzY3JpcHRzXG4gICAgeHggPC0gc3BsaXQoeCRkYXRhLCBmKSAgICAgICAgICAgICAgICAgICAgICAjIHNwbGl0IGRhdGFcblxuICAgICMjIE1ha2Ugc3VtbWFyaWVzXG4gICAgaWYgKHllYXJzICVpbiUgYnkpXG4gICAge1xuICAgICAgICB4eCA8LSBsYXBwbHkoeHgsIG1hdHJpeCwgbmNvbCA9IG5jb2woeCRkYXRhKSlcbiAgICAgICAgcmVzIDwtIHQoc2FwcGx5KHh4LCBmdW5jdGlvbih4LCAuLi4pIGFwcGx5KHgsIDIsIGZ1biwgLi4uKSwgLi4uKSlcbiAgICAgICAgY29scyA8LSBjb2xuYW1lcyh4JGRhdGEpXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIHJlcyA8LSBzYXBwbHkoeHgsIGZ1biwgLi4uKVxuICAgICAgICBjb2xzIDwtIGRlcGFyc2Uoc3Vic3RpdHV0ZShGVU4pKVxuICAgIH1cblxuICAgICMjIFJldHVybiByZXN1bHRzIGFzIGEgbWF0cml4XG4gICAgc3RydWN0dXJlKGNiaW5kKGlmIChjbGFzc2lmaWNhdGlvbikgcywgcmVzKSxcbiAgICAgICAgICAgICAgZGltbmFtZXMgPSBsaXN0KE5VTEwsIGMoaWYgKGNsYXNzaWZpY2F0aW9uKSByb3dzLCBwYXN0ZShwcmVmaXgsIGNvbHMsIHNlcCA9IFwiXCIpKSkpXG59XG5cbnNpbVMgPC0gZnVuY3Rpb24obiwgbW9kZWwuZnJlcSwgbW9kZWwuc2V2KVxue1xuICBcbiAgICBuPTEwMDBcbiAgICBtb2RlbC5mcmVxID0gZnJlcVxuICAgIG1vZGVsLnNldiA9IHNldlxuICAgIFxuICAgICMjIFByZXBhcmUgdGhlIGNhbGwgdG8gc2ltdWwoKSBieSBidWlsZGluZyB1cCAnbm9kZXMnXG4gICAgbGV2ZWwubmFtZXMgPC0gbmFtZXMoaWYgKGlzLm51bGwobW9kZWwuZnJlcSkpIG1vZGVsLnNldiBlbHNlIG1vZGVsLmZyZXEpXG4gICAgbmxldmVscyA8LSBsZW5ndGgobGV2ZWwubmFtZXMpXG4gICAgbm9kZXMgPC0gYXMubGlzdChjKHJlcCgxLCBubGV2ZWxzIC0gMSksIG4pKVxuICAgIG5hbWVzKG5vZGVzKSA8LSBsZXZlbC5uYW1lc1xuXG4gICAgIyMgR2V0IHNhbXBsZVxuICAgIHggPC0gYWdncmVnYXRlKHNpbXVsKG5vZGVzID0gbm9kZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwuZnJlcSA9IG1vZGVsLmZyZXEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwuc2V2ID0gbW9kZWwuc2V2KSlbLTFdXG5cbiAgICAjIyBDb21wdXRlIHRoZSBlbXBpcmljYWwgY2RmIG9mIHRoZSBzYW1wbGUuIERvbmUgbWFudWFsbHkgaW5zdGVhZFxuICAgICMjIG9mIGNhbGxpbmcgc3RhdHM6OjplY2RmKCkgdG8ga2VlcCBhIGNvcHkgb2YgdGhlIGVtcGlyaWNhbCBwbWZcbiAgICAjIyBpbiB0aGUgZW52aXJvbm1lbnQgd2l0aG91dCBjb21wdXRpbmcgaXQgdHdpY2UuXG4gICAgeCA8LSBzb3J0KHgpXG4gICAgdmFscyA8LSB1bmlxdWUoeClcbiAgICBmcyA8LSB0YWJ1bGF0ZShtYXRjaCh4LCB2YWxzKSkvbGVuZ3RoKHgpXG4gICAgRlVOIDwtIGFwcHJveGZ1bih2YWxzLCBwbWluKGN1bXN1bShmcyksIDEpLCBtZXRob2QgPSBcImNvbnN0YW50XCIsXG4gICAgICAgICAgICAgICAgICAgICB5bGVmdCA9IDAsIHlyaWdodCA9IDEsIGYgPSAwLCB0aWVzID0gXCJvcmRlcmVkXCIpXG4gICAgY2xhc3MoRlVOKSA8LSBjKFwiZWNkZlwiLCBcInN0ZXBmdW5cIiwgY2xhc3MoRlVOKSlcbiAgICBhc3NpZ24oXCJmc1wiLCBmcywgZW52aXIgPSBlbnZpcm9ubWVudChGVU4pKVxuICAgIEZVTlxufVxuXG5hZ2dyZWdhdGVEaXN0IDwtXG4gICAgZnVuY3Rpb24obWV0aG9kID0gYyhcInJlY3Vyc2l2ZVwiLCBcImNvbnZvbHV0aW9uXCIsIFwibm9ybWFsXCIsIFwibnBvd2VyXCIsIFwic2ltdWxhdGlvblwiKSxcbiAgICAgICAgICAgICBtb2RlbC5mcmVxID0gTlVMTCwgbW9kZWwuc2V2ID0gTlVMTCwgcDAgPSBOVUxMLCB4LnNjYWxlID0gMSxcbiAgICAgICAgICAgICBjb252b2x2ZSA9IDAsIG1vbWVudHMsIG5iLnNpbXVsLCAuLi4sXG4gICAgICAgICAgICAgdG9sID0gMWUtMDYsIG1heGl0ID0gNTAwLCBlY2hvID0gRkFMU0UpXG57XG4gICAgQ2FsbCA8LSBtYXRjaC5jYWxsKClcblxuICAgICMjIFRoZSBtZXRob2QgdXNlZCBlc3NlbnRpYWxseSB0ZWxscyB3aGljaCBmdW5jdGlvbiBzaG91bGQgYmVcbiAgICAjIyBjYWxsZWQgZm9yIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWdncmVnYXRlIGNsYWltc1xuICAgICMjIGRpc3RyaWJ1dGlvbi5cbiAgICBtZXRob2QgPC0gbWF0Y2guYXJnKG1ldGhvZClcblxuICAgIGlmIChtZXRob2QgPT0gXCJub3JtYWxcIilcbiAgICB7XG4gICAgICAgICMjIEFuIGVycm9yIG1lc3NhZ2UgaXMgaXNzdWVkIGlmIHRoZSBudW1iZXIgb2YgbW9tZW50cyBsaXN0ZWRcbiAgICAgICAgIyMgaXMgbm90IGFwcHJvcHJpYXRlIGZvciB0aGUgbWV0aG9kLiBIb3dldmVyIGl0IGlzIHRoZSB1c2VyJ3NcbiAgICAgICAgIyMgcmVzcG9uc2liaWxpdHkgdG8gbGlzdCB0aGUgbW9tZW50cyBpbiB0aGUgY29ycmVjdCBvcmRlclxuICAgICAgICAjIyBzaW5jZSB0aGUgdmVjdG9yIGlzIG5vdCByZXF1aXJlZCB0byBiZSBuYW1lZC5cbiAgICAgICAgaWYgKG1pc3NpbmcobW9tZW50cykgfHwgbGVuZ3RoKG1vbWVudHMpIDwgMilcbiAgICAgICAgICAgIHN0b3AoXCInbW9tZW50cycgbXVzdCBzdXBwbHkgdGhlIG1lYW4gYW5kIHZhcmlhbmNlIG9mIHRoZSBkaXN0cmlidXRpb25cIilcbiAgICAgICAgRlVOIDwtIG5vcm1hbChtb21lbnRzWzFdLCBtb21lbnRzWzJdKVxuICAgICAgICBjb21tZW50KEZVTikgPC0gXCJOb3JtYWwgYXBwcm94aW1hdGlvblwiXG4gICAgfVxuXG4gICAgZWxzZSBpZiAobWV0aG9kID09IFwibnBvd2VyXCIpXG4gICAge1xuICAgICAgICBpZiAobWlzc2luZyhtb21lbnRzKSB8fCBsZW5ndGgobW9tZW50cykgPCAzKVxuICAgICAgICAgICAgc3RvcChcIidtb21lbnRzJyBtdXN0IHN1cHBseSB0aGUgbWVhbiwgdmFyaWFuY2UgYW5kIHNrZXduZXNzIG9mIHRoZSBkaXN0cmlidXRpb25cIilcbiAgICAgICAgRlVOIDwtIG5wb3dlcihtb21lbnRzWzFdLCBtb21lbnRzWzJdLCBtb21lbnRzWzNdKVxuICAgICAgICBjb21tZW50KEZVTikgPC0gXCJOb3JtYWwgUG93ZXIgYXBwcm94aW1hdGlvblwiXG4gICAgfVxuICAgIGVsc2UgaWYgKG1ldGhvZCA9PSBcInNpbXVsYXRpb25cIilcbiAgICB7XG4gICAgICAgIGlmIChtaXNzaW5nKG5iLnNpbXVsKSlcbiAgICAgICAgICAgIHN0b3AoXCInbmIuc2ltdWwnIG11c3Qgc3VwcGx5IHRoZSBudW1iZXIgb2Ygc2ltdWxhdGlvbnNcIilcbiAgICAgICAgaWYgKGlzLm51bGwobmFtZXMobW9kZWwuZnJlcSkpICYmIGlzLm51bGwobmFtZXMobW9kZWwuc2V2KSkpXG4gICAgICAgICAgICBzdG9wKFwiZXhwcmVzc2lvbnMgaW4gJ21vZGVsLmZyZXEnIGFuZCAnbW9kZWwuc2V2JyBtdXN0IGJlIG5hbWVkXCIpXG4gICAgICAgIEZVTiA8LSBzaW1TKG5iLnNpbXVsLCBtb2RlbC5mcmVxID0gbW9kZWwuZnJlcSwgbW9kZWwuc2V2ID0gbW9kZWwuc2V2KVxuICAgICAgICBjb21tZW50KEZVTikgPC0gXCJBcHByb3hpbWF0aW9uIGJ5IHNpbXVsYXRpb25cIlxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICAjIyBcInJlY3Vyc2l2ZVwiIGFuZCBcImNvbnZvbHV0aW9uXCIgY2FzZXMuIEJvdGggcmVxdWlyZSBhXG4gICAgICAgICMjIGRpc2NyZXRlIGRpc3RyaWJ1dGlvbiBvZiBjbGFpbSBhbW91bnRzLCB0aGF0IGlzIGEgdmVjdG9yIG9mXG4gICAgICAgICMjIHByb2JhYmlsaXRpZXMgaW4gYXJndW1lbnQgJ21vZGVsLnNldicuXG4gICAgICAgIGlmICghaXMubnVtZXJpYyhtb2RlbC5zZXYpKVxuICAgICAgICAgICAgc3RvcChcIidtb2RlbC5zZXYnIG11c3QgYmUgYSB2ZWN0b3Igb2YgcHJvYmFiaWxpdGllc1wiKVxuXG4gICAgICAgICMjIFJlY3Vyc2l2ZSBtZXRob2QgdXNlcyBhIG1vZGVsIGZvciB0aGUgZnJlcXVlbmN5IGRpc3RyaWJ1dGlvbi5cbiAgICAgICAgaWYgKG1ldGhvZCA9PSBcInJlY3Vyc2l2ZVwiKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoaXMubnVsbChtb2RlbC5mcmVxKSB8fCAhaXMuY2hhcmFjdGVyKG1vZGVsLmZyZXEpKVxuICAgICAgICAgICAgICAgIHN0b3AoXCJmcmVxdWVuY3kgZGlzdHJpYnV0aW9uIG11c3QgYmUgc3VwcGxpZWQgYXMgYSBjaGFyYWN0ZXIgc3RyaW5nXCIpXG4gICAgICAgICAgICBkaXN0IDwtIG1hdGNoLmFyZyh0b2xvd2VyKG1vZGVsLmZyZXEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyhcInBvaXNzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW9tZXRyaWNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJuZWdhdGl2ZSBiaW5vbWlhbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJpbm9taWFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibG9nYXJpdGhtaWNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ6ZXJvLXRydW5jYXRlZCBwb2lzc29uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiemVyby10cnVuY2F0ZWQgZ2VvbWV0cmljXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiemVyby10cnVuY2F0ZWQgbmVnYXRpdmUgYmlub21pYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ6ZXJvLXRydW5jYXRlZCBiaW5vbWlhbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInplcm8tbW9kaWZpZWQgbG9nYXJpdGhtaWNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ6ZXJvLW1vZGlmaWVkIHBvaXNzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ6ZXJvLW1vZGlmaWVkIGdlb21ldHJpY1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInplcm8tbW9kaWZpZWQgbmVnYXRpdmUgYmlub21pYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ6ZXJvLW1vZGlmaWVkIGJpbm9taWFsXCIpKVxuICAgICAgICAgICAgRlVOIDwtIHBhbmplcihmeCA9IG1vZGVsLnNldiwgZGlzdCA9IGRpc3QsIHAwID0gcDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHguc2NhbGUgPSB4LnNjYWxlLCAuLi4sIGNvbnZvbHZlID0gY29udm9sdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvbCA9IHRvbCwgbWF4aXQgPSBtYXhpdCwgZWNobyA9IGVjaG8pXG4gICAgICAgICAgICBjb21tZW50KEZVTikgPC0gXCJSZWN1cnNpdmUgbWV0aG9kIGFwcHJveGltYXRpb25cIlxuICAgICAgICB9XG5cbiAgICAgICAgIyMgQ29udm9sdXRpb24gbWV0aG9kIHJlcXVpcmVzIGEgdmVjdG9yIG9mIHByb2JhYmlsaXRpZXMgaW5cbiAgICAgICAgIyMgYXJndW1lbnQgJ21vZGVsLmZyZXEnLlxuICAgICAgICBlbHNlIGlmIChtZXRob2QgPT0gXCJjb252b2x1dGlvblwiKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzLm51bWVyaWMobW9kZWwuZnJlcSkpXG4gICAgICAgICAgICAgICAgc3RvcChcIidtb2RlbC5mcmVxJyBtdXN0IGJlIGEgdmVjdG9yIG9mIHByb2JhYmlsaXRpZXNcIilcbiAgICAgICAgICAgIEZVTiA8LSBleGFjdChmeCA9IG1vZGVsLnNldiwgcG4gPSBtb2RlbC5mcmVxLCB4LnNjYWxlID0geC5zY2FsZSlcbiAgICAgICAgICAgIGNvbW1lbnQoRlVOKSA8LSBcIkV4YWN0IGNhbGN1bGF0aW9uIChjb252b2x1dGlvbnMpXCJcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBzdG9wKFwiaW50ZXJuYWwgZXJyb3JcIilcbiAgICB9XG5cbiAgICAjIyBSZXR1cm4gY3VtdWxhdGl2ZSBkaXN0cmlidXRpb24gZnVuY3Rpb25cbiAgICBjbGFzcyhGVU4pIDwtIGMoXCJhZ2dyZWdhdGVEaXN0XCIsIGNsYXNzKEZVTikpXG4gICAgYXR0cihGVU4sIFwiY2FsbFwiKSA8LSBDYWxsXG4gICAgRlVOXG4gICAgfVxuXG5cbnBsb3QuYWdncmVnYXRlRGlzdCA8LSBmdW5jdGlvbih4LCB4bGltLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlsYWIgPSBleHByZXNzaW9uKEZbU10oeCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW4gPSBcIkFnZ3JlZ2F0ZSBDbGFpbSBBbW91bnQgRGlzdHJpYnV0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViID0gY29tbWVudCh4KSwgLi4uKVxue1xuICAgICMjIEZ1bmN0aW9uIHBsb3QoKSBpcyB1c2VkIGZvciB0aGUgc3RlcCBjZGZzIGFuZCBmdW5jdGlvbiBjdXJ2ZSgpXG4gICAgIyMgaW4gdGhlIGNvbnRpbnVvdXMgY2FzZXMuXG4gICAgaWYgKFwic3RlcGZ1blwiICVpbiUgY2xhc3MoeCkpXG4gICAge1xuICAgICAgICAjIyBNZXRob2QgZm9yIGNsYXNzICdlY2RmJyB3aWxsIG1vc3QgcHJvYmFibHkgYmUgdXNlZC5cbiAgICAgICAgTmV4dE1ldGhvZChtYWluID0gbWFpbiwgeWxhYiA9IHlsYWIsIC4uLilcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgIyMgTGltaXRzIGZvciB0aGUgeC1heGlzIGFyZSBzdXBwbGllZCBpZiBub25lIGFyZSBnaXZlblxuICAgICAgICAjIyBpbiBhcmd1bWVudC5cbiAgICAgICAgaWYgKG1pc3NpbmcoeGxpbSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIG1lYW4gPC0gZ2V0KFwibWVhblwiLCBlbnZpciA9IGVudmlyb25tZW50KHgpKVxuICAgICAgICAgICAgc2QgPC0gc3FydChnZXQoXCJ2YXJpYW5jZVwiLCBlbnZpciA9IGVudmlyb25tZW50KHgpKSlcbiAgICAgICAgICAgIHhsaW0gPC0gYyhtZWFuIC0gMyAqIHNkLCBtZWFuICsgMyAqIHNkKVxuICAgICAgICB9XG4gICAgICAgIGN1cnZlKHgsIG1haW4gPSBtYWluLCB5bGFiID0geWxhYiwgeGxpbSA9IHhsaW0sIHlsaW0gPSBjKDAsIDEpLCAuLi4pXG4gICAgfVxuICAgIG10ZXh0KHN1YiwgbGluZSA9IDAuNSlcbn1cblxuc2ltdWwgPC0gZnVuY3Rpb24obm9kZXMsIG1vZGVsLmZyZXEgPSBOVUxMLCBtb2RlbC5zZXYgPSBOVUxMLCB3ZWlnaHRzID0gTlVMTClcbntcbiAgICAjIyBHZXQgbGV2ZWwgbmFtZXMuIEVhY2ggY291bGQgYmUgTlVMTC5cbiAgICBsZXZlbC5uYW1lcyA8LSBuYW1lcyhub2RlcylcbiAgICBmcmVxLm5hbWVzIDwtIG5hbWVzKG1vZGVsLmZyZXEpXG4gICAgc2V2Lm5hbWVzIDwtIG5hbWVzKG1vZGVsLnNldilcblxuICAgICMjICdub2RlcycgbXVzdCBiZSBhIG5hbWVkIGxpc3QuIE9uZSBleGNlcHRpb24gaXMgYWxsb3dlZDogdGhlcmVcbiAgICAjIyBpcyBvbmx5IG9uZSBsZXZlbC4gSW4gdGhpcyBjYXNlLCBhZGQgYSBwcmVkZXRlcm1pbmVkIG5hbWUgaWZcbiAgICAjIyB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeSBhbmQgbWFrZSBzdXJlICdub2RlcycgaXMgYSBsaXN0LlxuICAgIGlmIChsZW5ndGgobm9kZXMpID09IDFMKVxuICAgIHtcbiAgICAgICAgaWYgKGlzLm51bGwobGV2ZWwubmFtZXMpKVxuICAgICAgICAgICAgbmFtZXMobm9kZXMpIDwtIFwiWFwiXG4gICAgICAgIG5vZGVzIDwtIGFzLmxpc3Qobm9kZXMpXG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGlmICghaXMubGlzdChub2RlcykgfHwgaXMubnVsbChsZXZlbC5uYW1lcykpXG4gICAgICAgICAgICBzdG9wKFwiJ25vZGVzJyBtdXN0IGJlIGEgbmFtZWQgbGlzdFwiKVxuICAgIH1cblxuICAgICMjIERldGVybWluZSBpZiBmcmVxdWVuY3kgYW5kIHNldmVyaXR5IG1vZGVscyBhcmUgcHJlc2VudC4gS2VlcFxuICAgICMjIGZvciBmdXR1cmUgdXNlLlxuICAgIGhhcy5mcmVxIDwtICFhbGwoc2FwcGx5KG1vZGVsLmZyZXEsIGlzLm51bGwpKVxuICAgIGhhcy5zZXYgIDwtICFhbGwoc2FwcGx5KG1vZGVsLnNldiwgaXMubnVsbCkpXG5cbiAgICAjIyBDaGVjayB0aGF0IGF0IGxlYXN0IG9uZSBvZiAnbW9kZWwuZnJlcScgb3IgJ21vZGVsLnNldicgaXNcbiAgICAjIyBwcmVzZW50IGFuZCB0aGF0IHRoZSBsZXZlbCBuYW1lcyBtYXRjaCB3aXRoIHRob3NlIG9mICdub2RlcycuXG4gICAgIyMgUGVyaGFwcyBpcyB0aGVyZSBhIGZhbmNpZXIgd2F5IHRvIGRvIGFsbCB0aGVzZSB0ZXN0cywgYnV0IHRoZVxuICAgICMjIHZlcnNpb24gYmVsb3cgaXMgYXQgbGVhc3QgZWFzeSB0byBmb2xsb3cuXG4gICAgaWYgKGhhcy5mcmVxKVxuICAgIHtcbiAgICAgICAgaWYgKGhhcy5zZXYpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghIChpZGVudGljYWwobGV2ZWwubmFtZXMsIGZyZXEubmFtZXMpICYmXG4gICAgICAgICAgICAgICAgICAgaWRlbnRpY2FsKGxldmVsLm5hbWVzLCBzZXYubmFtZXMpKSlcbiAgICAgICAgICAgICAgICBzdG9wKFwibGV2ZWwgbmFtZXMgZGlmZmVyZW50IGluICdub2RlcycsICdtb2RlbC5mcmVxJyBhbmQgJ21vZGVsLnNldidcIilcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICghaWRlbnRpY2FsKGxldmVsLm5hbWVzLCBmcmVxLm5hbWVzKSlcbiAgICAgICAgICAgICAgICBzdG9wKFwibGV2ZWwgbmFtZXMgZGlmZmVyZW50IGluICdub2RlcycsICdtb2RlbC5mcmVxJyBhbmQgJ21vZGVsLnNldidcIilcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgICBpZiAoaGFzLnNldilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpZGVudGljYWwobGV2ZWwubmFtZXMsIHNldi5uYW1lcykpXG4gICAgICAgICAgICAgICAgc3RvcChcImxldmVsIG5hbWVzIGRpZmZlcmVudCBpbiAnbm9kZXMnLCAnbW9kZWwuZnJlcScgYW5kICdtb2RlbC5zZXYnXCIpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3RvcChcIm9uZSBvZiAnbW9kZWwuZnJlcScgb3IgJ21vZGVsLnNldicgbXVzdCBiZSBub24tTlVMTFwiKVxuICAgIH1cblxuICAgICMjIFRoZSBmdW5jdGlvbiBpcyB3cml0dGVuIGZvciBtb2RlbHMgd2l0aCBhdCBsZWFzdCB0d28gbGV2ZWxzXG4gICAgIyMgKGVudGl0eSBhbmQgeWVhcikuIElmIHRoZXJlIGlzIG9ubHkgb25lLCBhZGQgYSBkdW1teSBsZXZlbCB0b1xuICAgICMjIGF2b2lkIHNjYXR0ZXJpbmcgdGhlIGNvZGUgd2l0aCBjb25kaXRpb25zLlxuICAgIGlmIChsZW5ndGgobm9kZXMpIDwgMkwpXG4gICAge1xuICAgICAgICBub2RlcyA8LSBjKG5vZGUgPSAxLCBub2RlcylcbiAgICAgICAgbW9kZWwuZnJlcSA8LVxuICAgICAgICAgICAgaWYgKGhhcy5mcmVxKSBjKGV4cHJlc3Npb24obm9kZSA9IE5VTEwpLCBtb2RlbC5mcmVxKSBlbHNlIE5VTExcbiAgICAgICAgbW9kZWwuc2V2IDwtXG4gICAgICAgICAgICBpZiAoaGFzLnNldikgYyhleHByZXNzaW9uKG5vZGUgPSBOVUxMKSwgbW9kZWwuc2V2KSBlbHNlIE5VTExcbiAgICB9XG5cbiAgICAjIyBGcmVxdWVudGx5IHVzZWQgcXVhbnRpdGllc1xuICAgIGxldmVsLm5hbWVzIDwtIG5hbWVzKG5vZGVzKSAgICAgICAgICMgbmVlZCB0byByZXNldCFcbiAgICBubGV2ZWxzIDwtIGxlbmd0aChub2RlcykgICAgICAgICAgICAjIG51bWJlciBvZiBsZXZlbHNcblxuICAgICMjIFJlY3ljbGluZyBvZiB0aGUgbnVtYmVyIG9mIG5vZGVzIChpZiBuZWVkZWQpIG11c3QgYmUgZG9uZVxuICAgICMjIFwibWFudWFsbHlcIi4gV2UgZG8gaXQgaGVyZSBvbmNlIGFuZCBmb3IgYWxsIHNpbmNlIGluIGFueSBjYXNlXG4gICAgIyMgYmVsb3cgd2Ugd2lsbCBuZWVkIHRvIGtub3cgdGhlIHRvdGFsIG51bWJlciBvZiBub2RlcyBpbiB0aGVcbiAgICAjIyBwb3J0Zm9saW8uIEZ1cnRoZXJtb3JlLCB0aGUgcmVjeWNsZWQgbGlzdCAnbm9kZXMnIHdpbGwgYmVcbiAgICAjIyByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24uXG4gICAgZm9yIChpIGluIDJMOm5sZXZlbHMpICAgICAgICMgZmlyc3Qgbm9kZSBkb2Vzbid0IG5lZWQgcmVjeWNsaW5nXG4gICAgICAgIG5vZGVzW1tpXV0gPC0gcmVwKG5vZGVzW1tpXV0sIGxlbmd0aCA9IHN1bShub2Rlc1tbaSAtIDFMXV0pKVxuXG4gICAgIyMgU2ltdWxhdGlvbiBvZiB0aGUgZnJlcXVlbmN5IG1peGluZyBwYXJhbWV0ZXJzIGZvciBlYWNoIGxldmVsXG4gICAgIyMgKGUuZy4gY2xhc3MsIGNvbnRyYWN0KSBhbmQsIGF0IHRoZSBsYXN0IGxldmVsLCB0aGUgYWN0dWFsXG4gICAgIyMgZnJlcXVlbmNpZXMuIElmICdtb2RlbC5mcmVxJyBpcyBOVUxMLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAjIyBoYXZpbmcgb25lIGNsYWltIHBlciBub2RlLlxuICAgIGlmIChoYXMuZnJlcSlcbiAgICB7XG4gICAgICAgICMjIE5vcm1hbGx5LCBvbmx5IHRoZSBpbW1lZGlhdGVseSBhYm92ZSBtaXhpbmcgcGFyYW1ldGVyIHdpbGxcbiAgICAgICAgIyMgYmUgdXNlZCBpbiB0aGUgbW9kZWwgZm9yIGEgbGV2ZWwsIGJ1dCB0aGUgY29kZSBoZXJlIGFsbG93c1xuICAgICAgICAjIyBmb3IgbW9yZSBnZW5lcmFsIHNjaGVtZXMuIEZvciB0aGlzIHRvIHdvcmssIGFsbCBtaXhpbmdcbiAgICAgICAgIyMgcGFyYW1ldGVycyBoYXZlIHRvIGJlIGNvcnJlY3RseSByZWN5Y2xlZCBhdCBlYWNoIGxldmVsXG4gICAgICAgICMjIHdoZXJlIHRoZXkgKmNvdWxkKiBiZSB1c2VkLiBTaW5jZSB0aGUgbW9kZWwgYXQgYW55IGxldmVsXG4gICAgICAgICMjIGNvdWxkIGJlIE5VTEwsICdwYXJhbXMnIHdpbGwga2VlcCB0cmFjayBvZiB0aGUgbWl4aW5nXG4gICAgICAgICMjIHBhcmFtZXRlcnMgdGhhdCB3ZXJlIHNpbXVsYXRlZCBpbiBwcmV2aW91cyBpdGVyYXRpb24gb2YgdGhlXG4gICAgICAgICMjIGZvcnRoY29taW5nIGxvb3AuXG4gICAgICAgIHBhcmFtcyA8LSBjaGFyYWN0ZXIoMClcblxuICAgICAgICBmb3IgKGkgaW4gc2VxX2xlbihubGV2ZWxzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgIyMgTnVtYmVyIG9mIG5vZGVzIGF0IHRoZSBjdXJyZW50IGxldmVsXG4gICAgICAgICAgICBuLmN1cnJlbnQgPC0gbm9kZXNbW2ldXVxuXG4gICAgICAgICAgICAjIyBFeHRyYWN0IHNpbXVsYXRpb24gbW9kZWwgZm9yIHRoZSBsZXZlbC5cbiAgICAgICAgICAgIENhbGwgPC0gbW9kZWwuZnJlcVtbaV1dXG5cbiAgICAgICAgICAgICMjIFJlcGVhdCB0aGUgbWl4aW5nIHBhcmFtZXRlcnMgb2YgYWxsIGxldmVscyBhYm92ZSB0aGVcbiAgICAgICAgICAgICMjIGN1cnJlbnQgb25lIHRoYXQgd2VyZSBzaW11bGF0ZWQgaW4gdGhlIHBhc3QuXG4gICAgICAgICAgICBmb3IgKGogaW4gc2VxX2Fsb25nKHBhcmFtcykpXG4gICAgICAgICAgICAgICAgZXZhbChzdWJzdGl0dXRlKHggPC0gcmVwLmludCh4LCBuLmN1cnJlbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KHggPSBhcy5uYW1lKHBhcmFtc1tbal1dKSkpKVxuXG4gICAgICAgICAgICAjIyBTaW11bGF0ZSBkYXRhIG9ubHkgaWYgdGhlcmUgaXMgYSBtb2RlbCBhdCB0aGUgY3VycmVudFxuICAgICAgICAgICAgIyMgbGV2ZWwuXG4gICAgICAgICAgICBpZiAoIWlzLm51bGwoQ2FsbCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgIyMgQWRkIHRoZSBudW1iZXIgb2YgdmFyaWF0ZXMgdG8gdGhlIGNhbGwuXG4gICAgICAgICAgICAgICAgQ2FsbCRuIDwtIHN1bShuLmN1cnJlbnQpXG5cbiAgICAgICAgICAgICAgICAjIyBTaW11bGF0aW9uIG9mIHRoZSBtaXhpbmcgcGFyYW1ldGVycyBvciB0aGUgZGF0YS4gSW5cbiAgICAgICAgICAgICAgICAjIyB0aGUgbGF0dGVyIGNhc2UsIHN0b3JlIHRoZSByZXN1bHRzIGluIGEgZml4ZWRcbiAgICAgICAgICAgICAgICAjIyB2YXJpYWJsZSBuYW1lLlxuICAgICAgICAgICAgICAgIGlmIChpIDwgbmxldmVscylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnbihsZXZlbC5uYW1lc1tbaV1dLCBldmFsKENhbGwpKVxuICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPC0gbGV2ZWwubmFtZXNbW2ldXSAjIHJlbWVtYmVyIHRoZSBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY2llcyA8LSBldmFsKENhbGwpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZVxuICAgICAgICBmcmVxdWVuY2llcyA8LSByZXAuaW50KDEsIHN1bShub2Rlc1tbbmxldmVsc11dKSlcblxuICAgICMjIFNpbXVsYXRpb24gb2YgdGhlIGNsYWltIGFtb3VudHMuIElmICdtb2RlbC5zZXYnIGlzIE5VTEwsIHRoaXNcbiAgICAjIyBpcyBlcXVpdmFsZW50IHRvIHNpbXVsYXRpbmcgZnJlcXVlbmNpZXMgb25seS5cbiAgICBpZiAoaGFzLnNldilcbiAgICB7XG4gICAgICAgICMjIFJlcGVhdCB0aGUgc2FtZSBwcm9jZWR1cmUgYXMgZm9yIHRoZSBmcmVxdWVuY3kgbW9kZWwsIHdpdGhcbiAgICAgICAgIyMgb25lIGRpZmZlcmVuY2U6IHdoZW4gcmVhY2hpbmcgdGhlIGxhc3QgbGV2ZWwgKGNsYWltXG4gICAgICAgICMjIGFtb3VudHMpLCB0aGUgbnVtYmVyIG9mIHZhcmlhdGVzIHRvIHNpbXVsYXRlIGlzIG5vdCBnaXZlblxuICAgICAgICAjIyBieSB0aGUgbnVtYmVyIG9mIG5vZGVzIGJ1dCByYXRoZXIgYnkgdGhlIG51bWJlciBvZiBjbGFpbXNcbiAgICAgICAgIyMgYXMgZm91bmQgaW4gJ2ZyZXF1ZW5jaWVzJy5cbiAgICAgICAgcGFyYW1zIDwtIGNoYXJhY3RlcigwKVxuXG4gICAgICAgIGZvciAoaSBpbiBzZXFfbGVuKG5sZXZlbHMpKVxuICAgICAgICB7XG4gICAgICAgICAgICBuLmN1cnJlbnQgPC0gbm9kZXNbW2ldXVxuICAgICAgICAgICAgQ2FsbCA8LSBtb2RlbC5zZXZbW2ldXVxuXG4gICAgICAgICAgICBmb3IgKGogaW4gc2VxX2Fsb25nKHBhcmFtcykpXG4gICAgICAgICAgICAgICAgZXZhbChzdWJzdGl0dXRlKHggPC0gcmVwLmludCh4LCBuLmN1cnJlbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KHggPSBhcy5uYW1lKHBhcmFtc1tbal1dKSkpKVxuXG4gICAgICAgICAgICBpZiAoIWlzLm51bGwoQ2FsbCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgIyMgVGhlIHJlc3Qgb2YgdGhlIHByb2NlZHVyZSBkaWZmZXJzIGRlcGVuZGluZyBpZiB3ZVxuICAgICAgICAgICAgICAgICMjIGFyZSBzdGlsbCBzaW11bGF0aW5nIG1peGluZyBwYXJhbWV0ZXJzIG9yIGNsYWltXG4gICAgICAgICAgICAgICAgIyMgYW1vdW50cy5cbiAgICAgICAgICAgICAgICBpZiAoaSA8IG5sZXZlbHMpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAjIyBTaW11bGF0aW9uIG9mIG1peGluZyBwYXJhbWV0ZXJzIGlzIGlkZW50aWNhbCB0byB0aGVcbiAgICAgICAgICAgICAgICAgICAgIyMgc2ltdWxhdGlvbiBvZiBmcmVxdWVuY2llcy5cbiAgICAgICAgICAgICAgICAgICAgQ2FsbCRuIDwtIHN1bShuLmN1cnJlbnQpXG4gICAgICAgICAgICAgICAgICAgIGFzc2lnbihsZXZlbC5uYW1lc1tbaV1dLCBldmFsKENhbGwpKVxuICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPC0gbGV2ZWwubmFtZXNbW2ldXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAjIyBGb3IgdGhlIHNpbXVsYXRpb24gb2YgY2xhaW0gYW1vdW50cywgdGhlIG51bWJlclxuICAgICAgICAgICAgICAgICAgICAjIyBvZiB2YXJpYXRlcyBpcyByYXRoZXIgZ2l2ZW4gYnkgdGhlXG4gICAgICAgICAgICAgICAgICAgICMjICdmcmVxdWVuY2llcycgb2JqZWN0LiBGdXJ0aGVybW9yZSwgdGhlIG1peGluZ1xuICAgICAgICAgICAgICAgICAgICAjIyBwYXJhbWV0ZXJzIG11c3QgYmUgcmVjeWNsZWQgb25jZSBtb3JlIHRvIG1hdGNoXG4gICAgICAgICAgICAgICAgICAgICMjIHRoZSB2ZWN0b3Igb2YgZnJlcXVlbmNpZXMuXG4gICAgICAgICAgICAgICAgICAgIGZvciAocCBpbiBpbnRlcnNlY3QoYWxsLnZhcnMoQ2FsbCksIHBhcmFtcykpXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKHN1YnN0aXR1dGUoeCA8LSByZXAuaW50KHgsIGZyZXF1ZW5jaWVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KHggPSBhcy5uYW1lKHApKSkpXG4gICAgICAgICAgICAgICAgICAgIENhbGwkbiA8LSBzdW0oZnJlcXVlbmNpZXMpXG4gICAgICAgICAgICAgICAgICAgIHNldmVyaXRpZXMgPC1ldmFsKENhbGwpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgc2V2ZXJpdGllcyA8LSByZXAuaW50KDEsIHN1bShmcmVxdWVuY2llcykpXG5cbiAgICAjIyBXZSBtdXN0IG5vdyBkaXN0cmlidXRlIHRoZSBjbGFpbSBhbW91bnRzIGluIHZlY3RvciAnc2V2ZXJpdGllcydcbiAgICAjIyB0byB0aGUgYXBwcm9wcmlhdGUgbm9kZXMuIFRoaXMgaXMgY29tcGxpY2F0ZWQgYnkgdGhlXG4gICAgIyMgcG9zc2liaWxpdHkgdG8gaGF2ZSBkaWZmZXJlbnQgbnVtYmVyIG9mIG5vZGVzICh5ZWFycyBvZlxuICAgICMjIG9ic2VydmF0aW9uKSBmb3IgZWFjaCBlbnRpdHkuIFRoZSByZXN1bHQgbXVzdCBiZSBhIG1hdHJpeFxuICAgICMjIHdpdGggdGhlIG51bWJlciBvZiBjb2x1bW5zIGVxdWFsIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsYXN0XG4gICAgIyMgbGV2ZWwgbm9kZXMuXG4gICAgIyNcbiAgICAjIyBUaGUgbnVtYmVyIG9mIG5vZGVzICh5ZWFycyBvZiBvYnNlcnZhdGlvbikgcGVyIGVudGl0eSBpc1xuICAgICMjIGdpdmVuIGJ5ICduLmN1cnJlbnQnIHNpbmNlIHdlIHJlYWNoZWQgdGhlIGxhc3QgbGV2ZWwgaW4gKGVpdGhlclxuICAgICMjIG9uZSBvZikgdGhlIGFib3ZlIGxvb3BzLlxuICAgICMjXG4gICAgIyMgQXNzaWduIGEgdW5pcXVlIElEIHRvIGVhY2ggbm9kZSwgbGVhdmluZyBnYXBzIGZvciBub2RlcyB3aXRob3V0XG4gICAgIyMgb2JzZXJ2YXRpb25zLlxuICAgIGluZCA8LSB1bmxpc3QobWFwcGx5KHNlcSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tID0gc2VxKGJ5ID0gbWF4KG4uY3VycmVudCksIGFsb25nID0gbi5jdXJyZW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBuLmN1cnJlbnQpKVxuXG4gICAgIyMgUmVwZWF0aW5nIHRoZSB2ZWN0b3Igb2YgSURzIGFjY29yZGluZyB0byB0aGUgZnJlcXVlbmNpZXNcbiAgICAjIyBlZmZlY3RpdmVseSBhc3NpZ25zIGEgbm9kZSBJRCB0byBlYWNoIGNsYWltIGFtb3VudC4gVGhlIHZlY3RvclxuICAgICMjIG9mIGNsYWltIGFtb3VudHMgaXMgdGhlbiBzcGxpdCBieSBub2RlLCB5aWVsZGluZyBhIGxpc3Qgd2hlcmVcbiAgICAjIyBlYWNoIGVsZW1lbnQgY29ycmVzcG9uZHMgdG8gYSBub2RlIHdpdGggY2xhaW1zLlxuICAgIGYgPC0gcmVwLmludChpbmQsIGZyZXF1ZW5jaWVzKVxuICAgIHNldmVyaXRpZXMgPC0gc3BsaXQoc2V2ZXJpdGllcywgZilcblxuICAgICMjIElkZW50aWZ5IG5vZGVzIHdpdGggZnJlcXVlbmN5IGVxdWFsIHRvIDAsIHdoaWNoIGlzIGRpZmZlcmVudFxuICAgICMjIGZyb20gaGF2aW5nIG5vIG9ic2VydmF0aW9uIChOQSkuXG4gICAgZnJlcTAgPC0gaW5kW3doaWNoKGZyZXF1ZW5jaWVzID09IDApXVxuXG4gICAgIyMgUmVhcnJhbmdlIHRoZSBsaXN0IG9mIGNsYWltIGFtb3VudHMgaW4gYSBtYXRyaXg7XG4gICAgIyNcbiAgICAjIyAgICAgIG51bWJlciBvZiByb3dzOiBudW1iZXIgb2Ygbm9kZXMgYXQgdGhlIHBlbnVsdGltYXRlIGxldmVsXG4gICAgIyMgICAgICAgICAgICAgICAgICAgICAgKG51bWJlciBvZiBlbnRpdGllcylcbiAgICAjIyAgIG51bWJlciBvZiBjb2x1bW5zOiBtYXhpbXVtIG51bWJlciBvZiBub2RlcyBhdCB0aGUgbGFzdCBsZXZlbFxuICAgICMjICAgICAgICAgICAgICAgICAgICAgIChudW1iZXIgb2YgeWVhcnMgb2Ygb2JzZXJ2YXRpb24pLlxuICAgICMjXG4gICAgIyMgTW9yZW92ZXIsIGFzc2lnbiBhIHZhbHVlIG9mICdudW1lcmljKDApJyB0byBub2RlcyB3aXRoIGFcbiAgICAjIyBmcmVxdWVuY3kgb2YgMC5cbiAgICBucm93IDwtIGxlbmd0aChuLmN1cnJlbnQpICAgICAgICAgICAjIG51bWJlciBvZiBlbnRpdGllc1xuICAgIG5jb2wgPC0gbWF4KG4uY3VycmVudCkgICAgICAgICAgICAgICMgbnVtYmVyIG9mIHllYXJzXG4gICAgcmVzIDwtIGFzLmxpc3QocmVwLmludChOQSwgbnJvdyAqIG5jb2wpKVxuICAgIHJlc1t1bmlxdWUoZildIDwtIHNldmVyaXRpZXNcbiAgICByZXNbZnJlcTBdIDwtIGxhcHBseShyZXAuaW50KDAsIGxlbmd0aChmcmVxMCkpLCBudW1lcmljKVxuICAgIHJlcyA8LSBtYXRyaXgocmVzLCBucm93LCBuY29sLCBieXJvdyA9IFRSVUUsXG4gICAgICAgICAgICAgICAgICBkaW1uYW1lcyA9IGxpc3QoTlVMTCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZShsZXZlbC5uYW1lc1tubGV2ZWxzXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXFfbGVuKG5jb2wpLCBzZXAgPSBcIi5cIikpKVxuXG4gICAgIyMgUmVzaGFwZSB3ZWlnaHRzIGFzIGEgbWF0cml4LCBpZiBuZWNlc3NhcnkuXG4gICAgd2VpZ2h0cyA8LSBpZiAoaXMubnVsbCh3ZWlnaHRzKSlcbiAgICAgICAgTlVMTFxuICAgIGVsc2VcbiAgICB7XG4gICAgICAgICMjIEludGVncmF0ZSBOQXMgaW50byB0aGUgd2VpZ2h0cyBtYXRyaXggYXMgYXBwcm9wcmlhdGUuXG4gICAgICAgIHcgPC0gcmVwLmludChOQSwgbnJvdyAqIG5jb2wpXG4gICAgICAgIHdbaW5kXSA8LSB3ZWlnaHRzXG4gICAgICAgIG1hdHJpeCh3LCBucm93ID0gbnJvdywgYnlyb3cgPSBUUlVFLCBkaW1uYW1lcyA9IGRpbW5hbWVzKHJlcykpXG4gICAgfVxuXG4gICAgIyMgRmluYWxseSwgY3JlYXRlIGEgbWF0cml4IHdoZXJlIGVhY2ggcm93IGNvbnRhaW5zIHRoZSBzZXJpZXMgb2ZcbiAgICAjIyBpZGVudGlmaWVycyBmb3IgYW4gZW50aXR5IGluIHRoZSBwb3J0Zm9saW8sIGUuZy4gaWYgdGhlIGRhdGFcbiAgICAjIyBpcyBkZW5vdGVkIFhfe2lqa3R9LCBvbmUgbGluZSBvZiB0aGUgbWF0cml4IHdpbGwgY29udGFpblxuICAgICMjIHN1YnNjcmlwdHMgaSwgaiBhbmQgay4gQXMgd2UgbW92ZSBmcm9tIHJpZ2h0IHRvIGxlZnQgaW4gdGhlXG4gICAgIyMgY29sdW1ucyBvZiAnbScsIHRoZSBzdWJzY3JpcHRzIGFyZSBpbmNyZWFzaW5nbHkgcmVwZWF0ZWQuXG4gICAgbmNvbCA8LSBubGV2ZWxzIC0gMUxcbiAgICBtIDwtIG1hdHJpeCgxLCBucm93LCBuY29sLFxuICAgICAgICAgICAgICAgIGRpbW5hbWVzID0gbGlzdChOVUxMLCBoZWFkKGxldmVsLm5hbWVzLCBuY29sKSkpXG4gICAgZm9yIChpIGluIHNlcV9sZW4obmNvbCAtIDFMKSkgICAgIyBhbGwgYnV0IHRoZSBsYXN0IGNvbHVtblxuICAgIHtcbiAgICAgICAgIyMgVmVjdG9yICd4JyB3aWxsIG9yaWdpbmFsbHkgY29udGFpbiBhbGwgc3Vic2NyaXB0cyBmb3Igb25lXG4gICAgICAgICMjIGxldmVsLiBUaGVzZSBzdWJzY3JpcHRzIGFyZSB0aGVuIHJlcGVhdGVkIGFzIG5lZWRlZCB0byBnaXZlXG4gICAgICAgICMjIHRoZSBkZXNpcmVkIHJlc3VsdC4gVG8gYXZvaWQgYW5vdGhlciBleHBsaWNpdCBsb29wLCBJIHVzZSBhXG4gICAgICAgICMjICdsYXBwbHknIHdpdGggYSBkaXJlY3QgYXNzaWdubWVudCBpbiB0aGUgY3VycmVudFxuICAgICAgICAjIyBmcmFtZS4gU29tZXdoYXQgdW51c3VhbCwgYnV0IHRoaXMgaXMgdGhlIHNpbXBsZXN0IHByb2NlZHVyZVxuICAgICAgICAjIyBJIG1hbmFnZWQgdG8gY29tZSB1cCB3aXRoLlxuICAgICAgICB4IDwtIHVubGlzdChsYXBwbHkobm9kZXNbW2ldXSwgc2VxKSlcbiAgICAgICAgbGFwcGx5KG5vZGVzWyhpICsgMUwpOihubGV2ZWxzIC0gMUwpXSxcbiAgICAgICAgICAgICAgIGZ1bmN0aW9uKHYpIGFzc2lnbihcInhcIiwgcmVwLmludCh4LCB2KSwgZW52aXIgPSBwYXJlbnQuZnJhbWUoMikpKVxuICAgICAgICBtWywgaV0gPC0geFxuICAgIH1cbiAgICBtWywgbmNvbF0gPC0gdW5saXN0KGxhcHBseShub2Rlc1tbbmNvbF1dLCBzZXEpKSAjIGxhc3QgY29sdW1uXG5cbiAgICAjIyBSZXR1cm4gb2JqZWN0IG9mIGNsYXNzICdwb3J0Zm9saW8nXG4gICAgc3RydWN0dXJlKGxpc3QoZGF0YSA9IHJlcyxcbiAgICAgICAgICAgICAgICAgICB3ZWlnaHRzID0gd2VpZ2h0cyxcbiAgICAgICAgICAgICAgICAgICBjbGFzc2lmaWNhdGlvbiA9IG0sXG4gICAgICAgICAgICAgICAgICAgbm9kZXMgPSBub2RlcyxcbiAgICAgICAgICAgICAgICAgICBtb2RlbC5mcmVxID0gbW9kZWwuZnJlcSxcbiAgICAgICAgICAgICAgICAgICBtb2RlbC5zZXYgPSBtb2RlbC5zZXYpLFxuICAgICAgICAgICAgICBjbGFzcyA9IFwicG9ydGZvbGlvXCIpXG59XG5cbmRsb21heCA8LSBmdW5jdGlvbih4LCBzaGFwZT0xLCBzY2FsZT0xLCBsb2c9RkFMU0UpIHtcbiAgaWYgKGxvZz09RkFMU0UpIHJlc3VsdCA8LSBzaGFwZSpzY2FsZV5zaGFwZSAvIChzY2FsZSArIHgpXihzaGFwZSsxKVxuICBpZiAobG9nPT1UUlVFICkgcmVzdWx0IDwtIGxvZyhzaGFwZSkrc2hhcGUqbG9nKHNjYWxlKS0oc2hhcGUrMSkqbG9nKHNjYWxlICsgeClcbiAgcmV0dXJuKHJlc3VsdCkgfVxuXG5ybG9tYXggPC0gZnVuY3Rpb24obiwgc2hhcGU9MSwgc2NhbGU9MSkge1xuICB1IDwtIHJ1bmlmKG4pXG4gIHJlc3VsdCA8LSBzY2FsZSooKDEgLSB1KV4oLTEvc2hhcGUpLTEpXG4gIHJldHVybihyZXN1bHQpIH1cblxuSW5zYW1wbGVUb3duIDwtIHN1YnNldChJbnNhbXBsZSwgVHlwZVRvd249PTEpXG5cbiMgVGhlIG5lZ2F0aXZlIGJpbm9taWFsIGZyZXF1ZW5jeSBtb2RlbDogTlxuTiA8LSBJbnNhbXBsZVRvd24kRnJlcVxuZnJlcV9saWsgPC0gZnVuY3Rpb24ocGFybSkge1xuICByICAgIDwtIHBhcm1bMV1cbiAgYmV0YSA8LSBwYXJtWzJdXG4gIGxpayAgPC0gLXN1bShkbmJpbm9tKE4sIHNpemU9ciwgcHJvYj0xLygxK2JldGEpLCBsb2c9VFJVRSkpXG4gIHJldHVybihsaWspXG59XG5pbml0LnBhcm0uZnJlcSA8LSBjKG1lYW4oTikvKHZhcihOKS9tZWFuKE4pLTEpLCB2YXIoTikvbWVhbihOKS0xKSAjIGluaXRpYWwgZXN0aW1hdGVzIGJ5IG1ldGhvZCBvZiBtb21lbnRzXG5mcmVxX21vZCAgICAgICA8LSBvcHRpbShwYXI9aW5pdC5wYXJtLmZyZXEsIGZuPWZyZXFfbGlrKSAjIE1heGltdW0gbGlrZWxpaG9vZCBlc3RpbWF0aW9uIGZvciB0aGUgZnJlcXVlbmN5IG1vZGVsXG5cbnIuZXN0ICAgIDwtIGZyZXFfbW9kJHBhclsxXVxuYmV0YS5lc3QgPC0gZnJlcV9tb2QkcGFyWzJdXG5cbiMgVGhlIFBhcmV0byBzZXZlcml0eSBtb2RlbDogWGJhclxuWGJhciA8LSBJbnNhbXBsZVRvd24keUF2Z1t3aGljaChJbnNhbXBsZVRvd24kRnJlcT4wKV1cbnNldl9saWsgPC0gZnVuY3Rpb24ocGFybSkge1xuICBhbHBoYSA8LSAgcGFybVsxXVxuICB0aGV0YSA8LSAgcGFybVsyXVxuICBsaWsgICA8LSAtc3VtKGRsb21heChYYmFyLCBzaGFwZT1hbHBoYSwgc2NhbGU9dGhldGEsIGxvZz1UUlVFKSlcbiAgcmV0dXJuKGxpaylcbn1cbmluaXQucGFybS5zZXYgPC0gYyggMi8oMS1tZWFuKFhiYXIpXjIvdmFyKFhiYXIpKSAgLCBtZWFuKFhiYXIpKigyLygxLW1lYW4oWGJhcileMi92YXIoWGJhcikpLTEpICkgIyBpbml0aWFsIGVzdGltYXRlcyBieSBtZXRob2Qgb2YgbW9tZW50c1xuc2V2X21vZCAgICAgICA8LSBvcHRpbShwYXI9aW5pdC5wYXJtLnNldiwgZm49c2V2X2xpaywgbWV0aG9kPVwiTC1CRkdTLUJcIikgIyBNYXhpbXVtIGxpa2VsaWhvb2QgZXN0aW1hdGlvbiBmb3IgdGhlIHNldmVyaXR5IG1vZGVsXG5hbHBoYS5lc3QgICAgIDwtIHNldl9tb2QkcGFyWzFdXG50aGV0YS5lc3QgICAgIDwtIHNldl9tb2QkcGFyWzJdIiwic2FtcGxlIjoiIyBQYXJhbWV0ZXIgZXN0aW1hdGVzIGZyb20gdGhlIGZyZXF1ZW5jeSBtb2RlbDogYWxwaGEuZXN0LCB0aGV0YS5lc3RcbiMgUGFyYW1ldGVyIGVzdGltYXRlcyBmcm9tIHRoZSBzZXZlcml0eSAgbW9kZWw6ICAgICByLmVzdCwgIGJldGEuZXN0XG5cbiMgUmFuZG9tIHNhbXBsZXMgZnJvbSBmaXR0ZWQgZnJlcXVlbmN5IGFuZCBzZXZlcml0eSBtb2RlbHNcbmZyZXEgPC0gZXhwcmVzc2lvbihkYXRhID0gID8/KHNpemU9Pz8sIHByb2I9MS8oMSs/PykpKVxuc2V2ICA8LSBleHByZXNzaW9uKGRhdGEgPSAgPz8oc2hhcGU9Pz8sIHNjYWxlPT8/KSlcbiMgVGhlIGFnZ3JlZ2F0ZSBkaXN0cmlidXRpb24gXG5GcyAgIDwtIGFnZ3JlZ2F0ZURpc3QoXCJzaW11bGF0aW9uXCIsIG5iLnNpbXVsID0gMTAwMCwgbW9kZWwuZnJlcSA9ID8/LCBtb2RlbC5zZXYgPSA/PylcbnBsb3QoRnMpXG5saW5lcyhlY2RmKEluc2FtcGxlVG93biR5KSwgIGNvbD1cImJsdWVcIilcbmxlZ2VuZChcImJvdHRvbXJpZ2h0XCIsIGxlZ2VuZCA9IGMoXCJTaW11bGF0aW9uXCIsIFwiRW1waXJpY2FsXCIpLCBjb2w9YyhcImJsYWNrXCIsXCJibHVlXCIpLCBsdHk9YygxLDIpLCBwY2g9YygxLCAxOSkpIiwic29sdXRpb24iOiIjIFBhcmFtZXRlciBlc3RpbWF0ZXMgZnJvbSB0aGUgZnJlcXVlbmN5IG1vZGVsOiBhbHBoYS5lc3QsIHRoZXRhLmVzdFxuIyBQYXJhbWV0ZXIgZXN0aW1hdGVzIGZyb20gdGhlIHNldmVyaXR5ICBtb2RlbDogICAgIHIuZXN0LCAgYmV0YS5lc3RcblxuIyBSYW5kb20gc2FtcGxlcyBmcm9tIGZpdHRlZCBmcmVxdWVuY3kgYW5kIHNldmVyaXR5IG1vZGVsc1xuZnJlcSA8LSBleHByZXNzaW9uKGRhdGEgPSAgcm5iaW5vbShzaXplPXIuZXN0LCBwcm9iPTEvKDErYmV0YS5lc3QpKSlcbnNldiAgPC0gZXhwcmVzc2lvbihkYXRhID0gIHJsb21heChzaGFwZT1hbHBoYS5lc3QsIHNjYWxlPXRoZXRhLmVzdCkpXG4jIFRoZSBhZ2dyZWdhdGUgZGlzdHJpYnV0aW9uIFxuRnMgICA8LSBhZ2dyZWdhdGVEaXN0KFwic2ltdWxhdGlvblwiLCBuYi5zaW11bCA9IDEwMDAsIG1vZGVsLmZyZXEgPSBmcmVxLCBtb2RlbC5zZXYgPSBzZXYpXG5wbG90KEZzKVxubGluZXMoZWNkZihJbnNhbXBsZVRvd24keSksICBjb2w9XCJibHVlXCIpXG5sZWdlbmQoXCJib3R0b21yaWdodFwiLCBsZWdlbmQgPSBjKFwiU2ltdWxhdGlvblwiLCBcIkVtcGlyaWNhbFwiKSwgY29sPWMoXCJibGFja1wiLFwiYmx1ZVwiKSwgbHR5PWMoMSwyKSwgcGNoPWMoMSwgMTkpKSIsInNjdCI6IkZzbXNnIDwtIFwiRGlkIHlvdSBjb3JyZWN0bHkgc3BlY2lmeSB0aGUgb2JqZWN0IGBGc2A/XCJcbmV4KCkgJT4lIGNoZWNrX29iamVjdChcIkZzXCIsIHVuZGVmaW5lZF9tc2cgPSBcIk1ha2Ugc3VyZSB0byBub3QgcmVtb3ZlIGBGc2AhXCIpICU+JSBjaGVja19lcXVhbChpbmNvcnJlY3RfbXNnPUZzbXNnKVxuZnJlcW1zZyA8LSBcIkRpZCB5b3UgY29ycmVjdGx5IHNwZWNpZnkgdGhlIG9iamVjdCBgZnJlcWA/XCJcbmV4KCkgJT4lIGNoZWNrX29iamVjdChcImZyZXFcIiwgdW5kZWZpbmVkX21zZyA9IFwiTWFrZSBzdXJlIHRvIG5vdCByZW1vdmUgYGZyZXFgIVwiKSAlPiUgY2hlY2tfZXF1YWwoaW5jb3JyZWN0X21zZz1mcmVxbXNnKVxuc2V2bXNnIDwtIFwiRGlkIHlvdSBjb3JyZWN0bHkgc3BlY2lmeSB0aGUgb2JqZWN0IGBzZXZgP1wiXG5leCgpICU+JSBjaGVja19vYmplY3QoXCJzZXZcIiwgdW5kZWZpbmVkX21zZyA9IFwiTWFrZSBzdXJlIHRvIG5vdCByZW1vdmUgYHNldmAhXCIpICU+JSBjaGVja19lcXVhbChpbmNvcnJlY3RfbXNnPXNldm1zZylcbnN1Y2Nlc3NfbXNnKFwiR29vZCBqb2IhIFRoaXMgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSBzaW11bGF0aW9uIHRvIGNhbGN1bGF0ZSBhIGNvbXBsaWNhdGVkIChkaXN0cmlidXRpb24pIGZ1bmN0aW9uLiBJdCBpcyBhbiBpbXBvcnRhbnQgdGFzayBpbiBvcmRlciB0byB2aXN1YWxpemUgdGhlIGRpc3RyaWJ1dGlvbiBvZiBjb21wb3VuZCBsb3NzZXMgYW5kIG1ha2Ugc3Vic2VxdWVudCBkZWNpc2lvbnMuXCIpIiwiaGludCI6IldlIHNob3VsZCB1c2UgdGhlIGVzdGltYXRlZCBwYXJhbWV0ZXJzIGZyb20gdGhlIGZyZXF1ZW5jeSBhbmQgc2V2ZXJpdHkgZGlzdHJpYnV0aW9ucyBpbiBjYWxjdWxhdGlvbiBvZiB0aGUgYWdncmVnYXRlIGNsYWltIGFtb3VudCBkaXN0cmlidXRpb24uIn0=

5.5 Tweedie Distribution

In this section, we learn how to:

  • Construct the Tweedie distribution from a collective risk model.
  • Establish the Tweedie distribution as a member of the exponential family of distributions.
  • Fit Tweedie distribution as a generalized linear model.

Video: Tweedie Distribution

Overheads: Tweedie Distribution (Click Tab to View)

Hide
Hide
Hide
Hide
Hide

5.5.1 Exercise. Fitting a Tweedie Distribution

Assignment Text

In this assignment, we fit a Tweedie model for a collective risk model using observed compound losses in LGPIF data with R. Unlike the previous tutorials that required separate model fitting for the frequency and severity components, use of the Tweedie distribution enables us to fit a collective risk model in a single step.

Instructions

  • Restrict the sample to the subset of towns and identify the total claim severity as a global variable \(S\).
  • Construct a function to determine the negative log-likelihood. Do this based on the hybrid probability mass/density function dtweedie(). This is a built-in function from R library tweedie .
  • From the fitted Tweedie model via optim(), extract the estimated mu, phi, and p.
  • After estimating the parameters of the Tweedie model, plot the empirical quantiles against the quantiles from the fitted model. Note that we generate the fitted quantiles via qtweedie() and the estimated Tweedie parameters.


eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6Ikluc2FtcGxlIDwtIHJlYWQuY3N2KFwiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL09wZW5BY3RUZXh0cy9MREFDb3Vyc2UxL21haW4vRGF0YS9JbnNhbXBsZS5jc3ZcIiwgaGVhZGVyPVQsIG5hLnN0cmluZ3M9YyhcIi5cIiksIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UpXG5saWJyYXJ5KGxtZTQpXG5cbnNvdXJjZShcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9PcGVuQWN0VGV4dHMvTERBQ291cnNlMS9tYWluL1JDb2RlL1R3ZWVkaWVTb3VyY2VDb2RlLlJtZFwiKSIsInNhbXBsZSI6Ikluc2FtcGxlVG93biA8LSBzdWJzZXQoSW5zYW1wbGUsIFR5cGVUb3duPT0xKVxuUyA8LSA/PyR5XG4jIFRoZSBuZWdhdGl2ZSBMb2cgLSBsaWtlbGlob29kXG5jb21wbG9zc19saWsgPC0gZnVuY3Rpb24ocGFybSkge1xuICBtdSAgICA8LSBwYXJtWzFdXG4gIHBoaSAgIDwtIHBhcm1bMl1cbiAgcCAgICAgPC0gcGFybVszXVxuICBsaWsgIDwtIC1zdW0oIGxvZyhkdHdlZWRpZShTLCBtdT1tdSwgcGhpPXBoaSwgcG93ZXI9ID8/KSkgKVxuICByZXR1cm4obGlrKSB9XG5pbml0LnBhcm0uY29tcGxvc3MgPC0gYyggbWVhbihTKSwgMzAwLCAxLjUpICAgICMgaW5pdGlhbCBlc3RpbWF0ZXMgXG4jIE1heGltdW0gbGlrZWxpaG9vZCBlc3RpbWF0aW9uIGZvciB0aGUgY29tcG91bmQgbG9zcyBtb2RlbFxuY29tcGxvc3NfbW9kIDwtIG9wdGltKHBhcj0/PywgIGZuPT8/LCBtZXRob2Q9XCJMLUJGR1MtQlwiKSBcblxubXUuZXN0ICA8LSBjb21wbG9zc19tb2QkcGFyWzFdXG5waGkuZXN0IDwtIGNvbXBsb3NzX21vZCQ/P1xucC5lc3QgICA8LSBjb21wbG9zc19tb2QkPz9cblxucGN0IDwtIHNlcSgwLjAxLDAuOTksMC4wMSlcbnBsb3QocXR3ZWVkaWUocGN0LCBtdT0/PywgcGhpPT8/LCBwb3dlcj1wLmVzdCkgLHF1YW50aWxlKEluc2FtcGxlVG93biR5LCBwcm9icz1wY3QpLCB4bGFiPVwiRml0dGVkIFF1YW50aWxlXCIsIHlsYWI9XCJFbXBpcmljYWwgUXVhbnRpbGVcIiwgeGxpbT1jKDAsNTAwMDApLCB5bGltPWMoMCw1MDAwMCkpXG5hYmxpbmUoMCwxKSIsInNvbHV0aW9uIjoiSW5zYW1wbGVUb3duIDwtIHN1YnNldChJbnNhbXBsZSwgVHlwZVRvd249PTEpXG5TIDwtIEluc2FtcGxlVG93biR5XG4jIFRoZSBuZWdhdGl2ZSBMb2cgLSBsaWtlbGlob29kXG5jb21wbG9zc19saWsgPC0gZnVuY3Rpb24ocGFybSkge1xuICBtdSAgICA8LSBwYXJtWzFdXG4gIHBoaSAgIDwtIHBhcm1bMl1cbiAgcCAgICAgPC0gcGFybVszXVxuICBsaWsgIDwtIC1zdW0oIGxvZyhkdHdlZWRpZShTLCBtdT1tdSwgcGhpPXBoaSwgcG93ZXI9cCkpIClcbiAgcmV0dXJuKGxpaykgfVxuaW5pdC5wYXJtLmNvbXBsb3NzIDwtIGMoIG1lYW4oUyksIDMwMCwgMS41KSAgICAjIGluaXRpYWwgZXN0aW1hdGVzIFxuIyBNYXhpbXVtIGxpa2VsaWhvb2QgZXN0aW1hdGlvbiBmb3IgdGhlIGNvbXBvdW5kIGxvc3MgbW9kZWxcbmNvbXBsb3NzX21vZCA8LSBvcHRpbShwYXI9aW5pdC5wYXJtLmNvbXBsb3NzLCBmbj1jb21wbG9zc19saWssIG1ldGhvZD1cIkNHXCIpIFxubXUuZXN0ICA8LSBjb21wbG9zc19tb2QkcGFyWzFdXG5waGkuZXN0IDwtIGNvbXBsb3NzX21vZCRwYXJbMl1cbnAuZXN0ICAgPC0gY29tcGxvc3NfbW9kJHBhclszXVxuXG5wY3QgPC0gc2VxKDAuMDEsMC45OSwwLjAxKVxucGxvdChxdHdlZWRpZShwY3QsIG11PW11LmVzdCwgcGhpPXBoaS5lc3QsIHBvd2VyPXAuZXN0KSAscXVhbnRpbGUoSW5zYW1wbGVUb3duJHksIHByb2JzPXBjdCksIHhsYWI9XCJGaXR0ZWQgUXVhbnRpbGVcIiwgeWxhYj1cIkVtcGlyaWNhbCBRdWFudGlsZVwiLCB4bGltPWMoMCw1MDAwMCksIHlsaW09YygwLDUwMDAwKSlcbmFibGluZSgwLDEpIiwic2N0IjoiU21zZyA8LSBcIkRpZCB5b3UgY29ycmVjdGx5IHNwZWNpZnkgdGhlIG9iamVjdCBgU2A/XCJcbmV4KCkgJT4lIGNoZWNrX29iamVjdChcIlNcIiwgdW5kZWZpbmVkX21zZyA9IFwiTWFrZSBzdXJlIHRvIG5vdCByZW1vdmUgYFNgIVwiKSAlPiUgY2hlY2tfZXF1YWwoaW5jb3JyZWN0X21zZz1TbXNnKVxuY29tcGxvc3NfbW9kbXNnIDwtIFwiRGlkIHlvdSBjb3JyZWN0bHkgc3BlY2lmeSB0aGUgb2JqZWN0IGBjb21wbG9zc19tb2RgP1wiXG5leCgpICU+JSBjaGVja19vYmplY3QoXCJjb21wbG9zc19tb2RcIiwgdW5kZWZpbmVkX21zZyA9IFwiTWFrZSBzdXJlIHRvIG5vdCByZW1vdmUgYGNvbXBsb3NzX21vZGAhXCIpICU+JSBjaGVja19lcXVhbChpbmNvcnJlY3RfbXNnPWNvbXBsb3NzX21vZG1zZylcbnAuZXN0bXNnIDwtIFwiRGlkIHlvdSBjb3JyZWN0bHkgc3BlY2lmeSB0aGUgb2JqZWN0IGBwLmVzdGA/XCJcbmV4KCkgJT4lIGNoZWNrX29iamVjdChcInAuZXN0XCIsIHVuZGVmaW5lZF9tc2cgPSBcIk1ha2Ugc3VyZSB0byBub3QgcmVtb3ZlIGBwLmVzdGAhXCIpICU+JSBjaGVja19lcXVhbChpbmNvcnJlY3RfbXNnPXAuZXN0bXNnKVxuc3VjY2Vzc19tc2coXCJMYXN0IHR1dG9yaWFsIGV4ZXJjaXNlLiBXZWxsIGRvbmUhIENvbXBhcmUgdG8gdGhlIG1vZGVsIGNvbnN0cnVjdGVkIGluIHR3byBwYXJ0cywgdGhlIFR3ZWVkaWUgaGFzIGZldyBwYXJhbWV0ZXJzLiBUaGlzIG1lYW5zIGl0IG1heSBub3QgZml0IGFzIHdlbGwgZm9yIHNvbWUgZGF0YXNldHMsIGVzcGVjaWFsbHkgdGhvc2VzIHdpdGggbG9uZ2VyIHRhaWxzLiBIb3dldmVyLCB0aGUgZmV3IHBhcmFtZXRlcnMgbWVhbnMgdGhhdCBpdCBpcyBlYXNpZXIgdG8gaW50cmVwcmV0LiBGdXJ0aGVyLCB0aGlzIHNpbXBsaWNpdHkgb2YgcGFyYW1ldGVycyBjYW4gYmVjb21lIHZlcnkgaW1wb3J0YW50IHdoZW4gaW50cm9kdWNpbmcgY292YXJpYXRlcy9yYXRpbmcgZmFjdG9ycyBpbnRvIHRoZSBtb2RlbGluZyBwcm9jZXNzLlwiKSIsImhpbnQiOiJGb3IgVHdlZWRpZSBkaXN0cmlidXRpb24sIHdlIGVzdGltYXRlIHRocmVlIHBhcmFtZXRlcnMgKG11LCBwaGksIHApIHRoYXQgZXhwbGFpbiB0aGUgb3ZlcmFsIG1lYW4sIGRpc3BlcnNpb24sIGFuZCBzaGFwZSBvZiB0aGUgZGlzdHJpYnV0aW9uLiJ9

5.6 Effects of Coverage Modifications


In this section, we learn how to:

  • Examine the impact of aggregate deductible on the aggregate loss.
  • Examine the effect of per-occurrence deductible on frequency and severity components in the aggregate loss.

Video: Effects of Coverage Modifications

Overheads: Effects of Coverage Modifications (Click Tab to View)

Hide
Hide
Hide
Hide
Hide

Contributors

  • Authors. Himchan Jeong, Simon Fraser University, and Peng Shi, University of Wisconsin-Madison, are the principal authors of the initial version of this chapter.
  • Chapter Maintainers. Please contact Himchan and/or Jed at for chapter comments and suggested improvements.