Intro

๋‘ ๋‹จ๊ณ„ ์ฐจ์ด-์ฐจ์ด(two stage Difference-in-Differences, ์ดํ•˜ 2S-DID) ๋ถ„์„์€ ํ†ต๊ณ„ ๋ชจ๋ธ์˜ ํ•œ ํ˜•ํƒœ๋กœ์„œ, ๋ณต์žกํ•œ ์ƒํ™ฉ์—์„œ ์ฒ˜๋ฆฌ ํšจ๊ณผ๋ฅผ ์ถ”์ •ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ์ฐจ์ด-์ฐจ์ด(DID) ๋ชจ๋ธ์€ ์ฒ˜๋ฆฌ ๊ทธ๋ฃน๊ณผ ๋Œ€์กฐ ๊ทธ๋ฃน ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋น„๊ตํ•˜์—ฌ ์ฒ˜๋ฆฌ์˜ ํšจ๊ณผ๋ฅผ ์ถ”์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๋•Œ๋•Œ๋กœ ์—ฐ๊ตฌ์ž๋Š” ์ฒ˜๋ฆฌ์˜ ํšจ๊ณผ๊ฐ€ ๋‹ค๋ฅธ ์š”์ธ์— ์˜ํ•ด ์ค‘๊ฐœ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ดํ•ดํ•˜๊ธฐ๋ฅผ ์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ ๋‘ ๋‹จ๊ณ„ DID ๋ถ„์„์ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„: ์—ฌ๊ธฐ์„œ ์—ฐ๊ตฌ์ž๋Š” ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ(์˜ˆ: ๊ต์œก ํ”„๋กœ๊ทธ๋žจ์˜ ์ฐธ์—ฌ)๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ์œ„ํ•œ ํšŒ๊ท€ ๋ชจ๋ธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณต๋ณ€๋Ÿ‰์„ ํฌํ•จํ•˜์—ฌ ํ•ด๋‹น ๊ฒฐ๊ณผ๊ฐ€ ์ฒ˜๋ฆฌ ์—ฌ๋ถ€(์˜ˆ: ์ •์ฑ… ๋„์ž…)์— ์–ด๋–ป๊ฒŒ ์˜์กดํ•˜๋Š”์ง€๋ฅผ ์ถ”์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„: ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ์–ป์€ ์˜ˆ์ธก๋œ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ๋˜ ๋‹ค๋ฅธ ํšŒ๊ท€ ๋ชจ๋ธ์„ ํ†ตํ•ด ์ตœ์ข… ๊ด€์‹ฌ ์žˆ๋Š” ๊ฒฐ๊ณผ(์˜ˆ: ์ž„๊ธˆ)์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ์˜ ํšจ๊ณผ๋ฅผ ์ถ”์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์˜ ์˜ˆ์ธก๊ฐ’์„ ๋…๋ฆฝ ๋ณ€์ˆ˜๋กœ ํฌํ•จํ•˜์—ฌ, ์ฒ˜๋ฆฌ๊ฐ€ ์ตœ์ข… ๊ฒฐ๊ณผ์— ๋ฏธ์น˜๋Š” ์ง์ ‘์ ์ธ ํšจ๊ณผ๋ฅผ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค.

2S-DID๋Š” ํŠนํžˆ ์ฒ˜๋ฆฌ๊ฐ€ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ํŠน์ • ์ฒ˜๋ฆฌ๊ฐ€ ์˜ˆ์ƒ๋œ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ์ตœ์ข… ๊ฒฐ๊ณผ์— ๋ฏธ์น˜๋Š” ์ด์ฒด์ ์ธ ํšจ๊ณผ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ตœ์ € ์ž„๊ธˆ ์ธ์ƒ์ด ๋…ธ๋™ ์‹œ์žฅ ์ฐธ์—ฌ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ , ์ด๊ฒƒ์ด ๋‹ค์‹œ ์ž„๊ธˆ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋…ธ๋™ ์‹œ์žฅ ์ฐธ์—ฌ๋Š” ์ค‘๊ฐ„ ๊ฒฐ๊ณผ์ด๋ฉฐ, ์ž„๊ธˆ์€ ์ตœ์ข… ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๋ถ„์„์€ ๋ฐ์ดํ„ฐ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋ฉด๋ฐ€ํžˆ ํŒŒ์•…ํ•˜๊ณ , ๋‹ค์–‘ํ•œ ๊ฐ€์ •๋“ค์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด ๊ฐ€์ •๋“ค์ด ์ถฉ์กฑ๋˜์ง€ ์•Š์œผ๋ฉด, ์ถ”์ •๋œ ํšจ๊ณผ๋Š” ํŽธํ–ฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Source

did2

Model

\[ y_{it} = \mu_{i} + \mu_{t} + \sum_{k=-L}^{-2} \tau^{k} D_{it}^{k} + \sum_{k=1}^{K} \tau^{k} D_{it}^{k} + \varepsilon_{it} \]

๋ชจ๋ธ์— ๊ด€ํ•ด ์ƒ์„ธํžˆ ๋ด…์‹œ๋‹ค.

  1. ๋‘ ๋ฐฉํ–ฅ ๊ณ ์ • ํšจ๊ณผ(TWFE): ์ด๊ฒƒ์€ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ณ€ํ•˜๋Š” ์š”์†Œ์™€ ๊ฐ ๋‹จ์œ„(์˜ˆ: ๊ฐœ์ธ, ๊ธฐ์—…, ์ง€์—ญ ๋“ฑ)์˜ ํŠน์„ฑ์„ ๋™์‹œ์— ํ†ต์ œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ๋ชจ๋ธ์˜ ์‹์—์„œ \(\mu_i\)๋Š” ๊ฐ ๋‹จ์œ„์˜ ๊ณ ์ • ํšจ๊ณผ๋ฅผ, \(\mu_t\)๋Š” ๊ฐ ์‹œ๊ฐ„์˜ ๊ณ ์ • ํšจ๊ณผ๋ฅผ, \(D_i\)๋Š” ์ฒ˜๋ฆฌ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, \(\varepsilon_{it}\)๋Š” ์˜ค์ฐจ ํ•ญ์ž…๋‹ˆ๋‹ค.

  2. ๋™์  ์ด๋ฒคํŠธ ์Šคํ„ฐ๋”” ๋ชจ๋ธ: ์ด ๋ชจ๋ธ์€ ์ฒ˜๋ฆฌ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „๊ณผ ํ›„์˜ ์—ฌ๋Ÿฌ ์‹œ์ ์„ ํฌํ•จํ•ด์„œ ์ฒ˜๋ฆฌ ํšจ๊ณผ๋ฅผ ์ถ”์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ k๋Š” ์‹œ๊ฐ„์˜ ํŠน์ • ์ง€์ ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ฒ˜๋ฆฌ ์‹œ์ž‘์œผ๋กœ๋ถ€ํ„ฐ์˜ ๋ฆฌ๋“œ์™€ ๋ž˜๊ทธ(์ฆ‰, ์•ž๋’ค ์‹œ๊ฐ„๋Œ€)๋ฅผ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ชจํ˜•์—์„œ๋Š” ์ผ๋ฐ˜ ์ตœ์†Œ ์ œ๊ณฑ๋ฒ•(Ordinary Least Squares, OLS)์œผ๋กœ ์ด๋Ÿฐ ๋ชจ๋ธ์„ ์ถ”์ •ํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ์„ ๊ณ ๋ คํ•ด ๋ณด์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, ์ฒ˜๋ฆฌ ํšจ๊ณผ์˜ ์ด์งˆ์„ฑ์ด ํด ๋•Œ, ํ‰๊ท  ์ฒ˜๋ฆฌ ํšจ๊ณผ๋ฅผ ์ž˜๋ชป ์ถ”์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ ๊ทธ๋ฃน์—์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์ด ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ํ”„๋ฆฌ์Šˆ-์›Œ-๋Ÿฌ๋ฒจ(FWL: Frisch-Waugh-Lovell) ์ •๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ณ ์ • ํšจ๊ณผ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ฒ˜๋ฆฌ ํšจ๊ณผ๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์•˜์„ ์ƒํ™ฉ์„ โ€™์žฌ๊ตฌ์„ฑโ€™ํ•˜์—ฌ, ์ฒ˜๋ฆฌ ํšจ๊ณผ์˜ ์ถ”์ •์น˜๊ฐ€ ์‹ค์ œ ํ†ต์ œ ๊ทธ๋ฃน์˜ ๊ฒฐ๊ณผ์™€ ๋น„๊ต๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ก ์ ์œผ๋กœ๋Š” ์ฒ˜๋ฆฌ๋ฅผ ๋ฐ›์ง€ ์•Š์€ ์ƒํƒœ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์ถ”์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์‹ค์ œ ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ์—์„œ ์ด๋ฅผ ๋บ€ ๊ฐ’์ด ์ฒ˜๋ฆฌ์˜ ์ˆœ์ˆ˜ํ•œ ํšจ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

did2s

์„ค์น˜

install.packages('did2s')
#or
#remotes::install_github("kylebutts/did2s")

์œˆ๋„์šฐ ์‚ฌ์šฉ์ž ์—ฌ๋Ÿฌ๋ถ„ Rtools๋ฅผ ๋จผ์ € ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰ํ•ด์„œ ์„ค์น˜ํ•˜์„ธ์š”.

์˜ˆ

library(did2s)
๊ฒฝ๊ณ : ํŒจํ‚ค์ง€ โ€˜did2sโ€™๋Š” R ๋ฒ„์ „ 4.2.3์—์„œ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹คํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ๋กœ๋”ฉ์ค‘์ž…๋‹ˆ๋‹ค: fixest
did2s (v1.0.2). For more information on the methodology, visit <https://www.kylebutts.github.io/did2s>

To cite did2s in publications use:

  Butts, Kyle (2021).  did2s: Two-Stage Difference-in-Differences Following Gardner (2021). R
  package version 1.0.2.

LaTeX ์‚ฌ์šฉ์ž๋“ค์„ ์œ„ํ•œ BibTeX ํ•ญ๋ชฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค

  @Manual{,
    title = {did2s: Two-Stage Difference-in-Differences Following Gardner (2021)},
    author = {Kyle Butts},
    year = {2021},
    url = {https://github.com/kylebutts/did2s/},
  }
library(ggplot2)
library(dplyr)
data('df_het')
head(df_het)

df_het ๋ฐ์ดํ„ฐ๋ฅผ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์„ค๋ช…ํ•˜๋Š” ๊ฐ€์ƒ ๋ฐ์ดํ„ฐ์…‹์€ ํŒจ๋„ ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋‘ ๊ฐœ์˜ ์ฒ˜๋ฆฌ ๊ทธ๋ฃน๊ณผ ์ด์งˆ์ ์ธ ํšจ๊ณผ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์—๋Š” ์ด 31,000๊ฐœ์˜ ํ–‰๊ณผ 15๊ฐœ์˜ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:

  • unit: ํŒจ๋„ ๋ฐ์ดํ„ฐ์—์„œ์˜ ๊ฐœ๋ณ„ ๋Œ€์ƒ(์˜ˆ: ์‚ฌ๋žŒ, ๊ธฐ์—… ๋“ฑ)์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • year: ํŒจ๋„ ๋ฐ์ดํ„ฐ์—์„œ์˜ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ณดํ†ต ์—ฐ๋„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • g: ์ฒ˜๋ฆฌ๊ฐ€ ์‹œ์ž‘๋˜๋Š” ์—ฐ๋„์ž…๋‹ˆ๋‹ค.
  • dep_var: ๊ฒฐ๊ณผ ๋ณ€์ˆ˜๋กœ, ๋ถ„์„์˜ ์ฃผ์š” ๊ด€์‹ฌ์‚ฌ์ธ ๋ณ€์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • treat: ์ฒ˜๋ฆฌ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฐธ/๊ฑฐ์ง“ ๋ณ€์ˆ˜๋กœ, ์ฒ˜๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ์ ์šฉ๋œ ์‹œ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • rel_year: ์ฒ˜๋ฆฌ ์‹œ์ž‘์— ๋Œ€ํ•œ ์ƒ๋Œ€์ ์ธ ์—ฐ๋„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. โ€™Infโ€™๋Š” ์ ˆ๋Œ€ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • rel_year_binned: ์ฒ˜๋ฆฌ ์‹œ์ž‘์— ๋Œ€ํ•œ ์ƒ๋Œ€์ ์ธ ์—ฐ๋„๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ, -6 ์ดํ•˜ ๋ฐ 6 ์ด์ƒ์˜ ๊ฐ’์€ ๋ฒ”์ฃผํ™”๋˜์–ด ์ง‘๊ณ„๋ฉ๋‹ˆ๋‹ค.
  • unit_fe: ๊ฐœ๋ณ„ ๋Œ€์ƒ์— ๋Œ€ํ•œ ๊ณ ์ • ํšจ๊ณผ(Fixed Effect)์ž…๋‹ˆ๋‹ค.
  • year_fe: ์—ฐ๋„์— ๋Œ€ํ•œ ๊ณ ์ • ํšจ๊ณผ์ž…๋‹ˆ๋‹ค.
  • error: ๋žœ๋ค ์˜ค๋ฅ˜ ๊ตฌ์„ฑ ์š”์†Œ๋กœ, ๋ชจ๋ธ์— ๋ฌด์ž‘์œ„์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • te: ์ฒ˜๋ฆฌ์˜ ์ •์ (๋ณ€ํ•˜์ง€ ์•Š๋Š”) ํšจ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.
  • te_dynamic: ์ฒ˜๋ฆฌ์˜ ๋™์ (๋ณ€ํ™”ํ•˜๋Š”) ํšจ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.
  • state: ๊ฐœ๋ณ„ ๋Œ€์ƒ์ด ์†ํ•œ ์ฃผ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • group: ๊ทธ๋ฃน์˜ ๋ฌธ์ž์—ด ์ด๋ฆ„์œผ๋กœ, ๋ฐ์ดํ„ฐ๊ฐ€ ์†ํ•œ ๋ฒ”์ฃผ๋‚˜ ์ง‘๋‹จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์ด ๋ฐ์ดํ„ฐ๋Š” ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฐœ์ธ์ด๋‚˜ ๋‹จ์œ„๋“ค์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌ(์˜ˆ: ์ •์ฑ… ๋ณ€๊ฒฝ, ํ”„๋กœ๊ทธ๋žจ ๋„์ž… ๋“ฑ)๊ฐ€ ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์ณค๋Š”์ง€๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ฐ ๋ณ€์ˆ˜๋“ค์€ ์ฒ˜๋ฆฌ์˜ ์˜ํ–ฅ์„ ํ‰๊ฐ€ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ํ•ด์„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ์ฐจ์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์…‹์˜ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ์—ฐ๊ตฌ์ž๋Š” ์ฒ˜๋ฆฌ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „๊ณผ ํ›„์˜ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•˜๊ณ , ์ฒ˜๋ฆฌ์˜ ์˜ํ–ฅ์ด ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์–ด๋–ป๊ฒŒ ๋ณ€ํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ํšจ๊ณผ๊ฐ€ ๊ฐœ๋ณ„ ๋Œ€์ƒ์ด๋‚˜ ๊ทธ๋ฃน๋งˆ๋‹ค ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€๋ฅผ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

df_het %>% 
  group_by(year,g) %>% 
  summarize(outcome = mean(dep_var)) %>% 
  ungroup() %>% 
  ggplot(aes(x=year,y=outcome,col=as.factor(g))) +
  geom_point() +
  geom_line() + 
  theme_bw()
`summarise()` has grouped output by 'year'. You can override using the `.groups` argument.

์ฒ˜๋ฆฌ๊ฐ€ ์‹œ์ž‘๋œ 2000๋…„๊ณผ 2010๋…„์— ๋”ฐ๋ผ ๊ธฐ์šธ๊ธฐ์˜ ๋ณ€ํ™”๊ฐ€ ๊ธ‰๊ฒฉํžˆ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Estimate Two-stage Difference-in-Differences

Static DID

โ€œ์ •์  ์ฐจ์ด-์ฐจ์ด ์ถ”์ •(static DiD estimation)โ€์ด๋ž€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ํšจ๊ณผ๋ฅผ ๊ฐ€์ง„ ์ฐจ์ด-์ฐจ์ด ๋ชจ๋ธ์„ ์ถ”์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์„ค๋ช…๋œ ๋‚ด์šฉ์— ๋”ฐ๋ฅด๋ฉด, R์˜ fixest ํŒจํ‚ค์ง€์˜ ๊ธฐ๋Šฅ๋“ค์„ ํ™œ์šฉํ•ด ์ด ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ํฌ์ธํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. ๊ณ ์ • ํšจ๊ณผ ๋ช…์‹œ: fixest::feols ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด | ๊ธฐํ˜ธ๋ฅผ ์ด์šฉํ•ด ๊ณ ์ • ํšจ๊ณผ๋ฅผ ์†์‰ฝ๊ฒŒ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ ์ • ํšจ๊ณผ๋Š” ์‹œ๊ฐ„์ด๋‚˜ ๊ฐœ์ฒด ๋“ฑ์— ๋”ฐ๋ฅธ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ํŠน์„ฑ์„ ๋ชจ๋ธ์—์„œ ํ†ต์ œํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ฐœ์„ ๋œ ์š”์ธ ๋ณ€์ˆ˜ ์ง€์›: fixest::i๋Š” ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜๋ฅผ ๋” ์ž˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋ฉฐ, ์ด๋Š” ๋ชจ๋ธ์˜ ํ•ด์„์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. did2s ํ•จ์ˆ˜์™€ fixest ๊ฐ์ฒด: did2s ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ถ”์ •ํ•˜๋ฉด, fixest ํŒจํ‚ค์ง€์˜ ์ถ”์ • ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” fixest::esttable (์ถ”์ • ๊ฒฐ๊ณผ๋ฅผ ํ‘œ๋กœ ๋‚˜ํƒ€๋‚ด๊ธฐ), fixest::coefplot (๊ณ„์ˆ˜๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ด๊ธฐ), ๊ทธ๋ฆฌ๊ณ  fixest::iplot (์ƒํ˜ธ์ž‘์šฉ ํ•ญ์„ ํฌํ•จํ•œ ๋ชจ๋ธ์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ด๊ธฐ) ๊ฐ™์€ fixest ํŒจํ‚ค์ง€์˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋“ค๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด, ๊ณ ์ • ํšจ๊ณผ๋ฅผ ํฌํ•จํ•œ ์ •์  DiD ๋ชจ๋ธ์„ ์ถ”์ •ํ•˜๊ณ , ์ด ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์‹œ๊ฐํ™”ํ•˜๊ฑฐ๋‚˜ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ณผ์ •์ด fixest ํŒจํ‚ค์ง€ ์•ˆ์—์„œ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๋ถ„์„ ๊ณผ์ •์ด ํ†ตํ•ฉ๋˜๊ณ  ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

static = did2s(
  df_het, #data
  yname = 'dep_var',
  first_stage = ~ 0 | state + year,
  second_stage = ~ i(treat,ref=FALSE),
  treatment = 'treat',
  cluster_var = 'state'
)
Running Two-stage Difference-in-Differences
 - first stage formula `~ 0 | state + year`
 - second stage formula `~ i(treat, ref = FALSE)`
 - The indicator variable that denotes when treatment is on is `treat`
 - Standard errors will be clustered by `state`

๊ฒฐ๊ณผ๋ฅผ ๋ด…์‹œ๋‹ค.

fixest::esttable(static)
                           static
Dependent Var.:           dep_var
                                 
treat = TRUE    2.152*** (0.0476)
_______________ _________________
S.E. type                  Custom
Observations               46,500
R2                        0.33790
Adj. R2                   0.33790
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

์ถ”์ • ๊ฒฐ๊ณผ๋Š” fixest::esttable ํ•จ์ˆ˜๋กœ ์ถœ๋ ฅ๋˜๋ฉฐ, โ€™treat = TRUEโ€™์˜ ๊ณ„์ˆ˜๋Š” ์ฒ˜๋ฆฌ ํšจ๊ณผ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ถ”์ •๋œ ํšจ๊ณผ๋Š” 2.152๋กœ, ๊ด„ํ˜ธ ์•ˆ์˜ ์ˆซ์ž 0.0476์€ ๊ณ„์ˆ˜์˜ ํ‘œ์ค€ ์˜ค์ฐจ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ณ„ํ‘œ ์„ธ ๊ฐœ๋Š” ์ด ํšจ๊ณผ๊ฐ€ ํ†ต๊ณ„์ ์œผ๋กœ ๋งค์šฐ ์œ ์˜๋ฏธํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค(์ผ๋ฐ˜์ ์œผ๋กœ p-value๊ฐ€ 0.001๋ณด๋‹ค ์ž‘์„ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค).

์ด ๊ฒฐ๊ณผ๋Š” โ€˜treatโ€™ ๋ณ€์ˆ˜๊ฐ€ ์ฐธ์ผ ๋•Œ(์ฆ‰, ์ฒ˜๋ฆฌ๊ฐ€ ์ ์šฉ๋˜์—ˆ์„ ๋•Œ) ์˜ˆ์ƒ๋˜๋Š” ์ข…์† ๋ณ€์ˆ˜ โ€™dep_varโ€™์˜ ๋ณ€ํ™”๋Ÿ‰์ด ์•ฝ 2.152 ๋‹จ์œ„๋ผ๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๋ฉฐ, ์ด ๋ณ€ํ™”๋Ÿ‰์€ ํ†ต๊ณ„์ ์œผ๋กœ ์œ ์˜๋ฏธํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ฒ˜๋ฆฌ(์˜ˆ: ์ •์ฑ…, ํ”„๋กœ๊ทธ๋žจ ๋“ฑ)๊ฐ€ ๊ธ์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์ณค์Œ์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Event study

es <- did2s(df_het,
            yname='dep_var',
            first_stage = ~0|state+year,
            second_stage = ~i(rel_year,ref=c(-1,Inf)),
            treatment = 'treat',
            cluster_var='state')
Running Two-stage Difference-in-Differences
 - first stage formula `~ 0 | state + year`
 - second stage formula `~ i(rel_year, ref = c(-1, Inf))`
 - The indicator variable that denotes when treatment is on is `treat`
 - Standard errors will be clustered by `state`

์ฐธ๊ณ ๋กœ i()๋Š” fixest์— ์žˆ๋Š” ํ•จ์ˆ˜์—์š”. Create or interact variables with, factors๋ผ๋Š” ์ œ๋ชฉ์ด ์žˆ์ง€์š”. rel_year๋ฅผ ๊ฐ๊ฐ์˜ ์š”์ธ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ref๋Š” ์ฐธ์กฐ ๋ฒกํ„ฐ์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ref=TRUE์ด๋ฉด factor_var์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜์—์„œ ๊ธฐ์ค€ ์นดํ…Œ๊ณ ๋ฆฌ ์ˆ˜์ค€์„ ๊ฒฐ์ •ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๊ณ , c(-1,Inf)์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” reference๋ฅผ -1๋ถ€ํ„ฐ ๋ฌดํ•œ๋Œ€๋กœ ์žก๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

fixest::esttable(es)
                                es
Dependent Var.:            dep_var
                                  
rel_year = -20   -0.0793. (0.0461)
rel_year = -19    -0.0271 (0.0532)
rel_year = -18    -0.0272 (0.0486)
rel_year = -17    -0.0336 (0.0428)
rel_year = -16    -0.0558 (0.0529)
rel_year = -15     0.0168 (0.0507)
rel_year = -14    -0.0209 (0.0493)
rel_year = -13    -0.0222 (0.0398)
rel_year = -12     0.0054 (0.0457)
rel_year = -11    -0.0479 (0.0594)
rel_year = -10    -0.0325 (0.0341)
rel_year = -9     -0.0375 (0.0304)
rel_year = -8     -0.0309 (0.0321)
rel_year = -7     -0.0071 (0.0363)
rel_year = -6     -0.0396 (0.0272)
rel_year = -5   -0.0792** (0.0304)
rel_year = -4     -0.0342 (0.0280)
rel_year = -3     -0.0152 (0.0305)
rel_year = -2     -0.0387 (0.0323)
rel_year = 0     1.304*** (0.0561)
rel_year = 1     1.533*** (0.0644)
rel_year = 2     1.597*** (0.0567)
rel_year = 3     1.719*** (0.0606)
rel_year = 4     1.846*** (0.0477)
rel_year = 5     1.991*** (0.0563)
rel_year = 6     2.079*** (0.0643)
rel_year = 7     2.165*** (0.0585)
rel_year = 8     2.259*** (0.0580)
rel_year = 9     2.278*** (0.0533)
rel_year = 10    2.415*** (0.0601)
rel_year = 11    2.456*** (0.0819)
rel_year = 12    2.507*** (0.0797)
rel_year = 13    2.481*** (0.0846)
rel_year = 14    2.626*** (0.0697)
rel_year = 15    2.813*** (0.0827)
rel_year = 16    2.763*** (0.0824)
rel_year = 17    2.811*** (0.0794)
rel_year = 18    2.777*** (0.0818)
rel_year = 19    2.786*** (0.0902)
rel_year = 20    2.815*** (0.0830)
_______________ __________________
S.E. type                   Custom
Observations                46,500
R2                         0.36048
Adj. R2                    0.35994
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

์‹œ๊ฐ์ ์œผ๋กœ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

fixest::iplot(es, 
              main = "Event study: Staggered treatment", 
              xlab = "Relative time to treatment", 
              col = "steelblue", 
              ref.line = -0.5)

# Add the (mean) true effects
true_effects = head(tapply((df_het$te + df_het$te_dynamic), df_het$rel_year, mean), -1)
points(-20:20, true_effects, pch = 20, col = "black")

# Legend
legend(x=-20, y=3, col = c("steelblue", "black"), pch = c(20, 20), 
       legend = c("Two-stage estimate", "True effect"))

๋‚จ์€ ๊ฒƒ๋“ค

Comparison to TWFE๋ฅผ ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค. 2S-DID์™€ ์ „ํ†ต์ ์ธ TWFE ๊ฐ„์˜ ๋ชจ๋ธ ์ถ”์ •์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

twfe = feols(dep_var ~ i(rel_year, ref=c(-1, Inf)) | unit + year, data = df_het)

๊ทธ๋ฆฌ๊ณ  ์•ž์„œ ๊ตฌํ•œ ๊ฒฐ๊ณผ์™€ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

fixest::iplot(list(es, twfe), sep = 0.2, ref.line = -0.5,
      col = c("steelblue", "#82b446"), pt.pch = c(20, 18), 
      xlab = "Relative time to treatment", 
      main = "Event study: Staggered treatment (comparison)")

points(-20:20, true_effects, pch = 21, col = "red")
# Legend
legend(x=-20, y=3, col = c("steelblue", "#82b446","red"), pch = c(20, 18,21), 
       legend = c("Two-stage estimate", "TWFE","True"))

์ฝ”๋“œ ํ•ด์„ค์ž…๋‹ˆ๋‹ค.

  1. TWFE ์ถ”์ •: feols ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด TWFE ๋ชจ๋ธ์„ ์ถ”์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ์€ dep_var (์ข…์† ๋ณ€์ˆ˜)์™€ rel_year (์ฒ˜๋ฆฌ ์‹œ์ž‘ ๋Œ€๋น„ ์ƒ๋Œ€์ ์ธ ์—ฐ๋„)์˜ ๊ด€๊ณ„๋ฅผ ๋ถ„์„ํ•˜๋ฉฐ, ์—ฌ๊ธฐ์„œ -1๊ณผ Inf๋ฅผ ์ฐธ์กฐ ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ถ”์ •์—์„œ๋Š” ๋˜ํ•œ ๊ฐ unit๊ณผ year์— ๋Œ€ํ•œ ๊ณ ์ • ํšจ๊ณผ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” df_het์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

  2. ๊ทธ๋ž˜ํ”„ ํ”Œ๋กœํŒ…: fixest::iplot ํ•จ์ˆ˜๋Š” 2S-DID ๋ชจ๋ธ(es)๊ณผ TWFE ๋ชจ๋ธ(twfe)์˜ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ sep๋Š” ์ถ”์ •์น˜ ๊ฐ„์˜ ์ˆ˜์ง ๊ฐ„๊ฒฉ์„, ref.line์€ ๊ธฐ์ค€์„ ์˜ ์œ„์น˜๋ฅผ, col์€ ์„ ์˜ ์ƒ‰์„, pt.pch๋Š” ํฌ์ธํŠธ ๋งˆ์ปค์˜ ํ˜•ํƒœ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. xlable๊ณผ main์€ ๊ฐ๊ฐ x์ถ• ๋ ˆ์ด๋ธ”๊ณผ ๊ทธ๋ž˜ํ”„์˜ ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค.

  3. ๋ฒ”๋ก€ ์ถ”๊ฐ€: legend ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๊ทธ๋ž˜ํ”„์— ๋ฒ”๋ก€๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฒ”๋ก€๋Š” ๋‘ ์ถ”์ • ๋ฐฉ๋ฒ•์„ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์œ„์น˜์™€ ์ƒ‰์ƒ, ํฌ์ธํŠธ ๋งˆ์ปค๊ฐ€ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

LS0tDQp0aXRsZTogIlR3byBTdGFnZSBEaWZmZXJlbmNlLWluLURpZmZlcmVuY2VzIg0KYXV0aG9yOiDquYDtg5zqsr0sIFBoRC4NCmRhdGU6IDIwMjQtMDQtMTkNCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMgSW50cm8NCg0K65GQIOuLqOqzhCDssKjsnbQt7LCo7J20KHR3byBzdGFnZSBEaWZmZXJlbmNlLWluLURpZmZlcmVuY2VzLCDsnbTtlZggMlMtRElEKSDrtoTshJ3snYAg7Ya16rOEIOuqqOuNuOydmCDtlZwg7ZiV7YOc66Gc7IScLCDrs7XsnqHtlZwg7IOB7Zmp7JeQ7IScIOyymOumrCDtmqjqs7zrpbwg7LaU7KCV7ZWgIOuVjCDsgqzsmqnrkKnri4jri6QuIOq4sOuzuOyggeyduCDssKjsnbQt7LCo7J20KERJRCkg66qo64247J2AIOyymOumrCDqt7jro7nqs7wg64yA7KGwIOq3uOujuSDqsITsnZgg7LCo7J2066W8IOyLnOqwhOyXkCDrlLDrnbwg67mE6rWQ7ZWY7JesIOyymOumrOydmCDtmqjqs7zrpbwg7LaU7KCV7ZWp64uI64ukLiDqt7jrn6zrgpgsIOuVjOuVjOuhnCDsl7DqtazsnpDripQg7LKY66as7J2YIO2aqOqzvOqwgCDri6Trpbgg7JqU7J247JeQIOydmO2VtCDspJHqsJzrkJjripTsp4Ag7Jes67aA66W8IOydtO2VtO2VmOq4sOulvCDsm5DtlaAg7IiYIOyeiOyKteuLiOuLpC4g7J2065+0IOuVjCDrkZAg64uo6rOEIERJRCDrtoTshJ3snbQg7IKs7Jqp65CgIOyImCDsnojsirXri4jri6QuDQoNCioq7LKrIOuyiOynuCDri6jqs4QqKjog7Jes6riw7IScIOyXsOq1rOyekOuKlCDtlZjrgpjsnZgg6rKw6rO8KOyYiDog6rWQ7JyhIO2UhOuhnOq3uOueqOydmCDssLjsl6wp66W8IOyYiOy4oe2VmOq4sCDsnITtlZwg7ZqM6reAIOuqqOuNuOydhCDrp4zrk63ri4jri6QuIOydtCDri6jqs4TripQg7J2867CY7KCB7Jy866GcIOqzteuzgOufieydhCDtj6ztlajtlZjsl6wg7ZW064u5IOqysOqzvOqwgCDsspjrpqwg7Jes67aAKOyYiDog7KCV7LGFIOuPhOyehSnsl5Ag7Ja065a76rKMIOydmOyhtO2VmOuKlOyngOulvCDstpTsoJXtlanri4jri6QuDQoNCioq65GQIOuyiOynuCDri6jqs4QqKjog7LKrIOuyiOynuCDri6jqs4Tsl5DshJwg7Ja77J2AIOyYiOy4oeuQnCDqsrDqs7zrpbwg7IKs7Jqp7ZWY7JesLCDrmJAg64uk66W4IO2ajOq3gCDrqqjrjbjsnYQg7Ya17ZW0IOy1nOyihSDqtIDsi6wg7J6I64qUIOqysOqzvCjsmIg6IOyehOq4iCnsl5Ag64yA7ZWcIOyymOumrOydmCDtmqjqs7zrpbwg7LaU7KCV7ZWp64uI64ukLiDsnbQg64uo6rOE7JeQ7ISc64qUIOyyqyDrsojsp7gg64uo6rOE7J2YIOyYiOy4oeqwkuydhCDrj4Xrpr0g67OA7IiY66GcIO2PrO2VqO2VmOyXrCwg7LKY66as6rCAIOy1nOyihSDqsrDqs7zsl5Ag66+47LmY64qUIOyngeygkeyggeyduCDtmqjqs7zrpbwg7Lih7KCV7ZWp64uI64ukLg0KDQoyUy1ESUTripQg7Yq57Z6IIOyymOumrOqwgCDtlZjrgpjsnZgg6rKw6rO866W8IO2Gte2VtCDqsITsoJHsoIHsnLzroZwg64uk66W4IOqysOqzvOyXkCDsmIHtlqXsnYQg66+47LmgIOuVjCDsnKDsmqntlanri4jri6QuIOydtCDrsKnrspXsnYAg7Yq57KCVIOyymOumrOqwgCDsmIjsg4HrkJwg7KSR6rCEIOqysOqzvOulvCDthrXtlbQg7LWc7KKFIOqysOqzvOyXkCDrr7jsuZjripQg7LSd7LK07KCB7J24IO2aqOqzvOulvCDsnbTtlbTtlaAg7IiYIOyeiOqyjCDtlbTspI3ri4jri6QuIOyYiOulvCDrk6TslrQsIOy1nOyggCDsnoTquIgg7J247IOB7J20IOuFuOuPmSDsi5zsnqUg7LC47Jes66W8IOymneqwgOyLnO2CpOqzoCwg7J206rKD7J20IOuLpOyLnCDsnoTquIjsl5Ag7JiB7Zal7J2EIOuvuOy5oCDsiJgg7J6I7Iq164uI64ukLiDsl6zquLDshJwg64W464+ZIOyLnOyepSDssLjsl6zripQg7KSR6rCEIOqysOqzvOydtOupsCwg7J6E6riI7J2AIOy1nOyihSDqsrDqs7zsnoXri4jri6QuDQoNCuydtOufsCDsooXrpZjsnZgg67aE7ISd7J2AIOuNsOydtO2EsOydmCDshLjrtoAg7IKs7ZWt7J2EIOuptOuwgO2eiCDtjIzslYXtlZjqs6AsIOuLpOyWke2VnCDqsIDsoJXrk6TsnYQg7Lap7KGx7ZWY64qU7KeAIO2ZleyduO2VmOuKlCDqsoPsnbQg7KSR7JqU7ZWp64uI64ukLiDrp4zslb0g7J20IOqwgOygleuTpOydtCDstqnsobHrkJjsp4Ag7JWK7Jy866m0LCDstpTsoJXrkJwg7Zqo6rO864qUIO2OuO2WpeuQoCDsiJgg7J6I7Iq164uI64ukLg0KDQoNCg0KIyMgU291cmNlDQpbZGlkMl0oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL2RpZDJzL3ZpZ25ldHRlcy9Ud28tU3RhZ2UtRGlmZmVyZW5jZS1pbi1EaWZmZXJlbmNlcy5odG1sKQ0KDQojIyBNb2RlbA0KDQokJA0KeV97aXR9ID0gXG11X3tpfSArIFxtdV97dH0gKyBcc3VtX3trPS1MfV57LTJ9IFx0YXVee2t9IERfe2l0fV57a30gKyBcc3VtX3trPTF9XntLfSBcdGF1XntrfSBEX3tpdH1ee2t9ICsgXHZhcmVwc2lsb25fe2l0fQ0KJCQNCg0KDQrrqqjrjbjsl5Ag6rSA7ZW0IOyDgeyEuO2eiCDrtIXsi5zri6QuDQoNCjEuICoq65GQIOuwqe2WpSDqs6DsoJUg7Zqo6rO8KFRXRkUpKio6IOydtOqyg+ydgCDsi5zqsITsl5Ag65Sw6528IOuzgO2VmOuKlCDsmpTshozsmYAg6rCBIOuLqOychCjsmIg6IOqwnOyduCwg6riw7JeFLCDsp4Dsl60g65OxKeydmCDtirnshLHsnYQg64+Z7Iuc7JeQIO2GteygnO2VoCDsiJgg7J6I6rKMIO2VtOyjvOuKlCDrqqjrjbjsnoXri4jri6QuIOuqqOuNuOydmCDsi53sl5DshJwgJFxtdV9pJOuKlCDqsIEg64uo7JyE7J2YIOqzoOyglSDtmqjqs7zrpbwsICRcbXVfdCTripQg6rCBIOyLnOqwhOydmCDqs6DsoJUg7Zqo6rO866W8LCAkRF9pJOuKlCDsspjrpqwg7Jes67aA66W8IOuCmO2DgOuCtOupsCwgJFx2YXJlcHNpbG9uX3tpdH0k64qUIOyYpOywqCDtla3snoXri4jri6QuDQoNCjIuICoq64+Z7KCBIOydtOuypO2KuCDsiqTthLDrlJQg66qo6424Kio6IOydtCDrqqjrjbjsnYAg7LKY66as6rCAIOyLnOyekeuQmOq4sCDsoITqs7wg7ZuE7J2YIOyXrOufrCDsi5zsoJDsnYQg7Y+s7ZWo7ZW07IScIOyymOumrCDtmqjqs7zrpbwg7LaU7KCV7ZWp64uI64ukLiDsl6zquLDshJwgYGtg64qUIOyLnOqwhOydmCDtirnsoJUg7KeA7KCQ7J2EIOuCmO2DgOuCtOupsCwg7LKY66asIOyLnOyekeycvOuhnOu2gO2EsOydmCDrpqzrk5zsmYAg656Y6re4KOymiSwg7JWe65KkIOyLnOqwhOuMgCnrpbwg6rOg66Ck7ZWp64uI64ukLg0KDQrsnbTrn6ztlZwg66qo7ZiV7JeQ7ISc64qUIOydvOuwmCDstZzshowg7KCc6rOx67KVKE9yZGluYXJ5IExlYXN0IFNxdWFyZXMsIE9MUynsnLzroZwg7J2065+wIOuqqOuNuOydhCDstpTsoJXtlaAg65WMIOuwnOyDne2VoCDsiJgg7J6I64qUIOusuOygnOygkOydhCDqs6DroKTtlbQg67O07JWE7JW8IO2VqeuLiOuLpC4g7Yq57Z6ILCDsspjrpqwg7Zqo6rO87J2YIOydtOyniOyEseydtCDtgbQg65WMLCDtj4nqt6Ag7LKY66asIO2aqOqzvOulvCDsnpjrqrsg7LaU7KCV7ZWgIOyImCDsnojri6TripQg6rKD7J6F64uI64ukLiDspoksIOqwgSDqt7jro7nsl5DshJwg7LKY66as6rCAIOuvuOy5mOuKlCDsmIHtlqXsnbQg7ISc66GcIOuLpOultOqyjCDrgpjtg4DrgqAg7IiYIOyeiOyKteuLiOuLpC4NCg0K7J2066W8IO2VtOqysO2VmOuKlCDtlZwg6rCA7KeAIOuwqeuyleydgCDtlITrpqzsiogt7JuMLeufrOuyqChGV0w6IEZyaXNjaC1XYXVnaC1Mb3ZlbGwpIOygleumrOulvCDthrXtlbQg6rOg7KCVIO2aqOqzvOulvCDqs6DroKTtlZjsl6wg7LKY66asIO2aqOqzvOulvCDri6Tsi5wg6rOE7IKw7ZWY64qUIOqyg+yeheuLiOuLpC4g7J20IOuwqeuyleydgCDsspjrpqzrkJjsp4Ag7JWK7JWY7J2EIOyDge2ZqeydhCAn7J6s6rWs7ISxJ+2VmOyXrCwg7LKY66asIO2aqOqzvOydmCDstpTsoJXsuZjqsIAg7Iuk7KCcIO2GteygnCDqt7jro7nsnZgg6rKw6rO87JmAIOu5hOq1kOuQoCDsiJgg7J6I64+E66GdIO2VqeuLiOuLpC4g7J2066Gg7KCB7Jy866Gc64qUIOyymOumrOulvCDrsJvsp4Ag7JWK7J2AIOyDge2DnOydmCDqsrDqs7zrpbwg7J286rSA65CY6rKMIOy2lOygle2VoCDsiJgg7J6I64uk66m0LCDsi6TsoJwg7LKY66as65CcIOqysOqzvOyXkOyEnCDsnbTrpbwg67qAIOqwkuydtCDsspjrpqzsnZgg7Iic7IiY7ZWcIO2aqOqzvOulvCDrgpjtg4Drgrwg6rKD7J6F64uI64ukLg0KDQoNCiMgZGlkMnMNCg0KIyMg7ISk7LmYDQoNCmBgYHtyfQ0KaW5zdGFsbC5wYWNrYWdlcygnZGlkMnMnKQ0KI29yDQojcmVtb3Rlczo6aW5zdGFsbF9naXRodWIoImt5bGVidXR0cy9kaWQycyIpDQpgYGANCg0K7JyI64+E7JqwIOyCrOyaqeyekCDsl6zrn6zrtoQgUnRvb2xz66W8IOuovOyggCDshKTsuZjtlbTslbwg7ZWp64uI64ukLiDqtazquIAg6rKA7IOJ7ZW07IScIOyEpOy5mO2VmOyEuOyalC4NCg0KIyMg7JiIDQoNCmBgYHtyfQ0KbGlicmFyeShkaWQycykNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpgYGANCg0KYGBge3J9DQpkYXRhKCdkZl9oZXQnKQ0KaGVhZChkZl9oZXQpDQpgYGANCmRmX2hldCDrjbDsnbTthLDrpbwg7ISk66qF7ZWY6rKg7Iq164uI64ukLiDsl6zquLDshJwg7ISk66qF7ZWY64qUIOqwgOyDgSDrjbDsnbTthLDshYvsnYAg7Yyo64SQIOuNsOydtO2EsCDtmJXsi53snYQg6rCA7KeA6rOgIOyeiOycvOupsCwg65GQIOqwnOydmCDsspjrpqwg6re466O56rO8IOydtOyniOyggeyduCDtmqjqs7zrpbwg7Y+s7ZWo7ZWY6rOgIOyeiOyKteuLiOuLpC4g642w7J207YSwIO2UhOugiOyehOyXkOuKlCDstJ0gMzEsMDAw6rCc7J2YIO2WieqzvCAxNeqwnOydmCDrs4DsiJjqsIAg7J6I7Iq164uI64ukOg0KDQotIGB1bml0YDog7Yyo64SQIOuNsOydtO2EsOyXkOyEnOydmCDqsJzrs4Qg64yA7IOBKOyYiDog7IKs656MLCDquLDsl4Ug65OxKeydhCDrgpjtg4Drg4Xri4jri6QuDQotIGB5ZWFyYDog7Yyo64SQIOuNsOydtO2EsOyXkOyEnOydmCDsi5zqsITsnYQg64KY7YOA64K066mwLCDrs7TthrUg7Jew64+E66W8IOydmOuvuO2VqeuLiOuLpC4NCi0gYGdgOiDsspjrpqzqsIAg7Iuc7J6R65CY64qUIOyXsOuPhOyeheuLiOuLpC4NCi0gYGRlcF92YXJgOiDqsrDqs7wg67OA7IiY66GcLCDrtoTshJ3snZgg7KO87JqUIOq0gOyLrOyCrOyduCDrs4DsiJjrpbwg64KY7YOA64OF64uI64ukLg0KLSBgdHJlYXRgOiDsspjrpqwg7Jes67aA66W8IOuCmO2DgOuCtOuKlCDssLgv6rGw7KeTIOuzgOyImOuhnCwg7LKY66as6rCAIOyLpOygnOuhnCDsoIHsmqnrkJwg7Iuc6riw66W8IOuCmO2DgOuDheuLiOuLpC4NCi0gYHJlbF95ZWFyYDog7LKY66asIOyLnOyekeyXkCDrjIDtlZwg7IOB64yA7KCB7J24IOyXsOuPhOulvCDrgpjtg4Drg4Xri4jri6QuICdJbmYn64qUIOygiOuMgCDsspjrpqzrkJjsp4Ag7JWK64qUIOqyveyasOulvCDsnZjrr7jtlanri4jri6QuDQotIGByZWxfeWVhcl9iaW5uZWRgOiDsspjrpqwg7Iuc7J6R7JeQIOuMgO2VnCDsg4HrjIDsoIHsnbgg7Jew64+E66W8IOuCmO2DgOuCtOyngOunjCwgLTYg7J207ZWYIOuwjyA2IOydtOyDgeydmCDqsJLsnYAg67KU7KO87ZmU65CY7Ja0IOynkeqzhOuQqeuLiOuLpC4NCi0gYHVuaXRfZmVgOiDqsJzrs4Qg64yA7IOB7JeQIOuMgO2VnCDqs6DsoJUg7Zqo6rO8KEZpeGVkIEVmZmVjdCnsnoXri4jri6QuDQotIGB5ZWFyX2ZlYDog7Jew64+E7JeQIOuMgO2VnCDqs6DsoJUg7Zqo6rO87J6F64uI64ukLg0KLSBgZXJyb3JgOiDrnpzrjaQg7Jik66WYIOq1rOyEsSDsmpTshozroZwsIOuqqOuNuOyXkCDrrLTsnpHsnITshLHsnYQg7LaU6rCA7ZWp64uI64ukLg0KLSBgdGVgOiDsspjrpqzsnZgg7KCV7KCBKOuzgO2VmOyngCDslYrripQpIO2aqOqzvOulvCDrgpjtg4DrgrTripQg67OA7IiY7J6F64uI64ukLg0KLSBgdGVfZHluYW1pY2A6IOyymOumrOydmCDrj5nsoIEo67OA7ZmU7ZWY64qUKSDtmqjqs7zrpbwg64KY7YOA64K064qUIOuzgOyImOyeheuLiOuLpC4NCi0gYHN0YXRlYDog6rCc67OEIOuMgOyDgeydtCDsho3tlZwg7KO866W8IOuCmO2DgOuDheuLiOuLpC4NCi0gYGdyb3VwYDog6re466O57J2YIOusuOyekOyXtCDsnbTrpoTsnLzroZwsIOuNsOydtO2EsOqwgCDsho3tlZwg67KU7KO864KYIOynkeuLqOydhCDrgpjtg4Drg4Xri4jri6QuDQoNCuydtCDrjbDsnbTthLDripQg7Iuc6rCE7JeQIOuUsOudvCDri6Trpbgg6rCc7J247J2064KYIOuLqOychOuTpOyXkCDrjIDtlbQg7LKY66asKOyYiDog7KCV7LGFIOuzgOqyvSwg7ZSE66Gc6re4656oIOuPhOyehSDrk7Ep6rCAIOyWtOuWpCDsmIHtlqXsnYQg66+47LOk64qU7KeA66W8IOu2hOyEne2VmOq4sCDsnITtlZwg6rKD7Jy866GcIOuztOyeheuLiOuLpC4g6rCBIOuzgOyImOuTpOydgCDsspjrpqzsnZgg7JiB7Zal7J2EIO2PieqwgO2VmOqzoCwg6rKw6rO866W8IO2VtOyEne2VmOuKlCDrjbAg7ZWE7JqU7ZWcIOuLpOyWke2VnCDssKjsm5DsnYQg7KCc6rO17ZWp64uI64ukLiDrjbDsnbTthLDshYvsnZgg6rWs7KGw66W8IO2Gte2VtCDsl7DqtazsnpDripQg7LKY66as6rCAIOyLnOyekeuQmOq4sCDsoITqs7wg7ZuE7J2YIOqysOqzvOulvCDruYTqtZDtlZjqs6AsIOyymOumrOydmCDsmIHtlqXsnbQg7Iuc6rCE7JeQIOuUsOudvCDslrTrlrvqsowg67OA7ZWY64qU7KeALCDqt7jrpqzqs6Ag7J2065+s7ZWcIO2aqOqzvOqwgCDqsJzrs4Qg64yA7IOB7J2064KYIOq3uOujueuniOuLpCDslrTrlrvqsowg64uk66W47KeA66W8IOu2hOyEne2VoCDsiJgg7J6I7Iq164uI64ukLg0KDQoNCg0KYGBge3J9DQpkZl9oZXQgJT4lIA0KICBncm91cF9ieSh5ZWFyLGcpICU+JSANCiAgc3VtbWFyaXplKG91dGNvbWUgPSBtZWFuKGRlcF92YXIpKSAlPiUgDQogIHVuZ3JvdXAoKSAlPiUgDQogIGdncGxvdChhZXMoeD15ZWFyLHk9b3V0Y29tZSxjb2w9YXMuZmFjdG9yKGcpKSkgKw0KICBnZW9tX3BvaW50KCkgKw0KICBnZW9tX2xpbmUoKSArIA0KICB0aGVtZV9idygpDQpgYGANCuyymOumrOqwgCDsi5zsnpHrkJwgMjAwMOuFhOqzvCAyMDEw64WE7JeQIOuUsOudvCDquLDsmrjquLDsnZgg67OA7ZmU6rCAIOq4ieqyqe2eiCDrgpjtg4DrgpjripQg6rKD7J2EIOuzvCDsiJgg7J6I7Iq164uI64ukLg0KDQojIyMgRXN0aW1hdGUgVHdvLXN0YWdlIERpZmZlcmVuY2UtaW4tRGlmZmVyZW5jZXMNCg0KIyMjIyBTdGF0aWMgRElEDQoNCiLsoJXsoIEg7LCo7J20LeywqOydtCDstpTsoJUoc3RhdGljIERpRCBlc3RpbWF0aW9uKSLsnbTrnoAg67OA7ZWY7KeAIOyViuuKlCDtmqjqs7zrpbwg6rCA7KeEIOywqOydtC3ssKjsnbQg66qo64247J2EIOy2lOygle2VmOuKlCDqsoPsnoXri4jri6QuIOyXrOq4sOyEnCDshKTrqoXrkJwg64K07Jqp7JeQIOuUsOultOuptCwgUuydmCBgZml4ZXN0YCDtjKjtgqTsp4DsnZgg6riw64ql65Ok7J2EIO2ZnOyaqe2VtCDsnbQg6rO87KCV7J2EIOyImO2Wie2VoCDsiJgg7J6I7Iq164uI64ukLiDsl6zquLDshJwg66qHIOqwgOyngCDspJHsmpTtlZwg7Y+s7J247Yq46rCAIOyeiOyKteuLiOuLpDoNCg0KMS4gKirqs6DsoJUg7Zqo6rO8IOuqheyLnCoqOiBgZml4ZXN0OjpmZW9sc2Ag7ZWo7IiY66W8IOyCrOyaqe2VmOuptCBgfGAg6riw7Zi466W8IOydtOyaqe2VtCDqs6DsoJUg7Zqo6rO866W8IOyGkOyJveqyjCDrqoXsi5ztlaAg7IiYIOyeiOyKteuLiOuLpC4g6rOg7KCVIO2aqOqzvOuKlCDsi5zqsITsnbTrgpgg6rCc7LK0IOuTseyXkCDrlLDrpbgg67OA7ZWY7KeAIOyViuuKlCDtirnshLHsnYQg66qo64247JeQ7IScIO2GteygnO2VmOuKlCDqsoPsnYQg66eQ7ZWp64uI64ukLg0KDQoyLiAqKuqwnOyEoOuQnCDsmpTsnbgg67OA7IiYIOyngOybkCoqOiBgZml4ZXN0OjppYOuKlCDrspTso7ztmJUg67OA7IiY66W8IOuNlCDsnpgg7LKY66as7ZWgIOyImCDsnojrj4TroZ0g7ZW07KO866mwLCDsnbTripQg66qo64247J2YIO2VtOyEneydhCDqsJzshKDtlaAg7IiYIOyeiOyKteuLiOuLpC4NCg0KMy4gKipgZGlkMnNgIO2VqOyImOyZgCBgZml4ZXN0YCDqsJ3ssrQqKjogYGRpZDJzYCDtlajsiJjrpbwg7IKs7Jqp7ZW0IOy2lOygle2VmOuptCwgYGZpeGVzdGAg7Yyo7YKk7KeA7J2YIOy2lOyglSDqsJ3ssrTrpbwg67CY7ZmY7ZWp64uI64ukLiDsnbTripQgYGZpeGVzdDo6ZXN0dGFibGVgICjstpTsoJUg6rKw6rO866W8IO2RnOuhnCDrgpjtg4DrgrTquLApLCBgZml4ZXN0Ojpjb2VmcGxvdGAgKOqzhOyImOulvCDqt7jrnpjtlITroZwg64KY7YOA64K06riwKSwg6re466as6rOgIGBmaXhlc3Q6OmlwbG90YCAo7IOB7Zi47J6R7JqpIO2VreydhCDtj6ztlajtlZwg66qo64247J2YIOqysOqzvOulvCDqt7jrnpjtlITroZwg64KY7YOA64K06riwKSDqsJnsnYAgYGZpeGVzdGAg7Yyo7YKk7KeA7J2YIOuLpOuluCDtlajsiJjrk6Tqs7wg7Zi47ZmY65Cp64uI64ukLg0KDQrsnbTrpbwg7Ya17ZW0LCDqs6DsoJUg7Zqo6rO866W8IO2PrO2VqO2VnCDsoJXsoIEgRGlEIOuqqOuNuOydhCDstpTsoJXtlZjqs6AsIOydtCDqsrDqs7zrpbwg64uk7JaR7ZWcIOuwqeyLneycvOuhnCDsi5zqsIHtmZTtlZjqsbDrgpgg7ZGc7ZiE7ZWgIOyImCDsnojsirXri4jri6QuIOydtCDrqqjrk6Ag6rO87KCV7J20IGBmaXhlc3RgIO2MqO2CpOyngCDslYjsl5DshJwg7J2066Oo7Ja07KeA6riwIOuVjOusuOyXkCwg67aE7ISdIOqzvOygleydtCDthrXtlanrkJjqs6Ag7Zqo7Jyo7KCB7J6F64uI64ukLg0KDQpgYGB7cn0NCnN0YXRpYyA9IGRpZDJzKA0KICBkZl9oZXQsICNkYXRhDQogIHluYW1lID0gJ2RlcF92YXInLA0KICBmaXJzdF9zdGFnZSA9IH4gMCB8IHN0YXRlICsgeWVhciwgI2ZpeGVkIGVmZmVjdCAoc3RhdGUgYW5kIHllYXIpDQogIHNlY29uZF9zdGFnZSA9IH4gaSh0cmVhdCxyZWY9RkFMU0UpLCAjdHJlYXRtZW50IGluZGljYXRvciB1c2luZyBmaXhlc3Q6OmkoKQ0KICB0cmVhdG1lbnQgPSAndHJlYXQnLA0KICBjbHVzdGVyX3ZhciA9ICdzdGF0ZScgI+2RnOykgOyYpOywqOuKlCBzdGF0ZeuzhOuhnCDrrLbslrQg7LKY66asDQopDQpgYGANCg0K6rKw6rO866W8IOu0heyLnOuLpC4NCg0KYGBge3J9DQpmaXhlc3Q6OmVzdHRhYmxlKHN0YXRpYykNCmBgYA0KDQrstpTsoJUg6rKw6rO864qUIGBmaXhlc3Q6OmVzdHRhYmxlYCDtlajsiJjroZwg7Lac66Cl65CY66mwLCAndHJlYXQgPSBUUlVFJ+ydmCDqs4TsiJjripQg7LKY66asIO2aqOqzvOulvCDrgpjtg4Drg4Xri4jri6QuIOyXrOq4sOyEnCDstpTsoJXrkJwg7Zqo6rO864qUIDIuMTUy66GcLCDqtITtmLgg7JWI7J2YIOyIq+yekCAwLjA0NzbsnYAg6rOE7IiY7J2YIO2RnOykgCDsmKTssKjrpbwg64KY7YOA64OF64uI64ukLiDrs4TtkZwg7IS4IOqwnOuKlCDsnbQg7Zqo6rO86rCAIO2GteqzhOyggeycvOuhnCDrp6TsmrAg7Jyg7J2Y66+47ZWo7J2EIOuCmO2DgOuDheuLiOuLpCjsnbzrsJjsoIHsnLzroZwgcC12YWx1ZeqwgCAwLjAwMeuztOuLpCDsnpHsnYQg65WMIOyCrOyaqeuQqeuLiOuLpCkuDQoNCuydtCDqsrDqs7zripQgJ3RyZWF0JyDrs4DsiJjqsIAg7LC47J28IOuVjCjspoksIOyymOumrOqwgCDsoIHsmqnrkJjsl4jsnYQg65WMKSDsmIjsg4HrkJjripQg7KKF7IaNIOuzgOyImCAnZGVwX3ZhcifsnZgg67OA7ZmU65+J7J20IOyVvSAyLjE1MiDri6jsnITrnbzripQg6rKD7J2EIOuztOyXrOyjvOupsCwg7J20IOuzgO2ZlOufieydgCDthrXqs4TsoIHsnLzroZwg7Jyg7J2Y66+47ZWcIOqyg+ycvOuhnCDrgpjtg4DrgqzsirXri4jri6QuIOydtOuKlCDsspjrpqwo7JiIOiDsoJXssYUsIO2UhOuhnOq3uOueqCDrk7Ep6rCAIOq4jeygleyggeyduCDsmIHtlqXsnYQg66+47LOk7J2M7J2EIOuCmO2DgOuCvCDsiJgg7J6I7Iq164uI64ukLg0KDQojIyMgRXZlbnQgc3R1ZHkNCg0KYGBge3J9DQplcyA8LSBkaWQycyhkZl9oZXQsDQogICAgICAgICAgICB5bmFtZT0nZGVwX3ZhcicsDQogICAgICAgICAgICBmaXJzdF9zdGFnZSA9IH4wfHN0YXRlK3llYXIsDQogICAgICAgICAgICBzZWNvbmRfc3RhZ2UgPSB+aShyZWxfeWVhcixyZWY9YygtMSxJbmYpKSwNCiAgICAgICAgICAgIHRyZWF0bWVudCA9ICd0cmVhdCcsDQogICAgICAgICAgICBjbHVzdGVyX3Zhcj0nc3RhdGUnKQ0KYGBgDQrssLjqs6DroZwgaSgp64qUIGZpeGVzdOyXkCDsnojripQg7ZWo7IiY7JeQ7JqULiBDcmVhdGUgb3IgaW50ZXJhY3QgdmFyaWFibGVzIHdpdGgsIGZhY3RvcnPrnbzripQg7KCc66qp7J20IOyeiOyngOyalC4gcmVsX3llYXLrpbwg6rCB6rCB7J2YIOyalOyduOycvOuhnCDsspjrpqztlZjripQg642wIHJlZuuKlCDssLjsobAg67Kh7YSw7J2YIOqwkuyeheuLiOuLpC4g66eM7JW9IHJlZj1UUlVF7J2066m0IGZhY3Rvcl92YXLsnZgg7LKrIOuyiOynuCDqsJLsnYQg7KCc6rGw7ZWp64uI64ukLiDsnbTripQg67KU7KO87ZiVIOuzgOyImOyXkOyEnCDquLDspIAg7Lm07YWM6rOg66asIOyImOykgOydhCDqsrDsoJXtlZjripTrjbAg7IKs7Jqp7ZWY6rOgLCBjKC0xLEluZinsmYAg6rCZ7J2AIOqyveyasOyXkOuKlCByZWZlcmVuY2XrpbwgLTHrtoDthLAg66y07ZWc64yA66GcIOyeoeqzoCDsnojsirXri4jri6QuDQoNCuqysOqzvOulvCDsgrTtjrTrs7TqsqDsirXri4jri6QuDQoNCmBgYHtyfQ0KZml4ZXN0Ojplc3R0YWJsZShlcykNCmBgYA0K7Iuc6rCB7KCB7Jy866GcIOyVjOyVhOu0heuLiOuLpC4NCmBgYHtyfQ0KZml4ZXN0OjppcGxvdChlcywgDQogICAgICAgICAgICAgIG1haW4gPSAiRXZlbnQgc3R1ZHk6IFN0YWdnZXJlZCB0cmVhdG1lbnQiLCANCiAgICAgICAgICAgICAgeGxhYiA9ICJSZWxhdGl2ZSB0aW1lIHRvIHRyZWF0bWVudCIsIA0KICAgICAgICAgICAgICBjb2wgPSAic3RlZWxibHVlIiwgDQogICAgICAgICAgICAgIHJlZi5saW5lID0gLTAuNSkNCg0KIyBBZGQgdGhlIChtZWFuKSB0cnVlIGVmZmVjdHMNCnRydWVfZWZmZWN0cyA9IGhlYWQodGFwcGx5KChkZl9oZXQkdGUgKyBkZl9oZXQkdGVfZHluYW1pYyksIGRmX2hldCRyZWxfeWVhciwgbWVhbiksIC0xKQ0KcG9pbnRzKC0yMDoyMCwgdHJ1ZV9lZmZlY3RzLCBwY2ggPSAyMCwgY29sID0gImJsYWNrIikNCg0KIyBMZWdlbmQNCmxlZ2VuZCh4PS0yMCwgeT0zLCBjb2wgPSBjKCJzdGVlbGJsdWUiLCAiYmxhY2siKSwgcGNoID0gYygyMCwgMjApLCANCiAgICAgICBsZWdlbmQgPSBjKCJUd28tc3RhZ2UgZXN0aW1hdGUiLCAiVHJ1ZSBlZmZlY3QiKSkNCmBgYA0KDQojIyMg64Ko7J2AIOqyg+uTpA0KDQpgQ29tcGFyaXNvbiB0byBUV0ZFYOulvCDsg53qsIHtlbQg67SF7Iuc64ukLiAyUy1ESUTsmYAg7KCE7Ya17KCB7J24IFRXRkUg6rCE7J2YIOuqqOuNuCDstpTsoJXsl5Ag64yA7ZW0IOydtO2VtO2VmOq4sOuhnCDtlanri4jri6QuDQoNCmBgYHtyfQ0KdHdmZSA9IGZlb2xzKGRlcF92YXIgfiBpKHJlbF95ZWFyLCByZWY9YygtMSwgSW5mKSkgfCB1bml0ICsgeWVhciwgZGF0YSA9IGRmX2hldCkNCmBgYA0KDQrqt7jrpqzqs6Ag7JWe7IScIOq1rO2VnCDqsrDqs7zsmYAg67mE6rWQ7ZWp64uI64ukLg0KDQpgYGB7cn0NCmZpeGVzdDo6aXBsb3QobGlzdChlcywgdHdmZSksIHNlcCA9IDAuMiwgcmVmLmxpbmUgPSAtMC41LA0KICAgICAgY29sID0gYygic3RlZWxibHVlIiwgIiM4MmI0NDYiKSwgcHQucGNoID0gYygyMCwgMTgpLCANCiAgICAgIHhsYWIgPSAiUmVsYXRpdmUgdGltZSB0byB0cmVhdG1lbnQiLCANCiAgICAgIG1haW4gPSAiRXZlbnQgc3R1ZHk6IFN0YWdnZXJlZCB0cmVhdG1lbnQgKGNvbXBhcmlzb24pIikNCg0KcG9pbnRzKC0yMDoyMCwgdHJ1ZV9lZmZlY3RzLCBwY2ggPSAyMSwgY29sID0gInJlZCIpDQojIExlZ2VuZA0KbGVnZW5kKHg9LTIwLCB5PTMsIGNvbCA9IGMoInN0ZWVsYmx1ZSIsICIjODJiNDQ2IiwicmVkIiksIHBjaCA9IGMoMjAsIDE4LDIxKSwgDQogICAgICAgbGVnZW5kID0gYygiVHdvLXN0YWdlIGVzdGltYXRlIiwgIlRXRkUiLCJUcnVlIikpDQpgYGANCuy9lOuTnCDtlbTshKTsnoXri4jri6QuDQoNCjEuICoqVFdGRSDstpTsoJUqKjogYGZlb2xzYCDtlajsiJjrpbwg7IKs7Jqp7ZW0IFRXRkUg66qo64247J2EIOy2lOygle2VqeuLiOuLpC4g7J20IOuqqOuNuOydgCBgZGVwX3ZhcmAgKOyiheyGjSDrs4DsiJgp7JmAIGByZWxfeWVhcmAgKOyymOumrCDsi5zsnpEg64yA67mEIOyDgeuMgOyggeyduCDsl7Drj4Qp7J2YIOq0gOqzhOulvCDrtoTshJ3tlZjrqbAsIOyXrOq4sOyEnCBgLTFg6rO8IGBJbmZg66W8IOywuOyhsCDsubTthYzqs6DrpqzroZwg7ISk7KCV7ZWp64uI64ukLiDsnbQg7LaU7KCV7JeQ7ISc64qUIOuYkO2VnCDqsIEgYHVuaXRg6rO8IGB5ZWFyYOyXkCDrjIDtlZwg6rOg7KCVIO2aqOqzvOulvCDtj6ztlajtlanri4jri6QuIOuNsOydtO2EsOuKlCBgZGZfaGV0YOyXkOyEnCDqsIDsoLjsmLXri4jri6QuDQoNCjIuICoq6re4656Y7ZSEIO2UjOuhnO2MhSoqOiBgZml4ZXN0OjppcGxvdGAg7ZWo7IiY64qUIDJTLURJRCDrqqjrjbgoYGVzYCnqs7wgVFdGRSDrqqjrjbgoYHR3ZmVgKeydmCDqsrDqs7zrpbwg67mE6rWQ7ZWY64qUIOq3uOuemO2UhOulvCDsg53shLHtlanri4jri6QuIOyXrOq4sOyEnCBgc2VwYOuKlCDstpTsoJXsuZgg6rCE7J2YIOyImOyngSDqsITqsqnsnYQsIGByZWYubGluZWDsnYAg6riw7KSA7ISg7J2YIOychOy5mOulvCwgYGNvbGDsnYAg7ISg7J2YIOyDieydhCwgYHB0LnBjaGDripQg7Y+s7J247Yq4IOuniOy7pOydmCDtmJXtg5zrpbwg7KCV7J2Y7ZWp64uI64ukLiBgeGxhYmxlYOqzvCBgbWFpbmDsnYAg6rCB6rCBIHjstpUg66CI7J2067iU6rO8IOq3uOuemO2UhOydmCDsoJzrqqnsnoXri4jri6QuDQoNCjMuICoq67KU66GAIOy2lOqwgCoqOiBgbGVnZW5kYCDtlajsiJjrpbwg7IKs7Jqp7ZW0IOq3uOuemO2UhOyXkCDrspTroYDrpbwg7LaU6rCA7ZWp64uI64ukLiDsnbQg67KU66GA64qUIOuRkCDstpTsoJUg67Cp67KV7J2EIOq1rOuzhO2VmOq4sCDsnITtlbQg7IKs7Jqp65Cp64uI64ukLiDsnITsuZjsmYAg7IOJ7IOBLCDtj6zsnbjtirgg66eI7Luk6rCAIOygleydmOuQqeuLiOuLpC4NCg0K6rCQ7IKs7ZWp64uI64ukLg0KDQoNCg0KDQo=