KASUS KONSEP DASAR PROBABILITAS

Statistika Dasar

TUGAS 1

Sebuah perusahaan manufaktur memproduksi barang elektronik dan ingin memprediksi apakah suatu produk akan cacat atau tidak. Data historis menunjukkan bahwa 5% dari produk yang diproduksi adalah cacat. Perusahaan menggunakan data tentang jenis komponen dan proses produksi untuk memprediksi cacat produk menggunakan teknik probabilitas.

LANGKAH 1 : Rumus Teorema Bayes

Teorema Bayes adalah alat yang digunakan untuk menghitung probabilitas bersyarat. Ini berguna ketika kita ingin mengetahui peluang suatu kejadian (dalam hal ini **proproduk cacat (D =𝐷=Ya​) berdasarkan informasi tambahan y

  • Komponen berkualitas rendah𝐶=SayaHaiakuC=Rendah​

  • Proses produksi dilakukan di bawah standar𝑃= Di bawah​

Rumus Teorema Baye

\[ P(D = \text{Yes} \mid C = \text{Low}, P = \text{Below}) = \frac{P(C = \text{Low}, P = \text{Below} \mid D = \text{Yes}) \cdot P(D = \text{Yes})}{P(C = \text{Low}, P = \text{Below})} \] Penjelasan Rumus :

dimana:

\[ \begin{aligned} \textbf{1. } & \, P(D = \text{Yes} | C = \text{Low}, P = \text{Below}): \text{Probabilitas produk cacat (\(D = \text{Yes}\)) jika diketahui komponen rendah (\(C = \text{Low}\)) dan proses produksi di bawah standar (\(P = \text{Below}\)).} \\ \textbf{2. } & \, P(C = \text{Low}, P = \text{Below} | D = \text{Yes}): \text{Probabilitas komponen rendah (\(C = \text{Low}\)) dan proses produksi di bawah standar (\(P = \text{Below}\)) jika produk cacat (\(D = \text{Yes}\)).} \\ \textbf{3. } & \, P(D = \text{Yes}): \text{Probabilitas produk cacat secara umum (probabilitas prior), yang memberikan peluang dasar bahwa produk tersebut cacat.} \\ \textbf{4. } & \, P(C = \text{Low}, P = \text{Below}): \text{Probabilitas gabungan bahwa komponen produk rendah kualitas (\(C = \text{Low}\)) dan proses produksi berada di bawah standar (\(P = \text{Below}\)), tanpa memperhatikan apakah produk tersebut cacat atau tidak.} \\ \end{aligned} \]

LANGKAH 2 : Menentukan Probabilitas Awal (Data yang Diketahui)

Dari soal tersebut, kita diberi kemungkinan sebagai berikut:

2.1 Peluang produk cacat :

\[ \begin{align*} P(D = \text{Yes}) &= 5\% = 0.05 \end{align*} \]

2.2 Peluang produk tanpa cacat :

\[ \begin{align*} P(D = \text{No}) &= 95\% = 0.95 \end{align*} \] Selain itu, ada beberapa kemungkinan bersyarat untuk kejadian lain:

2.3 Jika produk cacat (D = Yes) :

  • Peluang komponen berkualitas rendah:

\[ \begin{align*} P(C = \text{Low} | D = \text{Yes}) &= 30\% = 0.3 \end{align*} \]

  • Peluang proses produksi di bawah standar:

\[ \begin{align*} P(P = \text{Below} | D = \text{Yes}) &= 40\% = 0.4 \end{align*} \]

2.4 Jika produk tidak cacat (D = Tidak) :

  • Peluang komponen berkualitas rendah:

\[ \begin{align*} P(C = \text{Low} | D = \text{No}) &= 10\% = 0.1 \end{align*} \]

  • Peluang proses produksi di bawah standar:

\[ \begin{align*} P(P = \text{Below} | D = \text{No}) &= 30\% = 0.3 \end{align*} \]

LANGKAH 3 : Menghitung Probabilitas Gabungan

Selanjutnya, kita menghitung probabilitas gabungan bahwa komponen berkuaberdasarkan kondisi produk cacat atau tidak.

Probabilitas kejadian gabungan dihitung dengan mengalikan dua probabilitas bersyarat yang diasumsikan independen satu sama lain: ### 3.1 Jika produk cacat (𝐷=Ya)

\[ P(C = \text{Low}, P = \text{Below} | D = \text{Yes}) = P(C = \text{Low} | D = \text{Yes}) \cdot P(P = \text{Below} | D = \text{Yes}) \]

Nilai subtitusi:

\[ P(C = \text{Low}, P = \text{Below} | D = \text{Yes}) = 0.3 \cdot 0.4 = 0.12 \]

3.2 Jika produk tidak cacat (D = TIDAK)

\[ P(C = \text{Low}, P = \text{Below} | D = \text{No}) = P(C = \text{Low} | D = \text{No}) \cdot P(P = \text{Below} | D = \text{No}) \]

Nilai subtitusi:

\[ P(C = \text{Low}, P = \text{Below} | D = \text{No}) = 0.1 \cdot 0.3 = 0.03 \]

Penjelasan :

  • 0.12 menunjukkan bahwa ada 12% kemungkinan komponen berkualitas rendah dan proses dibawa

  • 0.03 menunjukkan bahwa ada **33% kemungkinan komponen berkualitas rendah dan proses di bawah standar jika produk tidak cacat.

LANGKAH 4 : Menghitung Probabilitas Total (𝑃(C)=Rendah ,P=Di bawah )

Probabilitas total P ( C)=Rendah ,P=Di bawah )A umum (baik produk cacat maupun tidak cacat). Kita gunakan hukum probabilitas total :

\[ P(C = \text{Low}, P = \text{Below}) = P(C = \text{Low}, P = \text{Below} | D = \text{Yes}) \cdot P(D = \text{Yes}) + P(C = \text{Low}, P = \text{Below} | D = \text{No}) \cdot P(D = \text{No}) \]

Nilai subtitusi:

\[ P(C = \text{Low}, P = \text{Below}) = (0.12 \cdot 0.05) + (0.03 \cdot 0.95) \]

Hitung:

\[ P(C = \text{Low}, P = \text{Below}) = 0.006 + 0.0285 = 0.0345 \]

Penjelasan :

  • 0,006 adalah kontribusi dari produk cacat.

  • 0,0285 adalah kontribusi dari produk tidak cacat.

  • Kemungkinan totalnya adalah 0.0345 atau 3.45% .

LANGKAH 5 : Menghitung Probabilitas Bersyarat Menggunakan Teorema Bayes

Sekarang kita substitusi semua nilai ke dalam rumus Teorema Bayes:

\[ P(D = \text{Yes} | C = \text{Low}, P = \text{Below}) = \frac{P(C = \text{Low}, P = \text{Below} | D = \text{Yes}) \cdot P(D = \text{Yes})}{P(C = \text{Low}, P = \text{Below})} \]

Nilai subtitusi:

\[ P(D = \text{Yes} | C = \text{Low}, P = \text{Below}) = \frac{0.12 \cdot 0.05}{0.0345} \]

Hitung pembilang:

\[ 0.12 \cdot 0.05 = 0.006 \]

Kemudian dibagi dengan penyebut:

\[ P(D = \text{Yes} | C = \text{Low}, P = \text{Below}) = \frac{0.006}{0.0345} \approx 0.1739 \]

LANGKAH 6 : Kesimpulan Akhir

Hasil akhirnya adalah:

\[ P(D = \text{Yes} | C = \text{Low}, P = \text{Below}) \approx 0.174 \, \text{atau} \, 17.4\%. \]

Penjelasan Akhir :

Jika diketahui komponen berkualitas rendah dan proses produksi di bawah standar , maka peluang produk akan cacat adalah 17.4% . Ini jauh lebih tinggi dibandingkan peluang awal produk cacat (5%), yang menunjukkan bahwa kondisi ini memang berpengaruh signifikan terhadap cacatnya produk.

TUGAS 2

Sebuah perusahaan e-commerce ingin mendeteksi transaksi yang berpotensi penipuan. Berdasarkan data historis, 1% dari transaksi yang dilakukan adalah penipuan. Perusahaan ingin menggunakan fitur-fitur tertentu seperti lokasi transaksi, jumlah pembelian, dan metode pembayaran untuk memprediksi apakah suatu transaksi adalah penipuan atau tidak.

Langkah 1 : Teorema Bayes

Kita ingin menghitung probabilitas bahwa suatu transaksi adalah fraud (𝐹=Fraud ) jika diketahui bahwa transaksi memiliki fitur:

  • Lokasi transaksi di luar negeri (𝐿=Foreign L=Foreign),

  • Jumlah pembelian lebih dari $500 (𝐴=High A=High),

  • Metode pembayaran menggunakan kartu kredit (𝑀=Credit Card M=Credit Card).

Teorema Bayes menyatakan bahwa probabilitas bersyarat ini dapat dihitung menggunakan rumus:

\[ P(F \mid L, A, M) = \frac{P(L, A, M \mid F) \cdot P(F)}{P(L, A, M)} \] Penjelasan komponen rumus:

\[ \begin{aligned} \textbf{1. } & \, P(F \mid L, A, M): \text{ Probabilitas suatu transaksi adalah \textbf{fraud} jika diketahui memiliki fitur \( L, A, M \) (inilah yang kita cari).} \\ \textbf{2. } & \, P(L, A, M \mid F): \text{ Probabilitas transaksi memiliki fitur \( L, A, M \) jika transaksi tersebut adalah \textbf{fraud}.} \\ \textbf{3. } & \, P(F): \text{ Probabilitas transaksi adalah \textbf{fraud} tanpa melihat fitur apa pun (probabilitas prior).} \\ \textbf{4. } & \, P(L, A, M): \text{ Probabilitas transaksi memiliki fitur \( L, A, M \) secara keseluruhan (probabilitas total).} \\ \end{aligned} \]

Untuk menghitung nilai ini, kita perlu data probabilitas dari soal dan beberapa asumsi tambahan.

Langkah 2 : Data yang Diketahui

Dari soal, kita mengetahui data sebagai berikut:

2.1 Probabilitas transaksi adalah fraud:

\[ P(F) = 0,01 \quad \text{(1% transaksi adalah penipuan)} \]

2.2 Probabilitas transaksi bukan fraud:

\[ P(\neg F) = 0,99 \quad \text{(99% transaksi bukan penipuan)} \]

2.3 Probabilitas lokasi transaksi di luar negeri:

\[ P(L = \text{Foreign}) = 0,2 \quad \text{(20% transaksi terjadi di luar negeri)} \]

2.4 Probabilitas jumlah pembelian lebih dari 500 dolar:

\[ P(A = \text{High}) = 0,1 \quad \text{(10% transaksi memiliki jumlah pembelian tinggi)} \]

2.5 Probabilitas menggunakan metode pembayaran kartu kredit

\[ P(M = \text{Credit Card}) = 0,5 \quad \text{(50% transaksi menggunakan kartu kredit)} \] Catatan: Probabilitas ini adalah nilai global (tanpa memperhitungkan apakah transaksi tersebut fraud atau bukan).

Langkah 3 : Menentukan Probabilitas Bersyarat

Untuk menghitung probabilitas bersyarat P(L,A,M∣F) dan P(L,A,M∣¬F), kita membutuhkan data tambahan tentang perilaku transaksi fraud dan non-fraud.

Kita asumsikan probabilitas berikut berdasarkan pola umum transaksi fraud dan bukan fraud:

Jika Transaksi adalah Fraud (¬F):

3.1 Probabilitas lokasi di luar negeri (Foreign):

\[ P(L = \text{Foreign} \mid F) = 0,6 \quad \text{(60% transaksi fraud terjadi di luar negeri)} \]

3.2 Probabilitas jumlah pembelian tinggi (lebih dari $500):

\[ P(A = \text{High} \mid F) = 0,8 \quad \text{(80\% transaksi fraud memiliki jumlah pembelian tinggi)} \]

3.3 Probabilitas menggunakan kartu kredit:

\[ P(M = \text{Credit Card} \mid F) = 0,7 \quad \text{(70% transaksi fraud menggunakan kartu kredit)} \]

Jika Transaksi Bukan Fraud (¬F):

3.4 Probabilitas lokasi di luar negeri (Foreign):

\[ P(L = \text{Foreign} \mid \neg F) = 0,1 \quad \text{(10% transaksi normal terjadi di luar negeri)} \]

3.5 Probabilitas jumlah pembelian tinggi (High):

\[ P(A = \text{High} \mid \neg F) = 0,05 \quad \text{(5\% transaksi normal memiliki jumlah pembelian tinggi)} \]

3.6 Probabilitas menggunakan kartu kredit:

\[ P(M = \text{Credit Card} \mid \neg F) = 0,4 \quad \text{(40% transaksi normal menggunakan kartu kredit)} \]

Langkah 4 : Menghitung Probabilitas P(L,A,M∣F) dan P(L,A,M∣¬F)

Karena fitur lokasi (𝐿), jumlah pembelian (𝐴), dan metode pembayaran (𝑀) diasumsikan independen bersyarat terhadap status𝐹, maka probabilitas gabungannya dihitung dengan mengalikan probabilitas masing-masing fitur.

Jika 𝐹 = Fraud:

\[ P(L, A, M \mid F) = P(L \mid F) \cdot P(A \mid F) \cdot P(M \mid F). \]

Substitusi nilai:

\[ P(L, A, M \mid F) = 0,6 \cdot 0,8 \cdot 0,7 = 0,336. \]

Jika 𝐹 = ¬Fraud:

\[ P(L, A, M \mid \neg F) = P(L \mid \neg F) \cdot P(A \mid \neg F) \cdot P(M \mid \neg F). \]

Substitusi nilai:

\[ P(L, A, M \mid \neg F) = 0,1 \cdot 0,05 \cdot 0,4 = 0,002. \]

Langkah 5 : Menghitung Probabilitas Total P(L,A,M)

Probabilitas total P(L,A,M) dihitung menggunakan Hukum Probabilitas Total:

\[ P(L, A, M) = P(L, A, M \mid F) \cdot P(F) + P(L, A, M \mid \neg F) \cdot P(\neg F). \]

Substitusi nilai:

\[ P(L, A, M) = (0,336 \cdot 0,01) + (0,002 \cdot 0,99) \] \[ P(L, A, M) = 0,00336 + 0,00198 = 0,00534. \]

Langkah 6 : Menghitung Probabilitas P(F∣L,A,M)

Akhirnya, substitusi ke dalam rumus Teorema Bayes:

\[ P(F \mid L, A, M) = \frac{P(L, A, M \mid F) \cdot P(F)}{P(L, A, M)}. \]

Substitusi nilai:

\[ P(F \mid L, A, M) = \frac{0,336 \cdot 0,01}{0,00534}. \]

\[ P(F \mid L, A, M) = \frac{0,00336}{0,00534} \approx 0,629. \]

Langkah 7 : Kesimpulan

Probabilitas bahwa suatu transaksi adalah penipuan (𝐹=Fraud) jika diketahui:

  • Lokasi di luar negeri,

  • Jumlah pembelian lebih dari $500, dan

  • Metode pembayaran menggunakan kartu kredit,

adalah sekitar:

\[ \boxed{62,9\%}. \]

Dengan demikian, transaksi ini memiliki kemungkinan cukup besar untuk menjadi penipuan berdasarkan fitur-fitur yang diketahui.

LS0tDQp0aXRsZTogIktBU1VTIEtPTlNFUCBEQVNBUiBQUk9CQUJJTElUQVMiDQpzdWJ0aXRsZTogIlN0YXRpc3Rpa2EgRGFzYXIiDQphdXRob3I6ICJEYWRhbiBSYW1kYW4gSGlkYXlhdCAoNTIyNDAwMjgpIg0KZGF0ZTogICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVCICVkLCAlWScpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246ICAgIyBodHRwczovL2dpdGh1Yi5jb20vanViYS9ybWRmb3JtYXRzDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5haWxzOiB0cnVlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgbGliX2RpcjogbGlicw0KICAgIGRmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjc3M6ICJzdHlsZS5jc3MiDQotLS0NCg0KPGltZyBzcmM9InN0YXRpc3Rpa2EuanBnIiB3aWR0aD0iOTAwIiBzdHlsZT0iZGlzcGxheTogYmxvY2s7IG1hcmdpbjogYXV0bzsiIGFsdD0iIj4NCg0KDQoNCg0KIyAgVFVHQVMgMSANCg0KU2VidWFoIHBlcnVzYWhhYW4gbWFudWZha3R1ciBtZW1wcm9kdWtzaSBiYXJhbmcgZWxla3Ryb25payBkYW4gaW5naW4gbWVtcHJlZGlrc2kgYXBha2FoIHN1YXR1IHByb2R1ayBha2FuIGNhY2F0IGF0YXUgdGlkYWsuIERhdGEgaGlzdG9yaXMgbWVudW5qdWtrYW4gYmFod2EgNSUgZGFyaSBwcm9kdWsgeWFuZyBkaXByb2R1a3NpIGFkYWxhaCBjYWNhdC4gUGVydXNhaGFhbiBtZW5nZ3VuYWthbiBkYXRhIHRlbnRhbmcgamVuaXMga29tcG9uZW4gZGFuIHByb3NlcyBwcm9kdWtzaSB1bnR1ayBtZW1wcmVkaWtzaSBjYWNhdCBwcm9kdWsgbWVuZ2d1bmFrYW4gdGVrbmlrIHByb2JhYmlsaXRhcy4NCg0KIyMgTEFOR0tBSCAxIDogUnVtdXMgVGVvcmVtYSBCYXllcw0KDQoNCg0KVGVvcmVtYSBCYXllcyBhZGFsYWggYWxhdCB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW5naGl0dW5nIHByb2JhYmlsaXRhcyBiZXJzeWFyYXQuIEluaSBiZXJndW5hIGtldGlrYSBraXRhIGluZ2luIG1lbmdldGFodWkgcGVsdWFuZyBzdWF0dSBrZWphZGlhbiAoZGFsYW0gaGFsIGluaSAqKnByb3Byb2R1ayBjYWNhdCAoRCA98J2Qtz1ZYeKAiykgYmVyZGFzYXJrYW4gaW5mb3JtYXNpIHRhbWJhaGFuIHkNCg0KLSBLb21wb25lbiBiZXJrdWFsaXRhcyByZW5kYWjwnZC2PVNheWFIYWlha3VDPVJlbmRhaOKAiw0KDQotIFByb3NlcyBwcm9kdWtzaSBkaWxha3VrYW4gZGkgYmF3YWggc3RhbmRhcvCdkYM9IERpIGJhd2Fo4oCLDQoNCioqUnVtdXMgVGVvcmVtYSBCYXllKioNCg0KJCQNClAoRCA9IFx0ZXh0e1llc30gXG1pZCBDID0gXHRleHR7TG93fSwgUCA9IFx0ZXh0e0JlbG93fSkgPSBcZnJhY3tQKEMgPSBcdGV4dHtMb3d9LCBQID0gXHRleHR7QmVsb3d9IFxtaWQgRCA9IFx0ZXh0e1llc30pIFxjZG90IFAoRCA9IFx0ZXh0e1llc30pfXtQKEMgPSBcdGV4dHtMb3d9LCBQID0gXHRleHR7QmVsb3d9KX0NCiQkDQpQZW5qZWxhc2FuIFJ1bXVzIDoNCg0KZGltYW5hOg0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQpcdGV4dGJmezEuIH0gJiBcLCBQKEQgPSBcdGV4dHtZZXN9IHwgQyA9IFx0ZXh0e0xvd30sIFAgPSBcdGV4dHtCZWxvd30pOiBcdGV4dHtQcm9iYWJpbGl0YXMgcHJvZHVrIGNhY2F0IChcKEQgPSBcdGV4dHtZZXN9XCkpIGppa2EgZGlrZXRhaHVpIGtvbXBvbmVuIHJlbmRhaCAoXChDID0gXHRleHR7TG93fVwpKSBkYW4gcHJvc2VzIHByb2R1a3NpIGRpIGJhd2FoIHN0YW5kYXIgKFwoUCA9IFx0ZXh0e0JlbG93fVwpKS59IFxcDQpcdGV4dGJmezIuIH0gJiBcLCBQKEMgPSBcdGV4dHtMb3d9LCBQID0gXHRleHR7QmVsb3d9IHwgRCA9IFx0ZXh0e1llc30pOiBcdGV4dHtQcm9iYWJpbGl0YXMga29tcG9uZW4gcmVuZGFoIChcKEMgPSBcdGV4dHtMb3d9XCkpIGRhbiBwcm9zZXMgcHJvZHVrc2kgZGkgYmF3YWggc3RhbmRhciAoXChQID0gXHRleHR7QmVsb3d9XCkpIGppa2EgcHJvZHVrIGNhY2F0IChcKEQgPSBcdGV4dHtZZXN9XCkpLn0gXFwNClx0ZXh0YmZ7My4gfSAmIFwsIFAoRCA9IFx0ZXh0e1llc30pOiBcdGV4dHtQcm9iYWJpbGl0YXMgcHJvZHVrIGNhY2F0IHNlY2FyYSB1bXVtIChwcm9iYWJpbGl0YXMgcHJpb3IpLCB5YW5nIG1lbWJlcmlrYW4gcGVsdWFuZyBkYXNhciBiYWh3YSBwcm9kdWsgdGVyc2VidXQgY2FjYXQufSBcXA0KXHRleHRiZns0LiB9ICYgXCwgUChDID0gXHRleHR7TG93fSwgUCA9IFx0ZXh0e0JlbG93fSk6IFx0ZXh0e1Byb2JhYmlsaXRhcyBnYWJ1bmdhbiBiYWh3YSBrb21wb25lbiBwcm9kdWsgcmVuZGFoIGt1YWxpdGFzIChcKEMgPSBcdGV4dHtMb3d9XCkpIGRhbiBwcm9zZXMgcHJvZHVrc2kgYmVyYWRhIGRpIGJhd2FoIHN0YW5kYXIgKFwoUCA9IFx0ZXh0e0JlbG93fVwpKSwgdGFucGEgbWVtcGVyaGF0aWthbiBhcGFrYWggcHJvZHVrIHRlcnNlYnV0IGNhY2F0IGF0YXUgdGlkYWsufSBcXA0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KDQojIyBMQU5HS0FIIDIgOiBNZW5lbnR1a2FuIFByb2JhYmlsaXRhcyBBd2FsIChEYXRhIHlhbmcgRGlrZXRhaHVpKQ0KDQpEYXJpIHNvYWwgdGVyc2VidXQsIGtpdGEgZGliZXJpIGtlbXVuZ2tpbmFuIHNlYmFnYWkgYmVyaWt1dDoNCg0KIyMjIDIuMSBQZWx1YW5nIHByb2R1ayBjYWNhdCA6DQoNCiQkDQpcYmVnaW57YWxpZ24qfQ0KUChEID0gXHRleHR7WWVzfSkgJj0gNVwlID0gMC4wNQ0KXGVuZHthbGlnbip9DQokJA0KDQojIyMgMi4yIFBlbHVhbmcgcHJvZHVrIHRhbnBhIGNhY2F0IDoNCg0KJCQNClxiZWdpbnthbGlnbip9DQpQKEQgPSBcdGV4dHtOb30pICY9IDk1XCUgPSAwLjk1DQpcZW5ke2FsaWduKn0NCiQkDQpTZWxhaW4gaXR1LCBhZGEgYmViZXJhcGEga2VtdW5na2luYW4gYmVyc3lhcmF0IHVudHVrIGtlamFkaWFuIGxhaW46DQoNCiMjIyAyLjMgSmlrYSBwcm9kdWsgY2FjYXQgKEQgPSBZZXMpIDoNCg0KLSBQZWx1YW5nIGtvbXBvbmVuIGJlcmt1YWxpdGFzIHJlbmRhaDoNCg0KJCQNClxiZWdpbnthbGlnbip9DQpQKEMgPSBcdGV4dHtMb3d9IHwgRCA9IFx0ZXh0e1llc30pICY9IDMwXCUgPSAwLjMNClxlbmR7YWxpZ24qfQ0KJCQNCg0KLSBQZWx1YW5nIHByb3NlcyBwcm9kdWtzaSBkaSBiYXdhaCBzdGFuZGFyOg0KDQokJA0KXGJlZ2lue2FsaWduKn0NClAoUCA9IFx0ZXh0e0JlbG93fSB8IEQgPSBcdGV4dHtZZXN9KSAmPSA0MFwlID0gMC40DQpcZW5ke2FsaWduKn0NCiQkDQoNCiMjIyAyLjQgSmlrYSBwcm9kdWsgdGlkYWsgY2FjYXQgKEQgPSBUaWRhaykgOg0KDQotIFBlbHVhbmcga29tcG9uZW4gYmVya3VhbGl0YXMgcmVuZGFoOg0KDQokJA0KXGJlZ2lue2FsaWduKn0NClAoQyA9IFx0ZXh0e0xvd30gfCBEID0gXHRleHR7Tm99KSAmPSAxMFwlID0gMC4xDQpcZW5ke2FsaWduKn0NCiQkDQoNCi0gUGVsdWFuZyBwcm9zZXMgcHJvZHVrc2kgZGkgYmF3YWggc3RhbmRhcjoNCg0KJCQNClxiZWdpbnthbGlnbip9DQpQKFAgPSBcdGV4dHtCZWxvd30gfCBEID0gXHRleHR7Tm99KSAmPSAzMFwlID0gMC4zDQpcZW5ke2FsaWduKn0NCiQkDQoNCg0KDQojIyBMQU5HS0FIIDMgOiBNZW5naGl0dW5nIFByb2JhYmlsaXRhcyBHYWJ1bmdhbg0KDQpTZWxhbmp1dG55YSwga2l0YSBtZW5naGl0dW5nIHByb2JhYmlsaXRhcyBnYWJ1bmdhbiBiYWh3YSBrb21wb25lbiBiZXJrdWFiZXJkYXNhcmthbiBrb25kaXNpIHByb2R1ayBjYWNhdCBhdGF1IHRpZGFrLg0KDQpQcm9iYWJpbGl0YXMga2VqYWRpYW4gZ2FidW5nYW4gZGloaXR1bmcgZGVuZ2FuIG1lbmdhbGlrYW4gZHVhIHByb2JhYmlsaXRhcyBiZXJzeWFyYXQgeWFuZyBkaWFzdW1zaWthbiBpbmRlcGVuZGVuIHNhdHUgc2FtYSBsYWluOiANCiMjIyAzLjEgSmlrYSBwcm9kdWsgY2FjYXQgKPCdkLc9WWEpDQoNCiQkDQpQKEMgPSBcdGV4dHtMb3d9LCBQID0gXHRleHR7QmVsb3d9IHwgRCA9IFx0ZXh0e1llc30pID0gUChDID0gXHRleHR7TG93fSB8IEQgPSBcdGV4dHtZZXN9KSBcY2RvdCBQKFAgPSBcdGV4dHtCZWxvd30gfCBEID0gXHRleHR7WWVzfSkNCiQkDQoNCk5pbGFpIHN1YnRpdHVzaToNCg0KJCQNClAoQyA9IFx0ZXh0e0xvd30sIFAgPSBcdGV4dHtCZWxvd30gfCBEID0gXHRleHR7WWVzfSkgPSAwLjMgXGNkb3QgMC40ID0gMC4xMg0KJCQNCg0KIyMjIDMuMiBKaWthIHByb2R1ayB0aWRhayBjYWNhdCAoRCA9IFRJREFLKQ0KDQokJA0KUChDID0gXHRleHR7TG93fSwgUCA9IFx0ZXh0e0JlbG93fSB8IEQgPSBcdGV4dHtOb30pID0gUChDID0gXHRleHR7TG93fSB8IEQgPSBcdGV4dHtOb30pIFxjZG90IFAoUCA9IFx0ZXh0e0JlbG93fSB8IEQgPSBcdGV4dHtOb30pDQokJA0KDQpOaWxhaSBzdWJ0aXR1c2k6DQoNCiQkDQpQKEMgPSBcdGV4dHtMb3d9LCBQID0gXHRleHR7QmVsb3d9IHwgRCA9IFx0ZXh0e05vfSkgPSAwLjEgXGNkb3QgMC4zID0gMC4wMw0KJCQNCg0KUGVuamVsYXNhbiA6DQoNCi0gMC4xMiBtZW51bmp1a2thbiBiYWh3YSBhZGEgMTIlIGtlbXVuZ2tpbmFuIGtvbXBvbmVuIGJlcmt1YWxpdGFzIHJlbmRhaCBkYW4gcHJvc2VzIGRpYmF3YQ0KDQotIDAuMDMgbWVudW5qdWtrYW4gYmFod2EgYWRhICoqMzMlIGtlbXVuZ2tpbmFuIGtvbXBvbmVuIGJlcmt1YWxpdGFzIHJlbmRhaCBkYW4gcHJvc2VzIGRpIGJhd2FoIHN0YW5kYXIgamlrYSBwcm9kdWsgdGlkYWsgY2FjYXQuDQoNCg0KDQojIyBMQU5HS0FIIDQgOiBNZW5naGl0dW5nIFByb2JhYmlsaXRhcyBUb3RhbCAo8J2RgyhDKT1SZW5kYWggLFA9RGkgYmF3YWggKQ0KDQpQcm9iYWJpbGl0YXMgdG90YWwgUCAoIEMpPVJlbmRhaCAsUD1EaSBiYXdhaCApQSB1bXVtIChiYWlrIHByb2R1ayBjYWNhdCBtYXVwdW4gdGlkYWsgY2FjYXQpLiBLaXRhIGd1bmFrYW4gaHVrdW0gcHJvYmFiaWxpdGFzIHRvdGFsIDoNCg0KJCQNClAoQyA9IFx0ZXh0e0xvd30sIFAgPSBcdGV4dHtCZWxvd30pID0gUChDID0gXHRleHR7TG93fSwgUCA9IFx0ZXh0e0JlbG93fSB8IEQgPSBcdGV4dHtZZXN9KSBcY2RvdCBQKEQgPSBcdGV4dHtZZXN9KSArIFAoQyA9IFx0ZXh0e0xvd30sIFAgPSBcdGV4dHtCZWxvd30gfCBEID0gXHRleHR7Tm99KSBcY2RvdCBQKEQgPSBcdGV4dHtOb30pDQokJA0KDQpOaWxhaSBzdWJ0aXR1c2k6DQoNCiQkDQpQKEMgPSBcdGV4dHtMb3d9LCBQID0gXHRleHR7QmVsb3d9KSA9ICgwLjEyIFxjZG90IDAuMDUpICsgKDAuMDMgXGNkb3QgMC45NSkNCiQkDQoNCkhpdHVuZzoNCg0KJCQNClAoQyA9IFx0ZXh0e0xvd30sIFAgPSBcdGV4dHtCZWxvd30pID0gMC4wMDYgKyAwLjAyODUgPSAwLjAzNDUNCiQkDQoNClBlbmplbGFzYW4gOg0KDQotIDAsMDA2IGFkYWxhaCBrb250cmlidXNpIGRhcmkgcHJvZHVrIGNhY2F0Lg0KDQotIDAsMDI4NSBhZGFsYWgga29udHJpYnVzaSBkYXJpIHByb2R1ayB0aWRhayBjYWNhdC4NCg0KLSBLZW11bmdraW5hbiB0b3RhbG55YSBhZGFsYWggMC4wMzQ1IGF0YXUgMy40NSUgLg0KDQojIyBMQU5HS0FIIDUgOiBNZW5naGl0dW5nIFByb2JhYmlsaXRhcyBCZXJzeWFyYXQgTWVuZ2d1bmFrYW4gVGVvcmVtYSBCYXllcw0KDQpTZWthcmFuZyBraXRhIHN1YnN0aXR1c2kgc2VtdWEgbmlsYWkga2UgZGFsYW0gcnVtdXMgVGVvcmVtYSBCYXllczoNCg0KJCQNClAoRCA9IFx0ZXh0e1llc30gfCBDID0gXHRleHR7TG93fSwgUCA9IFx0ZXh0e0JlbG93fSkgPSBcZnJhY3tQKEMgPSBcdGV4dHtMb3d9LCBQID0gXHRleHR7QmVsb3d9IHwgRCA9IFx0ZXh0e1llc30pIFxjZG90IFAoRCA9IFx0ZXh0e1llc30pfXtQKEMgPSBcdGV4dHtMb3d9LCBQID0gXHRleHR7QmVsb3d9KX0NCiQkDQoNCk5pbGFpIHN1YnRpdHVzaToNCg0KJCQNClAoRCA9IFx0ZXh0e1llc30gfCBDID0gXHRleHR7TG93fSwgUCA9IFx0ZXh0e0JlbG93fSkgPSBcZnJhY3swLjEyIFxjZG90IDAuMDV9ezAuMDM0NX0NCiQkDQoNCg0KSGl0dW5nIHBlbWJpbGFuZzoNCg0KJCQNCjAuMTIgXGNkb3QgMC4wNSA9IDAuMDA2DQokJA0KDQpLZW11ZGlhbiBkaWJhZ2kgZGVuZ2FuIHBlbnllYnV0Og0KDQokJA0KUChEID0gXHRleHR7WWVzfSB8IEMgPSBcdGV4dHtMb3d9LCBQID0gXHRleHR7QmVsb3d9KSA9IFxmcmFjezAuMDA2fXswLjAzNDV9IFxhcHByb3ggMC4xNzM5DQokJA0KDQoNCiMjIExBTkdLQUggNiA6IEtlc2ltcHVsYW4gQWtoaXINCg0KSGFzaWwgYWtoaXJueWEgYWRhbGFoOg0KDQokJA0KUChEID0gXHRleHR7WWVzfSB8IEMgPSBcdGV4dHtMb3d9LCBQID0gXHRleHR7QmVsb3d9KSBcYXBwcm94IDAuMTc0IFwsIFx0ZXh0e2F0YXV9IFwsIDE3LjRcJS4NCiQkDQoNCioqUGVuamVsYXNhbiBBa2hpciA6KioNCg0KSmlrYSBkaWtldGFodWkgKiprb21wb25lbiBiZXJrdWFsaXRhcyByZW5kYWggZGFuIHByb3NlcyBwcm9kdWtzaSBkaSBiYXdhaCBzdGFuZGFyKiogLCBtYWthIHBlbHVhbmcgcHJvZHVrIGFrYW4gY2FjYXQgYWRhbGFoIDE3LjQlIC4gSW5pIGphdWggbGViaWggdGluZ2dpIGRpYmFuZGluZ2thbiBwZWx1YW5nIGF3YWwgcHJvZHVrIGNhY2F0ICg1JSksIHlhbmcgbWVudW5qdWtrYW4gYmFod2Ega29uZGlzaSBpbmkgbWVtYW5nIGJlcnBlbmdhcnVoIHNpZ25pZmlrYW4gdGVyaGFkYXAgY2FjYXRueWEgcHJvZHVrLg0KDQoNCiMgVFVHQVMgMg0KDQpTZWJ1YWggcGVydXNhaGFhbiBlLWNvbW1lcmNlIGluZ2luIG1lbmRldGVrc2kgdHJhbnNha3NpIHlhbmcgYmVycG90ZW5zaQ0KcGVuaXB1YW4uIEJlcmRhc2Fya2FuIGRhdGEgaGlzdG9yaXMsIDElIGRhcmkgdHJhbnNha3NpIHlhbmcgZGlsYWt1a2FuDQphZGFsYWggcGVuaXB1YW4uIFBlcnVzYWhhYW4gaW5naW4gbWVuZ2d1bmFrYW4gZml0dXItZml0dXIgdGVydGVudHUgc2VwZXJ0aQ0KbG9rYXNpIHRyYW5zYWtzaSwganVtbGFoIHBlbWJlbGlhbiwgZGFuIG1ldG9kZSBwZW1iYXlhcmFuIHVudHVrDQptZW1wcmVkaWtzaSBhcGFrYWggc3VhdHUgdHJhbnNha3NpIGFkYWxhaCBwZW5pcHVhbiBhdGF1IHRpZGFrLg0KDQoNCiMjIExhbmdrYWggMSA6IFRlb3JlbWEgQmF5ZXMNCg0KS2l0YSBpbmdpbiBtZW5naGl0dW5nIHByb2JhYmlsaXRhcyBiYWh3YSBzdWF0dSB0cmFuc2Frc2kgYWRhbGFoICoqZnJhdWQgKPCdkLk9RnJhdWQgKSoqIGppa2EgZGlrZXRhaHVpIGJhaHdhIHRyYW5zYWtzaSBtZW1pbGlraSBmaXR1cjoNCg0KLSBMb2thc2kgdHJhbnNha3NpIGRpIGx1YXIgbmVnZXJpICoqKPCdkL89Rm9yZWlnbiBMPUZvcmVpZ24pKiosDQoNCi0gSnVtbGFoIHBlbWJlbGlhbiBsZWJpaCBkYXJpICQ1MDAgKioo8J2QtD1IaWdoIEE9SGlnaCkqKiwNCg0KLSBNZXRvZGUgcGVtYmF5YXJhbiBtZW5nZ3VuYWthbiBrYXJ0dSBrcmVkaXQgKioo8J2RgD1DcmVkaXTCoENhcmQgTT1DcmVkaXTCoENhcmQpKiouDQoNClRlb3JlbWEgQmF5ZXMgbWVueWF0YWthbiBiYWh3YSBwcm9iYWJpbGl0YXMgYmVyc3lhcmF0IGluaSBkYXBhdCBkaWhpdHVuZyBtZW5nZ3VuYWthbiBydW11czoNCg0KJCQNClAoRiBcbWlkIEwsIEEsIE0pID0gXGZyYWN7UChMLCBBLCBNIFxtaWQgRikgXGNkb3QgUChGKX17UChMLCBBLCBNKX0NCiQkDQoqKlBlbmplbGFzYW4ga29tcG9uZW4gcnVtdXM6KioNCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KXHRleHRiZnsxLiB9ICYgXCwgUChGIFxtaWQgTCwgQSwgTSk6IFx0ZXh0eyBQcm9iYWJpbGl0YXMgc3VhdHUgdHJhbnNha3NpIGFkYWxhaCBcdGV4dGJme2ZyYXVkfSBqaWthIGRpa2V0YWh1aSBtZW1pbGlraSBmaXR1ciBcKCBMLCBBLCBNIFwpIChpbmlsYWggeWFuZyBraXRhIGNhcmkpLn0gXFwNClx0ZXh0YmZ7Mi4gfSAmIFwsIFAoTCwgQSwgTSBcbWlkIEYpOiBcdGV4dHsgUHJvYmFiaWxpdGFzIHRyYW5zYWtzaSBtZW1pbGlraSBmaXR1ciBcKCBMLCBBLCBNIFwpIGppa2EgdHJhbnNha3NpIHRlcnNlYnV0IGFkYWxhaCBcdGV4dGJme2ZyYXVkfS59IFxcDQpcdGV4dGJmezMuIH0gJiBcLCBQKEYpOiBcdGV4dHsgUHJvYmFiaWxpdGFzIHRyYW5zYWtzaSBhZGFsYWggXHRleHRiZntmcmF1ZH0gdGFucGEgbWVsaWhhdCBmaXR1ciBhcGEgcHVuIChwcm9iYWJpbGl0YXMgcHJpb3IpLn0gXFwNClx0ZXh0YmZ7NC4gfSAmIFwsIFAoTCwgQSwgTSk6IFx0ZXh0eyBQcm9iYWJpbGl0YXMgdHJhbnNha3NpIG1lbWlsaWtpIGZpdHVyIFwoIEwsIEEsIE0gXCkgc2VjYXJhIGtlc2VsdXJ1aGFuIChwcm9iYWJpbGl0YXMgdG90YWwpLn0gXFwNClxlbmR7YWxpZ25lZH0NCiQkDQoNClVudHVrIG1lbmdoaXR1bmcgbmlsYWkgaW5pLCBraXRhIHBlcmx1IGRhdGEgcHJvYmFiaWxpdGFzIGRhcmkgc29hbCBkYW4gYmViZXJhcGEgYXN1bXNpIHRhbWJhaGFuLg0KDQojIyBMYW5na2FoIDIgOiBEYXRhIHlhbmcgRGlrZXRhaHVpDQoNCkRhcmkgc29hbCwga2l0YSBtZW5nZXRhaHVpIGRhdGEgc2ViYWdhaSBiZXJpa3V0Og0KDQojIyMgMi4xIFByb2JhYmlsaXRhcyB0cmFuc2Frc2kgYWRhbGFoIGZyYXVkOg0KJCQNClAoRikgPSAwLDAxIFxxdWFkIFx0ZXh0eygxJSB0cmFuc2Frc2kgYWRhbGFoIHBlbmlwdWFuKX0NCiQkDQoNCiMjIyAyLjIgUHJvYmFiaWxpdGFzIHRyYW5zYWtzaSBidWthbiBmcmF1ZDoNCiQkDQpQKFxuZWcgRikgPSAwLDk5IFxxdWFkIFx0ZXh0eyg5OSUgdHJhbnNha3NpIGJ1a2FuIHBlbmlwdWFuKX0NCiQkDQoNCiMjIyAyLjMgUHJvYmFiaWxpdGFzIGxva2FzaSB0cmFuc2Frc2kgZGkgbHVhciBuZWdlcmk6DQokJA0KUChMID0gXHRleHR7Rm9yZWlnbn0pID0gMCwyIFxxdWFkIFx0ZXh0eygyMCUgdHJhbnNha3NpIHRlcmphZGkgZGkgbHVhciBuZWdlcmkpfQ0KJCQNCg0KIyMjIDIuNCBQcm9iYWJpbGl0YXMganVtbGFoIHBlbWJlbGlhbiBsZWJpaCBkYXJpIDUwMCAqZG9sYXIqOg0KDQokJA0KUChBID0gXHRleHR7SGlnaH0pID0gMCwxIFxxdWFkIFx0ZXh0eygxMCUgdHJhbnNha3NpIG1lbWlsaWtpIGp1bWxhaCBwZW1iZWxpYW4gdGluZ2dpKX0NCiQkDQoNCiMjIyAyLjUgUHJvYmFiaWxpdGFzIG1lbmdndW5ha2FuIG1ldG9kZSBwZW1iYXlhcmFuIGthcnR1IGtyZWRpdA0KDQokJA0KUChNID0gXHRleHR7Q3JlZGl0IENhcmR9KSA9IDAsNSBccXVhZCBcdGV4dHsoNTAlIHRyYW5zYWtzaSBtZW5nZ3VuYWthbiBrYXJ0dSBrcmVkaXQpfQ0KJCQNCioqQ2F0YXRhbjoqKiBQcm9iYWJpbGl0YXMgaW5pIGFkYWxhaCBuaWxhaSBnbG9iYWwgKHRhbnBhIG1lbXBlcmhpdHVuZ2thbiBhcGFrYWggdHJhbnNha3NpIHRlcnNlYnV0IGZyYXVkIGF0YXUgYnVrYW4pLg0KDQoNCiMjIExhbmdrYWggMyA6IE1lbmVudHVrYW4gUHJvYmFiaWxpdGFzIEJlcnN5YXJhdA0KDQpVbnR1ayBtZW5naGl0dW5nIHByb2JhYmlsaXRhcyBiZXJzeWFyYXQgKipQKEwsQSxN4oijRioqKSBkYW4gKipQKEwsQSxN4oijwqxGKiopLCBraXRhIG1lbWJ1dHVoa2FuIGRhdGEgdGFtYmFoYW4gdGVudGFuZyBwZXJpbGFrdSB0cmFuc2Frc2kgKipmcmF1ZCoqIGRhbiAqKm5vbi1mcmF1ZCoqLg0KDQpLaXRhIGFzdW1zaWthbiBwcm9iYWJpbGl0YXMgYmVyaWt1dCBiZXJkYXNhcmthbiBwb2xhIHVtdW0gdHJhbnNha3NpIGZyYXVkIGRhbiBidWthbiBmcmF1ZDoNCg0KKipKaWthIFRyYW5zYWtzaSBhZGFsYWggRnJhdWQgKMKsRik6KioNCg0KIyMjIDMuMSBQcm9iYWJpbGl0YXMgbG9rYXNpIGRpIGx1YXIgbmVnZXJpIChGb3JlaWduKToNCiQkDQpQKEwgPSBcdGV4dHtGb3JlaWdufSBcbWlkIEYpID0gMCw2IFxxdWFkIFx0ZXh0eyg2MCUgdHJhbnNha3NpIGZyYXVkIHRlcmphZGkgZGkgbHVhciBuZWdlcmkpfQ0KJCQNCg0KIyMjIDMuMiBQcm9iYWJpbGl0YXMganVtbGFoIHBlbWJlbGlhbiB0aW5nZ2kgKGxlYmloIGRhcmkgJDUwMCk6DQoNCiQkDQpQKEEgPSBcdGV4dHtIaWdofSBcbWlkIEYpID0gMCw4IFxxdWFkIFx0ZXh0eyg4MFwlIHRyYW5zYWtzaSBmcmF1ZCBtZW1pbGlraSBqdW1sYWggcGVtYmVsaWFuIHRpbmdnaSl9DQokJA0KDQojIyMgMy4zIFByb2JhYmlsaXRhcyBtZW5nZ3VuYWthbiBrYXJ0dSBrcmVkaXQ6DQoNCiQkDQpQKE0gPSBcdGV4dHtDcmVkaXQgQ2FyZH0gXG1pZCBGKSA9IDAsNyBccXVhZCBcdGV4dHsoNzAlIHRyYW5zYWtzaSBmcmF1ZCBtZW5nZ3VuYWthbiBrYXJ0dSBrcmVkaXQpfQ0KJCQNCg0KKipKaWthIFRyYW5zYWtzaSBCdWthbiBGcmF1ZCAowqxGKToqKg0KDQojIyMgMy40IFByb2JhYmlsaXRhcyBsb2thc2kgZGkgbHVhciBuZWdlcmkgKEZvcmVpZ24pOg0KDQokJA0KUChMID0gXHRleHR7Rm9yZWlnbn0gXG1pZCBcbmVnIEYpID0gMCwxIFxxdWFkIFx0ZXh0eygxMCUgdHJhbnNha3NpIG5vcm1hbCB0ZXJqYWRpIGRpIGx1YXIgbmVnZXJpKX0NCiQkDQoNCiMjIyAzLjUgUHJvYmFiaWxpdGFzIGp1bWxhaCBwZW1iZWxpYW4gdGluZ2dpIChIaWdoKToNCg0KJCQNClAoQSA9IFx0ZXh0e0hpZ2h9IFxtaWQgXG5lZyBGKSA9IDAsMDUgXHF1YWQgXHRleHR7KDVcJSB0cmFuc2Frc2kgbm9ybWFsIG1lbWlsaWtpIGp1bWxhaCBwZW1iZWxpYW4gdGluZ2dpKX0NCiQkDQoNCg0KIyMjIDMuNiBQcm9iYWJpbGl0YXMgbWVuZ2d1bmFrYW4ga2FydHUga3JlZGl0Og0KDQokJA0KUChNID0gXHRleHR7Q3JlZGl0IENhcmR9IFxtaWQgXG5lZyBGKSA9IDAsNCBccXVhZCBcdGV4dHsoNDAlIHRyYW5zYWtzaSBub3JtYWwgbWVuZ2d1bmFrYW4ga2FydHUga3JlZGl0KX0NCiQkDQoNCg0KIyMgTGFuZ2thaCA0IDogTWVuZ2hpdHVuZyBQcm9iYWJpbGl0YXMgUChMLEEsTeKIo0YpIGRhbiBQKEwsQSxN4oijwqxGKQ0KDQpLYXJlbmEgZml0dXIgKipsb2thc2kgKPCdkL8pLCBqdW1sYWggcGVtYmVsaWFuICjwnZC0KSwqKiBkYW4gKiptZXRvZGUgcGVtYmF5YXJhbiAo8J2RgCkqKiBkaWFzdW1zaWthbiBpbmRlcGVuZGVuIGJlcnN5YXJhdCB0ZXJoYWRhcCBzdGF0dXMqKvCdkLkqKiwgbWFrYSBwcm9iYWJpbGl0YXMgZ2FidW5nYW5ueWEgZGloaXR1bmcgZGVuZ2FuIG1lbmdhbGlrYW4gcHJvYmFiaWxpdGFzIG1hc2luZy1tYXNpbmcgZml0dXIuDQoNCioqSmlrYSDwnZC5ID0gRnJhdWQ6KioNCg0KJCQNClAoTCwgQSwgTSBcbWlkIEYpID0gUChMIFxtaWQgRikgXGNkb3QgUChBIFxtaWQgRikgXGNkb3QgUChNIFxtaWQgRikuDQokJA0KDQoqKlN1YnN0aXR1c2kgbmlsYWk6KioNCg0KJCQNClAoTCwgQSwgTSBcbWlkIEYpID0gMCw2IFxjZG90IDAsOCBcY2RvdCAwLDcgPSAwLDMzNi4NCiQkDQoNCg0KKipKaWthIPCdkLkgPSDCrEZyYXVkOioqDQoNCiQkDQpQKEwsIEEsIE0gXG1pZCBcbmVnIEYpID0gUChMIFxtaWQgXG5lZyBGKSBcY2RvdCBQKEEgXG1pZCBcbmVnIEYpIFxjZG90IFAoTSBcbWlkIFxuZWcgRikuDQokJA0KDQoNCioqU3Vic3RpdHVzaSBuaWxhaToqKg0KDQokJA0KUChMLCBBLCBNIFxtaWQgXG5lZyBGKSA9IDAsMSBcY2RvdCAwLDA1IFxjZG90IDAsNCA9IDAsMDAyLg0KJCQNCg0KDQojIyBMYW5na2FoIDUgOiBNZW5naGl0dW5nIFByb2JhYmlsaXRhcyBUb3RhbCBQKEwsQSxNKQ0KDQpQcm9iYWJpbGl0YXMgdG90YWwgUChMLEEsTSkgZGloaXR1bmcgbWVuZ2d1bmFrYW4gSHVrdW0gUHJvYmFiaWxpdGFzIA0KKipUb3RhbDoqKg0KDQokJA0KUChMLCBBLCBNKSA9IFAoTCwgQSwgTSBcbWlkIEYpIFxjZG90IFAoRikgKyBQKEwsIEEsIE0gXG1pZCBcbmVnIEYpIFxjZG90IFAoXG5lZyBGKS4NCiQkDQoNCioqU3Vic3RpdHVzaSBuaWxhaToqKg0KDQokJA0KUChMLCBBLCBNKSA9ICgwLDMzNiBcY2RvdCAwLDAxKSArICgwLDAwMiBcY2RvdCAwLDk5KQ0KJCQNCiQkDQpQKEwsIEEsIE0pID0gMCwwMDMzNiArIDAsMDAxOTggPSAwLDAwNTM0Lg0KJCQNCg0KIyMgTGFuZ2thaCA2IDogTWVuZ2hpdHVuZyBQcm9iYWJpbGl0YXMgUChG4oijTCxBLE0pDQoNCkFraGlybnlhLCBzdWJzdGl0dXNpIGtlIGRhbGFtIHJ1bXVzICoqVGVvcmVtYSBCYXllczoqKg0KDQokJA0KUChGIFxtaWQgTCwgQSwgTSkgPSBcZnJhY3tQKEwsIEEsIE0gXG1pZCBGKSBcY2RvdCBQKEYpfXtQKEwsIEEsIE0pfS4NCiQkDQoNCg0KKipTdWJzdGl0dXNpIG5pbGFpOioqDQoNCiQkDQpQKEYgXG1pZCBMLCBBLCBNKSA9IFxmcmFjezAsMzM2IFxjZG90IDAsMDF9ezAsMDA1MzR9Lg0KJCQNCg0KJCQNClAoRiBcbWlkIEwsIEEsIE0pID0gXGZyYWN7MCwwMDMzNn17MCwwMDUzNH0gXGFwcHJveCAwLDYyOS4NCiQkDQoNCiMjIExhbmdrYWggNyA6IEtlc2ltcHVsYW4NCg0KUHJvYmFiaWxpdGFzIGJhaHdhIHN1YXR1IHRyYW5zYWtzaSBhZGFsYWggcGVuaXB1YW4gKPCdkLk9RnJhdWQpIGppa2EgZGlrZXRhaHVpOg0KDQotIExva2FzaSBkaSBsdWFyIG5lZ2VyaSwNCg0KLSBKdW1sYWggcGVtYmVsaWFuIGxlYmloIGRhcmkgJDUwMCwgZGFuDQoNCi0gTWV0b2RlIHBlbWJheWFyYW4gbWVuZ2d1bmFrYW4ga2FydHUga3JlZGl0LA0KDQphZGFsYWggc2VraXRhcjoNCg0KJCQNClxib3hlZHs2Miw5XCV9Lg0KJCQNCg0KRGVuZ2FuIGRlbWlraWFuLCB0cmFuc2Frc2kgaW5pIG1lbWlsaWtpIGtlbXVuZ2tpbmFuIGN1a3VwIGJlc2FyIHVudHVrIG1lbmphZGkgcGVuaXB1YW4gYmVyZGFzYXJrYW4gZml0dXItZml0dXIgeWFuZyBkaWtldGFodWkuDQoNCg==