
Carilah persamaan \(Yule walker\) untuk ARMA(1,1)
Model ARMA (autoregressive moving average) dengan orde p dan q dan disingkat dengan ARMA(p,q) mempunyai bentuk umum : \[Z_t=φ_1 Z_{t−1}+φ_2 Z_{t−2}+...+φ_p Z_{t−p}+a_t-θ_ta_{t-1}-...-θ_qa_{t-q}\] Misalkan diinginkan untuk mendiskusikannya sebagai kasus khusus yang pertama yaitu ARMA(1,1).
Model ARMA(1,1) Persamaan yang dimaksud dapat dituliskan sebagai \[Z_t=φZ_{t-1}+a_t-θ_1a_{t-1}\] Untuk menurunkan tipe persamaan Yule-Walker, kita mencatat bahwa \[E[a_t Z_t] = E[ a_t( φ Z_{t-1} + a_t −θ_1 a_{t−1} )] = σ^2\] dan \[E[a_{t-1} Z_t] = E[ a_{t-1}( φ Z_{t-1} + a_t −θ_1 a_{t−1} )]=φσ^2-θσ^2=(φ-θ)σ^2\] Jika kita mengalikan persamaan (1) dengan \(Z_{t-k}\) dan mengambil nilai harapannya, kita akan mempunyai kovariansi pada lag 0 atau variansi dari \(Z_t\) yaitu \[γ_0=φγ_1+[1-θ(φ−θ)]σ^2,k=0\] Selanjutnya kovariansi pada lag 1 dan kovariansi pada lag k dengan \(k ≥ 2\) berturut-turut adalah \[γ_1 =φ γ_0−θσ^2, k=1\] \[γ_k=φ γ_{k-1}, k ≥ 2\] Dengan menyelesaikan dua persamaan pertama maka akan diperoleh \[γ_0={(1-2θφ+θ^2)\over 1-φ^2}σ^2\] dan kemudian menyelesaikan rekursi sederhana akan memberikan \[γ_k={(1-θφ)(φ-θ)\over 1-2θφ+θ^2}φ^{k-1}σ^2, k≥1\] atau \[ρ_k={(1-θφ)(φ-θ)\over 1-2θφ+θ^2}φ^{k-1}, k≥1\] Perlu dicatat bahwa fungsi autokorelasi meluruh secara eksponensial sebagaimana lag k naik. Faktor penurunan adalah tetapi peluruhan mulai dari nilai awal yang juga tergantung pada θ. Hal ini bertentangan dengan autokorelasi AR(1) yang juga meluruh dengan faktor peluruhan sebesar φ tetapi selalu dari nilai awal \(ρ_0 =1\). Sebagai contoh, jika φ = 0.8 dan θ = 0.4 maka \(ρ_1\) = 0,523, \(ρ_2\) = 0,418, \(ρ_3\) = 0.335 dan seterusnya. Beberapa ukuran untuk \(ρ_k\) adalah mungkin tergantung pada tanda ρ dan tanda dari φ. Bentuk linear umum dari model dapat diperoleh. Kita menemukan \[Z_t=a_1+(φ-θ)∑^∞φ^{j-1}a_{t-j}\] yaitu \[ψ_j=(φ-θ)φ^{j-1}, j≥1\] Kita seharusnya menyebutkan syarat stasioner yaitu \(| φ | < 1\) atau ekuivalen dengan akar dari persamaan karakteristik \(AR 1- φ x = 0\) harus melampaui satuan dalam nilai mutlaknya.
Buatlah suatu simulasi program R untuk kasus peramalan yang hasilnya :
AR(1)
Model urutan autogresif P, disingkat AR(P), umumnya digunakan dalam analisis runtun waktu. Secara khusus, model AR (1) ditulis sebagai \[x_t=ϕ_1x_{t−1}+ϕ_2x_{t−2}+⋯+ϕ_px_{t−p}+w_t\] Pertama, mari kita pilih model dengan koefisien AR yang kontras. Ingat bahwa agar model AR(1) stasioner,\(φ<|1|\), jadi kita akan mencoba 0,1 dan 0,9. Kami akan kembali mengatur benih angka acak sehingga kami akan mendapatkan jawaban yang sama.
set.seed(456)
AR.sm <- list(order = c(1, 0, 0), ar = 0.1, sd = 0.1)
AR.lg <- list(order = c(1, 0, 0), ar = 0.9, sd = 0.1)
## simulate AR(1)
AR1.sm <- arima.sim(n = 50, model = AR.sm)
AR1.lg <- arima.sim(n = 50, model = AR.lg)
#plot
par(mfrow = c(1, 2))
ylm <- c(min(AR1.sm, AR1.lg), max(AR1.sm, AR1.lg))
plot.ts(AR1.sm, ylim = ylm, ylab = expression(italic(x)[italic(t)]),
main = expression(paste(phi, " = 0.1")))
plot.ts(AR1.lg, ylim = ylm, ylab = expression(italic(x)[italic(t)]),
main = expression(paste(phi, " = 0.9")))
Selanjutnya, mari kita hasilkan dua model AR(1) yang memiliki koefisien magnitudo yang sama, tetapi tanda yang berlawanan.
set.seed(123)
AR.pos <- list(order = c(1, 0, 0), ar = 0.5, sd = 0.1)
AR.neg <- list(order = c(1, 0, 0), ar = -0.5, sd = 0.1)
## simulate AR(1)
AR1.pos <- arima.sim(n = 50, model = AR.pos)
AR1.neg <- arima.sim(n = 50, model = AR.neg)
#plot
par(mfrow = c(1, 2))
ylm <- c(min(AR1.pos, AR1.neg), max(AR1.pos, AR1.neg))
plot.ts(AR1.pos, ylim = ylm, ylab = expression(italic(x)[italic(t)]),
main = expression(paste(phi[1], " = 0.5")))
plot.ts(AR1.neg, ylab = expression(italic(x)[italic(t)]), main = expression(paste(phi[1],
" = -0.5")))

MA(1)
Proses MA (Moving average) dari q atau MA(q) adalah jumlah tertimbang dari kesalahan acak saat ini ditambah q kesalahan terbaru, dan dapat ditulis sebagai \[x_t=w_t+θ_1w_{t−1}+θ_2w_{t−2}+⋯+θ_qw_{t−q}\]
set.seed(123)
MA.sm <- list(order = c(0, 0, 1), ma = 0.2, sd = 0.1)
MA.lg <- list(order = c(0, 0, 1), ma = 0.8, sd = 0.1)
MA.neg <- list(order = c(0, 0, 1), ma = -0.5, sd = 0.1)
## simulate MA(1)
MA1.sm <- arima.sim(n = 50, model = MA.sm)
MA1.lg <- arima.sim(n = 50, model = MA.lg)
MA1.neg <- arima.sim(n = 50, model = MA.neg)
#plot
## setup plot region
par(mfrow = c(1, 3))
## plot the ts
plot.ts(MA1.sm, ylab = expression(italic(x)[italic(t)]), main = expression(paste(theta,
" = 0.2")))
plot.ts(MA1.lg, ylab = expression(italic(x)[italic(t)]), main = expression(paste(theta,
" = 0.8")))
plot.ts(MA1.neg, ylab = expression(italic(x)[italic(t)]), main = expression(paste(theta,
" = -0.5")))

ARMA(1,1)
ARMA(p,q) dapat ditulis sebagai gabungan dari model AR (p) dan MA (q) sehingga : \[x_t=ϕ_1x_{t−1}+ϕ_2x_{t−2}+...+ϕ_px_{t−p}+w_t+θw_{t−1}+θ_2w_{t−2}+...+θ_qx_{t−q}\]
set.seed(123)
## ARMA(2,2) description for arim.sim()
ARMA22 <- list(order = c(2, 0, 2), ar = c(-0.7, 0.2), ma = c(0.7,
0.2))
## mean of process
mu <- 5
## simulated process (+ mean)
ARMA.sim <- arima.sim(n = 10000, model = ARMA22) + mu
## estimate parameters
arima(x = ARMA.sim, order = c(2, 0, 2))
##
## Call:
## arima(x = ARMA.sim, order = c(2, 0, 2))
##
## Coefficients:
## ar1 ar2 ma1 ma2 intercept
## -0.7079 0.1924 0.6912 0.2001 4.9975
## s.e. 0.0291 0.0284 0.0289 0.0236 0.0125
##
## sigma^2 estimated as 0.9972: log likelihood = -14175.92, aic = 28363.84
LS0tDQp0aXRsZTogJ1VUUyBBTkFMSVNJUyBSVU5UVU4gV0FLVFUnDQphdXRob3I6ICJXaWRpIHlhbnRpaCINCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVCICVkLCAlWScpYCINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIGhpZ2hsaWdodDogbW9ub2Nocm9tZQ0KICAgIHRoZW1lOiBzcGFjZWxhYg0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KLS0tDQoNCmBgYHtyIExvZ28sIGVjaG89RkFMU0UsZmlnLmFsaWduPSdjZW50ZXInLCBvdXQud2lkdGggPSAnNDAlJ30NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJodHRwczovL2dpdGh1Yi5jb20vQmFrdGktU2lyZWdhci9pbWFnZXMvYmxvYi9tYXN0ZXIvbG9nby5wbmc/cmF3PXRydWUiKQ0KYGBgDQoNCiMgQ2FyaWxhaCBwZXJzYW1hYW4gJFl1bGUgd2Fsa2VyJCB1bnR1ayBBUk1BKDEsMSkNCk1vZGVsIEFSTUEgKGF1dG9yZWdyZXNzaXZlIG1vdmluZyBhdmVyYWdlKSBkZW5nYW4gb3JkZSBwIGRhbiBxIGRhbiBkaXNpbmdrYXQgZGVuZ2FuIEFSTUEocCxxKSBtZW1wdW55YWkgYmVudHVrIHVtdW0gOiAkJFpfdD3Phl8xIFpfe3TiiJIxfSvPhl8yIFpfe3TiiJIyfSsuLi4rz4ZfcCBaX3t04oiScH0rYV90Lc64X3RhX3t0LTF9LS4uLi3OuF9xYV97dC1xfSQkDQpNaXNhbGthbiBkaWluZ2lua2FuIHVudHVrIG1lbmRpc2t1c2lrYW5ueWEgc2ViYWdhaSBrYXN1cyBraHVzdXMgeWFuZyBwZXJ0YW1hIHlhaXR1IEFSTUEoMSwxKS4gDQoNCk1vZGVsIEFSTUEoMSwxKSANClBlcnNhbWFhbiB5YW5nIGRpbWFrc3VkIGRhcGF0IGRpdHVsaXNrYW4gc2ViYWdhaSANCiQkWl90Pc+GWl97dC0xfSthX3QtzrhfMWFfe3QtMX0kJA0KVW50dWsgbWVudXJ1bmthbiB0aXBlIHBlcnNhbWFhbiBZdWxlLVdhbGtlciwga2l0YSBtZW5jYXRhdCBiYWh3YSANCiQkRVthX3QgWl90XSA9IEVbIGFfdCggz4YgWl97dC0xfSArIGFfdCDiiJLOuF8xIGFfe3TiiJIxfSApXSA9IM+DXjIkJA0KZGFuDQokJEVbYV97dC0xfSBaX3RdID0gRVsgYV97dC0xfSggz4YgWl97dC0xfSArIGFfdCDiiJLOuF8xIGFfe3TiiJIxfSApXT3Phs+DXjItzrjPg14yPSjPhi3OuCnPg14yJCQNCkppa2Ega2l0YSBtZW5nYWxpa2FuIHBlcnNhbWFhbiAoMSkgZGVuZ2FuICRaX3t0LWt9JCBkYW4gbWVuZ2FtYmlsIG5pbGFpIGhhcmFwYW5ueWEsIGtpdGEgYWthbg0KbWVtcHVueWFpIGtvdmFyaWFuc2kgcGFkYSBsYWcgMCBhdGF1IHZhcmlhbnNpIGRhcmkgJFpfdCQgeWFpdHUgDQokJM6zXzA9z4bOs18xK1sxLc64KM+G4oiSzrgpXc+DXjIsaz0wJCQgDQpTZWxhbmp1dG55YSBrb3ZhcmlhbnNpIHBhZGEgbGFnIDEgZGFuIGtvdmFyaWFuc2kgcGFkYSBsYWcgayBkZW5nYW4gJGsg4omlIDIkIGJlcnR1cnV0LXR1cnV0IGFkYWxhaA0KJCTOs18xID3PhiDOs18w4oiSzrjPg14yLCBrPTEkJA0KJCTOs19rPc+GIM6zX3trLTF9LCBrIOKJpSAyJCQNCkRlbmdhbiBtZW55ZWxlc2Fpa2FuIGR1YSBwZXJzYW1hYW4gcGVydGFtYSBtYWthIGFrYW4gZGlwZXJvbGVoIA0KJCTOs18wPXsoMS0yzrjPhivOuF4yKVxvdmVyIDEtz4ZeMn3Pg14yJCQNCmRhbiBrZW11ZGlhbiBtZW55ZWxlc2Fpa2FuIHJla3Vyc2kgc2VkZXJoYW5hIGFrYW4gbWVtYmVyaWthbiANCiQkzrNfaz17KDEtzrjPhikoz4YtzrgpXG92ZXIgMS0yzrjPhivOuF4yfc+GXntrLTF9z4NeMiwga+KJpTEkJA0KYXRhdQ0KJCTPgV9rPXsoMS3OuM+GKSjPhi3OuClcb3ZlciAxLTLOuM+GK864XjJ9z4Zee2stMX0sICBr4omlMSQkDQpQZXJsdSBkaWNhdGF0IGJhaHdhIGZ1bmdzaSBhdXRva29yZWxhc2kgbWVsdXJ1aCBzZWNhcmEgZWtzcG9uZW5zaWFsIHNlYmFnYWltYW5hIGxhZyBrIG5haWsuDQpGYWt0b3IgcGVudXJ1bmFuIGFkYWxhaCB0ZXRhcGkgcGVsdXJ1aGFuIG11bGFpIGRhcmkgbmlsYWkgYXdhbCB5YW5nIGp1Z2EgdGVyZ2FudHVuZyBwYWRhIM64LiBIYWwgaW5pIGJlcnRlbnRhbmdhbiBkZW5nYW4gYXV0b2tvcmVsYXNpIEFSKDEpIHlhbmcganVnYSBtZWx1cnVoIGRlbmdhbiBmYWt0b3IgcGVsdXJ1aGFuIHNlYmVzYXIgz4YgdGV0YXBpIHNlbGFsdSAgZGFyaSBuaWxhaSBhd2FsICTPgV8wID0xJC4gIFNlYmFnYWkgY29udG9oLCBqaWthIM+GID0gMC44IGRhbiDOuCA9IDAuNCBtYWthICTPgV8xJCA9IDAsNTIzLCAkz4FfMiQgPSAwLDQxOCwgJM+BXzMkID0gMC4zMzUgZGFuIHNldGVydXNueWEuICBCZWJlcmFwYSB1a3VyYW4gdW50dWsgJM+BX2skIGFkYWxhaCBtdW5na2luIHRlcmdhbnR1bmcgcGFkYSB0YW5kYSDPgSBkYW4gdGFuZGEgZGFyaSDPhi4NCkJlbnR1ayBsaW5lYXIgdW11bSBkYXJpIG1vZGVsIGRhcGF0IGRpcGVyb2xlaC4gS2l0YSBtZW5lbXVrYW4gJCRaX3Q9YV8xKyjPhi3OuCniiJFe4oiez4Zee2otMX1hX3t0LWp9JCQNCnlhaXR1DQokJM+IX2o9KM+GLc64Kc+GXntqLTF9LCBq4omlMSQkDQpLaXRhIHNlaGFydXNueWEgbWVueWVidXRrYW4gc3lhcmF0IHN0YXNpb25lciB5YWl0dSAkfCDPhiB8IDwgMSQgYXRhdSAgZWt1aXZhbGVuIGRlbmdhbiBha2FyIGRhcmkgcGVyc2FtYWFuIGthcmFrdGVyaXN0aWsgJEFSIDEtIM+GIHggPSAwJCAgaGFydXMgbWVsYW1wYXVpIHNhdHVhbiBkYWxhbSBuaWxhaSBtdXRsYWtueWEuIA0KDQojIEJ1YXRsYWggc3VhdHUgc2ltdWxhc2kgcHJvZ3JhbSBSIHVudHVrIGthc3VzIHBlcmFtYWxhbiB5YW5nIGhhc2lsbnlhIDoNCg0KIyMgQVIoMSkNCk1vZGVsIHVydXRhbiBhdXRvZ3Jlc2lmIFAsIGRpc2luZ2thdCBBUihQKSwgdW11bW55YSBkaWd1bmFrYW4gZGFsYW0gYW5hbGlzaXMgcnVudHVuIHdha3R1LiBTZWNhcmEga2h1c3VzLCBtb2RlbCBBUiAoMSkgZGl0dWxpcyBzZWJhZ2FpDQokJHhfdD3PlV8xeF97dOKIkjF9K8+VXzJ4X3t04oiSMn0r4ouvK8+VX3B4X3t04oiScH0rd190JCQNClBlcnRhbWEsIG1hcmkga2l0YSBwaWxpaCBtb2RlbCBkZW5nYW4ga29lZmlzaWVuIEFSIHlhbmcga29udHJhcy4gSW5nYXQgYmFod2EgYWdhciBtb2RlbCBBUigxKSBzdGFzaW9uZXIsJM+GPHwxfCQsIGphZGkga2l0YSBha2FuIG1lbmNvYmEgMCwxIGRhbiAwLDkuIEthbWkgYWthbiBrZW1iYWxpIG1lbmdhdHVyIGJlbmloIGFuZ2thIGFjYWsgc2VoaW5nZ2Ega2FtaSBha2FuIG1lbmRhcGF0a2FuIGphd2FiYW4geWFuZyBzYW1hLg0KYGBge3J9DQpzZXQuc2VlZCg0NTYpDQpBUi5zbSA8LSBsaXN0KG9yZGVyID0gYygxLCAwLCAwKSwgYXIgPSAwLjEsIHNkID0gMC4xKQ0KQVIubGcgPC0gbGlzdChvcmRlciA9IGMoMSwgMCwgMCksIGFyID0gMC45LCBzZCA9IDAuMSkNCiMjIHNpbXVsYXRlIEFSKDEpDQpBUjEuc20gPC0gYXJpbWEuc2ltKG4gPSA1MCwgbW9kZWwgPSBBUi5zbSkNCkFSMS5sZyA8LSBhcmltYS5zaW0obiA9IDUwLCBtb2RlbCA9IEFSLmxnKQ0KI3Bsb3QNCnBhcihtZnJvdyA9IGMoMSwgMikpDQp5bG0gPC0gYyhtaW4oQVIxLnNtLCBBUjEubGcpLCBtYXgoQVIxLnNtLCBBUjEubGcpKQ0KcGxvdC50cyhBUjEuc20sIHlsaW0gPSB5bG0sIHlsYWIgPSBleHByZXNzaW9uKGl0YWxpYyh4KVtpdGFsaWModCldKSwgDQogICAgbWFpbiA9IGV4cHJlc3Npb24ocGFzdGUocGhpLCAiID0gMC4xIikpKQ0KcGxvdC50cyhBUjEubGcsIHlsaW0gPSB5bG0sIHlsYWIgPSBleHByZXNzaW9uKGl0YWxpYyh4KVtpdGFsaWModCldKSwgDQogICAgbWFpbiA9IGV4cHJlc3Npb24ocGFzdGUocGhpLCAiID0gMC45IikpKQ0KYGBgDQpTZWxhbmp1dG55YSwgbWFyaSBraXRhIGhhc2lsa2FuIGR1YSBtb2RlbCBBUigxKSB5YW5nIG1lbWlsaWtpIGtvZWZpc2llbiBtYWduaXR1ZG8geWFuZyBzYW1hLCB0ZXRhcGkgdGFuZGEgeWFuZyBiZXJsYXdhbmFuLg0KYGBge3J9DQpzZXQuc2VlZCgxMjMpDQpBUi5wb3MgPC0gbGlzdChvcmRlciA9IGMoMSwgMCwgMCksIGFyID0gMC41LCBzZCA9IDAuMSkNCkFSLm5lZyA8LSBsaXN0KG9yZGVyID0gYygxLCAwLCAwKSwgYXIgPSAtMC41LCBzZCA9IDAuMSkNCiMjIHNpbXVsYXRlIEFSKDEpDQpBUjEucG9zIDwtIGFyaW1hLnNpbShuID0gNTAsIG1vZGVsID0gQVIucG9zKQ0KQVIxLm5lZyA8LSBhcmltYS5zaW0obiA9IDUwLCBtb2RlbCA9IEFSLm5lZykNCiNwbG90DQpwYXIobWZyb3cgPSBjKDEsIDIpKQ0KeWxtIDwtIGMobWluKEFSMS5wb3MsIEFSMS5uZWcpLCBtYXgoQVIxLnBvcywgQVIxLm5lZykpDQpwbG90LnRzKEFSMS5wb3MsIHlsaW0gPSB5bG0sIHlsYWIgPSBleHByZXNzaW9uKGl0YWxpYyh4KVtpdGFsaWModCldKSwgDQogICAgbWFpbiA9IGV4cHJlc3Npb24ocGFzdGUocGhpWzFdLCAiID0gMC41IikpKQ0KcGxvdC50cyhBUjEubmVnLCB5bGFiID0gZXhwcmVzc2lvbihpdGFsaWMoeClbaXRhbGljKHQpXSksIG1haW4gPSBleHByZXNzaW9uKHBhc3RlKHBoaVsxXSwgDQogICAgIiA9IC0wLjUiKSkpDQpgYGANCg0KIyMgTUEoMSkNCg0KUHJvc2VzIE1BIChNb3ZpbmcgYXZlcmFnZSkgZGFyaSBxIGF0YXUgTUEocSkgYWRhbGFoIGp1bWxhaCB0ZXJ0aW1iYW5nIGRhcmkga2VzYWxhaGFuIGFjYWsgc2FhdCBpbmkgZGl0YW1iYWggcSBrZXNhbGFoYW4gdGVyYmFydSwgZGFuIGRhcGF0IGRpdHVsaXMgc2ViYWdhaQ0KJCR4X3Q9d190K864XzF3X3t04oiSMX0rzrhfMndfe3TiiJIyfSvii68rzrhfcXdfe3TiiJJxfSQkDQpgYGB7cn0NCnNldC5zZWVkKDEyMykNCk1BLnNtIDwtIGxpc3Qob3JkZXIgPSBjKDAsIDAsIDEpLCBtYSA9IDAuMiwgc2QgPSAwLjEpDQpNQS5sZyA8LSBsaXN0KG9yZGVyID0gYygwLCAwLCAxKSwgbWEgPSAwLjgsIHNkID0gMC4xKQ0KTUEubmVnIDwtIGxpc3Qob3JkZXIgPSBjKDAsIDAsIDEpLCBtYSA9IC0wLjUsIHNkID0gMC4xKQ0KIyMgc2ltdWxhdGUgTUEoMSkNCk1BMS5zbSA8LSBhcmltYS5zaW0obiA9IDUwLCBtb2RlbCA9IE1BLnNtKQ0KTUExLmxnIDwtIGFyaW1hLnNpbShuID0gNTAsIG1vZGVsID0gTUEubGcpDQpNQTEubmVnIDwtIGFyaW1hLnNpbShuID0gNTAsIG1vZGVsID0gTUEubmVnKQ0KI3Bsb3QNCiMjIHNldHVwIHBsb3QgcmVnaW9uDQpwYXIobWZyb3cgPSBjKDEsIDMpKQ0KIyMgcGxvdCB0aGUgdHMNCnBsb3QudHMoTUExLnNtLCB5bGFiID0gZXhwcmVzc2lvbihpdGFsaWMoeClbaXRhbGljKHQpXSksIG1haW4gPSBleHByZXNzaW9uKHBhc3RlKHRoZXRhLCANCiAgICAiID0gMC4yIikpKQ0KcGxvdC50cyhNQTEubGcsIHlsYWIgPSBleHByZXNzaW9uKGl0YWxpYyh4KVtpdGFsaWModCldKSwgbWFpbiA9IGV4cHJlc3Npb24ocGFzdGUodGhldGEsIA0KICAgICIgPSAwLjgiKSkpDQpwbG90LnRzKE1BMS5uZWcsIHlsYWIgPSBleHByZXNzaW9uKGl0YWxpYyh4KVtpdGFsaWModCldKSwgbWFpbiA9IGV4cHJlc3Npb24ocGFzdGUodGhldGEsIA0KICAgICIgPSAtMC41IikpKQ0KYGBgDQoNCiMjIEFSTUEoMSwxKQ0KDQpBUk1BKHAscSkgZGFwYXQgZGl0dWxpcyBzZWJhZ2FpIGdhYnVuZ2FuIGRhcmkgbW9kZWwgQVIgKHApIGRhbiBNQSAocSkgc2VoaW5nZ2EgOg0KJCR4X3Q9z5VfMXhfe3TiiJIxfSvPlV8yeF97dOKIkjJ9Ky4uLivPlV9weF97dOKIknB9K3dfdCvOuHdfe3TiiJIxfSvOuF8yd197dOKIkjJ9Ky4uLivOuF9xeF97dOKIknF9JCQNCmBgYHtyfQ0Kc2V0LnNlZWQoMTIzKQ0KIyMgQVJNQSgyLDIpIGRlc2NyaXB0aW9uIGZvciBhcmltLnNpbSgpDQpBUk1BMjIgPC0gbGlzdChvcmRlciA9IGMoMiwgMCwgMiksIGFyID0gYygtMC43LCAwLjIpLCBtYSA9IGMoMC43LCANCiAgICAwLjIpKQ0KIyMgbWVhbiBvZiBwcm9jZXNzDQptdSA8LSA1DQojIyBzaW11bGF0ZWQgcHJvY2VzcyAoKyBtZWFuKQ0KQVJNQS5zaW0gPC0gYXJpbWEuc2ltKG4gPSAxMDAwMCwgbW9kZWwgPSBBUk1BMjIpICsgbXUNCiMjIGVzdGltYXRlIHBhcmFtZXRlcnMNCmFyaW1hKHggPSBBUk1BLnNpbSwgb3JkZXIgPSBjKDIsIDAsIDIpKQ0KYGBgDQoNCg==