216628 |.

Цена: 801руб. (¥37.9)
Артикул: 593834330122
Вес товара: ~0.7 кг. Указан усредненный вес, который может отличаться от фактического. Не включен в цену, оплачивается при получении.
Описание товараPHA+PGltZyBjbGFzcz0iZGVzY19hbmNob3IiIGlkPSJkZXNjLW1vZHVsZS0xIiBzcmM9Imh0dHBzOi8vYXNzZXRzLmFsaWNkbi5jb20va2lzc3kvMS4wLjAvYnVpbGQvaW1nbGF6eWxvYWQvc3BhY2ViYWxsLmdpZiI+PGRpdj48aW1nIHdpZHRoPSI3OTBweCIgc3JjPSJodHRwczovL2ltZy5hbGljZG4uY29tL2ltZ2V4dHJhL2kxLzIxNzA0Mjk3Ni9PMUNOMDFQN2VPUzYxWHIzSWNZYWdral8hITIxNzA0Mjk3Ni5qcGciPjwvZGl2PjxkaXY+PGltZyBzcmM9Imh0dHBzOi8vaW1nLmFsaWNkbi5jb20vaW1nZXh0cmEvaTMvMjE3MDQyOTc2L1QyejMzVlhwQlhYWFhYWFhYWC0yMTcwNDI5NzYuanBnIiB3aWR0aD0iNzUwIiBoZWlnaHQ9IjYwIiBzdHlsZT0ibWFyZ2luLXRvcDogMTAuMHB4OyI+PC9kaXY+PHRhYmxlIHdpZHRoPSI3NTAiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBzdHlsZT0ibGluZS1oZWlnaHQ6IDIzLjBweDtmb250LXNpemU6IDE0LjBweDtjb2xvcjogIzY2NjY2NjttYXJnaW4tdG9wOiAxMC4wcHg7Ym9yZGVyOiBzb2xpZCAxLjBweCAjY2NjY2NjO2JvcmRlci13aWR0aDogMS4wcHggMCAwIDEuMHB4OyI+PHRyPjx0ZCB3aWR0aD0iMTE5IiBhbGlnbj0icmlnaHQiIGJnY29sb3I9IiNGQkZCRkIiIHN0eWxlPSJib3JkZXI6IHNvbGlkIDEuMHB4ICNjY2NjY2M7Ym9yZGVyLTEuMHB4IDEuMHB4IDA7Ij7Ql9Cw0LPQvtC70L7QstC+0Lo6PC90ZD48dGQgd2lkdGg9IjYyOCIgc3R5bGU9ImJvcmRlcjogc29saWQgMS4wcHggI2NjY2NjYztib3JkZXItMS4wcHggMS4wcHggMDsiPuOAkNCf0L7QtNC70LjQvdC90YvQueOAkSAo0KHQv9C10YbQuNCw0LvRjNC90LDRjyDQutC90LjQs9CwKSDQr9C00YDQsCBMaW51eCDQn9C+0LvQvdC+0LUg0YHQv9GA0LDQstC+0YfQvdC+0LUg0YDRg9C60L7QstC+0LTRgdGC0LLQviB8IDE5NzQ2NzwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIxMTkiIGFsaWduPSJyaWdodCIgYmdjb2xvcj0iI0ZCRkJGQiIgc3R5bGU9ImJvcmRlcjogc29saWQgMS4wcHggI2NjY2NjYztib3JkZXItMS4wcHggMS4wcHggMDsiPtCm0LXQvdCwINC60L3QuNCz0Lg6PC90ZD48dGQgd2lkdGg9IjYyOCIgc3R5bGU9ImJvcmRlcjogc29saWQgMS4wcHggI2NjY2NjYztib3JkZXItMS4wcHggMS4wcHggMDsiPjc5INCu0LDQvdGMPC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjExOSIgYWxpZ249InJpZ2h0IiBiZ2NvbG9yPSIjRkJGQkZCIiBzdHlsZT0iYm9yZGVyOiBzb2xpZCAxLjBweCAjY2NjY2NjO2JvcmRlci0xLjBweCAxLjBweCAwOyI+0JDQstGC0L7RgCDQutC90LjQs9C4OjwvdGQ+PHRkIHdpZHRoPSI2MjgiIHN0eWxlPSJib3JkZXI6IHNvbGlkIDEuMHB4ICNjY2NjY2M7Ym9yZGVyLTEuMHB4IDEuMHB4IDA7Ij5RaXUgVGllOzwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIxMTkiIGFsaWduPSJyaWdodCIgYmdjb2xvcj0iI0ZCRkJGQiIgc3R5bGU9ImJvcmRlcjogc29saWQgMS4wcHggI2NjY2NjYztib3JkZXItMS4wcHggMS4wcHggMDsiPtCY0LfQtNCw0YLQtdC70YzRgdGC0LLQvjo8L3RkPjx0ZCB3aWR0aD0iNjI4IiBzdHlsZT0iYm9yZGVyOiBzb2xpZCAxLjBweCAjY2NjY2NjO2JvcmRlci0xLjBweCAxLjBweCAwOyI+0JzQsNGI0LjQvdC+0YHRgtGA0L7QuNGC0LXQu9GM0L3QsNGPINC/0YDQvtC80YvRiNC70LXQvdC90L7RgdGC0Ywg0J/RgNC10YHRgdCwPC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjExOSIgYWxpZ249InJpZ2h0IiBiZ2NvbG9yPSIjRkJGQkZCIiBzdHlsZT0iYm9yZGVyOiBzb2xpZCAxLjBweCAjY2NjY2NjO2JvcmRlci0xLjBweCAxLjBweCAwOyI+0JTQsNGC0LAg0L/Rg9Cx0LvQuNC60LDRhtC40Lg6PC90ZD48dGQgd2lkdGg9IjYyOCIgc3R5bGU9ImJvcmRlcjogc29saWQgMS4wcHggI2NjY2NjYztib3JkZXItMS4wcHggMS4wcHggMDsiPjIwMTEtMDEtMDEg0KHRg9Cx0LHQvtGC0LAgMDA6MDA6MDA8L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iMTE5IiBhbGlnbj0icmlnaHQiIGJnY29sb3I9IiNGQkZCRkIiIHN0eWxlPSJib3JkZXI6IHNvbGlkIDEuMHB4ICNjY2NjY2M7Ym9yZGVyLTEuMHB4IDEuMHB4IDA7Ij7QndC+0LzQtdGAIElTQk46PC90ZD48dGQgd2lkdGg9IjYyOCIgc3R5bGU9ImJvcmRlcjogc29saWQgMS4wcHggI2NjY2NjYztib3JkZXItMS4wcHggMS4wcHggMDsiPiA5Nzg3MTExMzIzNTcwPC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjExOSIgYWxpZ249InJpZ2h0IiBiZ2NvbG9yPSIjRkJGQkZCIiBzdHlsZT0iYm9yZGVyOiBzb2xpZCAxLjBweCAjY2NjY2NjO2JvcmRlci0xLjBweCAxLjBweCAwOyI+0YTQvtGA0LzQsNGCOjwvdGQ+PHRkIHN0eWxlPSJib3JkZXI6IHNvbGlkIDEuMHB4ICNjY2NjY2M7Ym9yZGVyLTEuMHB4IDEuMHB4IDA7Ij4xNjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIxMTkiIGFsaWduPSJyaWdodCIgYmdjb2xvcj0iI0ZCRkJGQiIgc3R5bGU9ImJvcmRlcjogc29saWQgMS4wcHggI2NjY2NjYztib3JkZXItMS4wcHggMS4wcHggMDsiPtCa0L7Qu9C40YfQtdGB0YLQstC+INGB0YLRgNCw0L3QuNGGOjwvdGQ+PHRkIHN0eWxlPSJib3JkZXI6IHNvbGlkIDEuMHB4ICNjY2NjY2M7Ym9yZGVyLTEuMHB4IDEuMHB4IDA7Ij42ODQ8L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iMTE5IiBhbGlnbj0icmlnaHQiIGJnY29sb3I9IiNGQkZCRkIiIHN0eWxlPSJib3JkZXI6IHNvbGlkIDEuMHB4ICNjY2NjY2M7Ym9yZGVyLTEuMHB4IDEuMHB4IDA7Ij7QmNC30LTQsNC90LjQtTo8L3RkPjx0ZCBzdHlsZT0iYm9yZGVyOiBzb2xpZCAxLjBweCAjY2NjY2NjO2JvcmRlci0xLjBweCAxLjBweCAwOyI+MS0xPC90ZD48L3RyPjwvdGFibGU+PHRhYmxlIHdpZHRoPSI3NTAiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBzdHlsZT0iYm9yZGVyOiAxLjBweCBzb2xpZCAjY2NjY2NjO21hcmdpbi10b3A6IDEwLjBweDtsaW5lLWhlaWdodDogMjMuMHB4O2ZvbnQtc2l6ZTogMTQuMHB4O2NvbG9yOiAjNjY2NjY2OyI+PHRyPjx0ZCBzdHlsZT0iYm9yZGVyLWJvdHRvbTogMS4wcHggZGFzaGVkICNjY2NjY2M7YmFja2dyb3VuZC1jb2xvcjogI2ZiZmJmYjtmb250LXdlaWdodDogYm9sZDtjb2xvcjogIzk5MDAwMDsiPtCS0LLQtdC00LXQvdC40LUg0LIg0LrQvtC90YLQtdC90YI8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0icGFkZGluZzogMTAuMHB4OyI+TGludXgsINC60LDQuiDQvtC/0LXRgNCw0YbQuNC+0L3QvdCw0Y8g0YHQuNGB0YLQtdC80LAg0YEg0L7RgtC60YDRi9GC0YvQvCDQuNGB0YXQvtC00L3Ri9C8INC60L7QtNC+0LwsINGI0LjRgNC+0LrQviDQuNGB0L/QvtC70YzQt9C+0LLQsNC70YHRjyDQsiDQutC+0LzQv9GM0Y7RgtC10YDQsNGFINC4INCy0YHRgtGA0L7QtdC90L3Ri9GFINGD0YHRgtGA0L7QudGB0YLQstCw0YUsINC/0L7RjdGC0L7QvNGDINGB0YLQsNC90L7QstC40YLRgdGPINCy0YHQtSDQsdC+0LvQtdC1INCy0LDQttC90YvQvCDQuNC30YPRh9Cw0YLRjCDRgNCw0LfQstC40YLQuNC1INC4INC/0YDQvtCz0YDQsNC80LzQuNGA0L7QstCw0L3QuNC1INGP0LTRgNCwIExpbnV4LtCe0YHQvdC+0LLRi9Cy0LDRj9GB0Ywg0L3QsCDQv9C+0YHQu9C10LTQvdC10Lkg0LLQtdGA0YHQuNC4INGP0LTRgNCwIExpbnV4IDIuNi4zMCwg0LIg0Y3RgtC+0Lkg0LrQvdC40LPQtSDRgdC40YHRgtC10LzQsNGC0LjRh9C10YHQutC4INCw0L3QsNC70LjQt9C40YDRg9C10YLRgdGPINC4INGB0YPQvNC80LjRgNGD0LXRgiDRiNC40YDQvtC60L4g0LjRgdC/0L7Qu9GM0LfRg9C10LzRi9C1IEFQSSAt0LjQvdGC0LXRgNGE0LXQudGB0Ysg0Y/QtNGA0LAsINC/0YDQvtC10LrRgtC40YDRg9C10YIg0YLQuNC/0LjRh9C90YvQtSDQv9GA0LjQvNC10YDRiyDQuCDQv9GA0LXQtNC+0YHRgtCw0LLQu9GP0LXRgiDQv9C+0LTRgNC+0LHQvdGL0LUg0L7QsdGK0Y/RgdC90LXQvdC40Y8g0YHRhtC10L3QsNGA0LjQtdCyINGA0LDQt9GA0LDQsdC+0YLQutC4LtCc0L7QtNGD0LvQuCBBUEkg0Y/QtNGA0LAsINC/0YDQvtCw0L3QsNC70LjQt9C40YDQvtCy0LDQvdC90YvQtSDQsiDRjdGC0L7QuSDQutC90LjQs9C1LCDQstC60LvRjtGH0LDRjtGCINCyINGB0LXQsdGPOiBBUEkg0LzQtdGF0LDQvdC40LfQvNCwINC80L7QtNGD0LvRjyDRj9C00YDQsCwgQVBJINGP0LTRgNCwINGD0L/RgNCw0LLQu9C10L3QuNGPINC/0YDQvtGG0LXRgdGB0L7QvCwgQVBJIC1BUEkg0L/Qu9Cw0L3QuNGA0L7QstCw0L3QuNGPINC/0YDQvtGG0LXRgdGB0LAsIEFQSSDQvNC10YXQsNC90LjQt9C80LAg0L/RgNC10YDRi9Cy0LDQvdC40Y8sIEFQSSDRj9C00YDQsCDRg9C/0YDQsNCy0LvQtdC90LjRjyDQv9Cw0LzRj9GC0YzRjiwgQVBJINCy0YDQtdC80LXQvdC4INGP0LTRgNCwLCDQvNC10YXQsNC90LjQt9C8INGB0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNC4INGP0LTRgNCwLCBBUEkg0YTQsNC50LvQvtCy0L7QuSDRgdC40YHRgtC10LzRiyBBUEkgQVBJINC4IEFQSSDRhNCw0LnQu9C+0LLQvtC5INGB0LjRgdGC0LXQvNGLIEFQSSBBUEkg0LggQVBJINGE0LDQudC70L7QstC+0Lkg0YHQuNGB0YLQtdC80YsgQVBJINC4IEFQSSBBUEkgRklMRSBTWVNURU0sINGP0LTRgNC+IOKAi+KAi0FQSSBBUEkg0Lgg0Y/QtNGA0L4g4oCL4oCLQVBJIEFQSSDQuCDRj9C00YDQviDigIvigItBUEkgQVBJINC4INGP0LTRgNC+IOKAi+KAi0FQSSDRj9C00YDQsCBBUEkg0Lgg0Y/QtNGA0L4g4oCL4oCLQVBJIEFQSSDQuCDRj9C00YDQviDigIvigItBUEkgQVBJINC4INGP0LTRgNC+IOKAi+KAi0FQSSBBUEkg0Lgg0Y/QtNGA0L4g4oCL4oCLQVBJIEFQSSDQuCBBUEkg0YTQsNC50LvQvtCy0L7QuSDRgdC40YHRgtC10LzRiyBBUEkg0LggQVBJIEFQSSBGSUxFIFNZU1RFTS4gQVBJINGD0L/RgNCw0LLQu9C10L3QuNGPINC00YDQsNC50LLQtdGA0L7QvCDQuCDRg9GB0YLRgNC+0LnRgdGC0LLQvtC8INGD0YHRgtGA0L7QudGB0YLQstCwLjxicj7QrdGC0LAg0LrQvdC40LPQsCDQvtGB0L3QvtCy0LDQvdCwINC90LAg0LDQvdCw0LvQuNC30LUgQVBJIEFQSSBMaW51eCwg0YPQs9C70YPQsdC70LXQvdC90L7QuSDQv9GA0LDQutGC0LjQutC1INC4INC/0L7QtNGA0L7QsdC90L7QvCDQutC+0L3RgtC10L3RgtC1LCDQuCDRh9C40YLQsNGC0LXQu9C4INC80L7Qs9GD0YIg0L/RgNC+0LLQvtC00LjRgtGMINGN0YTRhNC10LrRgtC40LLQvdC+0LUg0LDQvdCw0LvQuNC3INGP0LTRgNCwINC4INC/0YDQsNC60YLQuNC60YMg0L/RgNC+0LPRgNCw0LzQvNC40YDQvtCy0LDQvdC40Y8g0YEg0L3QuNC30LrQvtC5INC+0YLQv9GA0LDQstC90L7QuSDRgtC+0YfQutC4LtCt0YLQsCDQutC90LjQs9CwINC80L7QttC10YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjyDQsiDQutCw0YfQtdGB0YLQstC1INGD0YfQtdCx0L3QuNC60LAg0LjQu9C4INGB0L/RgNCw0LLQvtGH0L3QuNC60LAg0LTQu9GPINGB0YLRg9C00LXQvdGC0L7QsiDQutC+0LzQv9GM0Y7RgtC10YDQsCwg0Y3Qu9C10LrRgtGA0L7QvdC40LrQuCDQuCDQuNC90YTQvtGA0LzQsNGG0LjQuCDQsiDQutC+0LvQu9C10LTQttCw0YUg0Lgg0YPQvdC40LLQtdGA0YHQuNGC0LXRgtCw0YUg0LTQu9GPINC40LfRg9GH0LXQvdC40Y8g0Lgg0L/RgNC+0LPRgNCw0LzQvNGLINC+0L/QtdGA0LDRhtC40L7QvdC90L7QuSDRgdC40YHRgtC10LzRiyBMaW51eCwg0LjQu9C4INCyINC60LDRh9C10YHRgtCy0LUg0YHQv9GA0LDQstC+0YfQvdC40LrQsCDQtNC70Y8g0YDQsNC30YDQsNCx0L7RgtGH0LjQutC+0LIgTGludXgsINCwINGC0LDQutC20LUg0Y3QvdGC0YPQt9C40LDRgdGC0L7QsiDQv9GA0L7Qs9GA0LDQvNC80LjRgNC+0LLQsNC90LjRjyDQuCDRgNCw0LfRgNCw0LHQvtGC0YfQuNC60L7QsiBMaW51eC48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgd2lkdGg9Ijc1MCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHN0eWxlPSJib3JkZXI6IDEuMHB4IHNvbGlkICNjY2NjY2M7bWFyZ2luLXRvcDogMTAuMHB4O2xpbmUtaGVpZ2h0OiAyMy4wcHg7Zm9udC1zaXplOiAxNC4wcHg7Y29sb3I6ICM2NjY2NjY7Ij48dHI+PHRkIHN0eWxlPSJib3JkZXItYm90dG9tOiAxLjBweCBkYXNoZWQgI2NjY2NjYztiYWNrZ3JvdW5kLWNvbG9yOiAjZmJmYmZiO2ZvbnQtd2VpZ2h0OiBib2xkO2NvbG9yOiAjOTkwMDAwOyI+0JrQsNGC0LDQu9C+0LM8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0icGFkZGluZzogMTAuMHB4OyI+0J/RgNC10LTQuNGB0LvQvtCy0LjQtTxicj7QmtCw0Log0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGN0YLRgyDQutC90LjQs9GDPGJyPtCT0LvQsNCy0LAgMSDQntGB0L3QvtCy0L3Ri9C1INC30L3QsNC90LjRjyDQsNC90LDQu9C40LfQsCBBUEkg0Y/QtNGA0LAgTGludXggMTxicj7QnNC10YDRiyDQv9GA0LXQtNC+0YHRgtC+0YDQvtC20L3QvtGB0YLQuCAxINGP0LTRgNCwIExpbnV4IDE8YnI+0JrQvtC80L/QuNC70Y/RhtC40Y8g0LzQvtC00YPQu9GPINGI0LDQsdC70L7QvSBNYWtlZmlsZSDQsiDRjdGC0L7QuSDQutC90LjQs9C1IDE8YnI+0KTRg9C90LrRhtC40Y8g0L7RgtC70LDQtNC60Lgg0Y/QtNGA0LAgUHJpbnRrIDI8YnI+0JrQvtC80L/QuNC70Y/RhtC40Y8g0Lgg0L3QsNGB0YLRgNC+0LnQutCwINGP0LTRgNCwIDQgNDxicj7QotC10L/Qu9C+0LUg0L3QsNC/0L7QvNC40L3QsNC90LjQtSAxMDxicj7QodGB0YvQu9C60LggMTE8YnI+0JPQm9CQ0JLQkCAyINCc0JXQpdCQ0J3QmNCX0Jwg0JzQntCU0JXQm9CvINCc0J7QlNCj0JvQryDQm9CY0J3Qo9Ch0JrQkCBBUEkgMTI8YnI+0KTRg9C90LrRhtC40Y86IF9fbW9kdWxlX2FkZHJlc3MgKCkgMTI8YnI+0KTRg9C90LrRhtC40Y86IF9fbW9kdWxlX3JlZl9hZGRyICgpIDE0PGJyPtCk0YPQvdC60YbQuNGPOiBfX21vZHVsZV90ZXh0X2FkZHJlc3MgKCkgMTY8YnI+0KTRg9C90LrRhtC40Y86IF9fcHJpbnRfc3ltYm9sICgpIDE4PGJyPtCk0YPQvdC60YbQuNGPOiBfX3N5bWJvbF9nZXQgKCkgMjA8YnI+0KTRg9C90LrRhtC40Y86IF9fc3ltYm9sX3B1dCAoKSAyMjxicj7QpNGD0L3QutGG0LjRjzogZmluZF9tb2R1bGUgKCkgMjQ8YnI+0KTRg9C90LrRhtC40Y86IGZpbmRfc3ltYm9sICgpIDI3PGJyPtCk0YPQvdC60YbQuNGPOiBtb2R1bGVfaXNfbGl2ZSAoKSAzMDxicj7QpNGD0L3QutGG0LjRjzogbW9kdWxlX3B1dCAoKSAzMjxicj7QpNGD0L3QutGG0LjRjzogbW9kdWxlX3JlZmNvdW50ICgpIDM0PGJyPtCk0YPQvdC60YbQuNGPOiBzcHJpbnRfc3ltYm9sICgpIDM2PGJyPtCk0YPQvdC60YbQuNGPOiBzeW1ib2xfcHV0X2FkZHIgKCkgMzg8YnI+0KTRg9C90LrRhtC40Y86IHRyeV9tb2R1bGVfZ2V0ICgpIDQwPGJyPtCk0YPQvdC60YbQuNGPOiB1c2VfbW9kdWxlICgpIDQyPGJyPtCh0YHRi9C70LrQuCA0NDxicj7Qk9C70LDQstCwIDMgTGludXgg0YPQv9GA0LDQstC70LXQvdC40Y8g0L/RgNC+0YbQtdGB0YHQvtC8IEFQSSA0NTxicj7QpNGD0L3QutGG0LjRjzogX190YXNrX3BpZF9ucl9ucyAoKSA0NTxicj7QpNGD0L3QutGG0LjRjzogZmluZF9nZXRfcGlkICgpIDQ3PGJyPtCk0YPQvdC60YbQuNGPOiBmaW5kX3BpZCBfbnMgKCkgNDk8YnI+0KTRg9C90LrRhtC40Y86IGZpbmRfdGFza19ieV9waWRfbnMgKCkgNTE8YnI+0KTRg9C90LrRhtC40Y86IGZpbmRfdGFza19ieV9waWRfdHlwZSBfbnMgKCkgNTM8YnI+0KTRg9C90LrRhtC40Y86IGZpbmRfdGFza19ieV92cGlkICgpIDU1PGJyPtCk0YPQvdC60YbQuNGPOiBmaW5kX3ZwaWQgKCkgNTc8YnI+0KTRg9C90LrRhtC40Y86IGdldF9waWQgKCkgNTk8YnI+0KTRg9C90LrRhtC40Y86IGdldF90YXNrX21tICgpIDYwPGJyPtCk0YPQvdC60YbQuNGPOiBpc19jb250YWluZXJfaW5pdCAoKSA2Mzxicj7QpNGD0L3QutGG0LjRjzoga2VybmVsX3RocmVhZCAoKSA2NTxicj7QpNGD0L3QutGG0LjRjzogbW1wdXQgKCkgNjc8YnI+0KTRg9C90LrRhtC40Y86IG5zX29mX3BpZCAoKSA2OTxicj7QpNGD0L3QutGG0LjRjzogcGlkX25yICgpIDcxPGJyPtCk0YPQvdC60YbQuNGPOiBwaWRfdGFzayAoKSA3Mzxicj7QpNGD0L3QutGG0LjRjzogcGlkX3ZuciAoKSA3NTxicj7QpNGD0L3QutGG0LjRjzogcHV0X3BpZCAoKSA3Nzxicj7QpNGD0L3QutGG0LjRjzogdGFza19hY3RpdmVfcGlkX25zICgpIDc5PGJyPtCk0YPQvdC60YbQuNGPOiB0YXNrX3RnaWRfbnJfbnMgKCkgODE8YnI+0KHRgdGL0LvQutCwIDgzPGJyPtCT0LvQsNCy0LAgNCBMaW51eCBQcm9jZXNzIFByb2Nlc3NpbmcgQVBJIEFQSSA4NDxicj7QpNGD0L3QutGG0LjRjzogX193YWtlX3VwICgpIDg0PGJyPtCk0YPQvdC60YbQuNGPOiBfX3dha2VfdXBfc3luYyAoKSA4Nzxicj7QpNGD0L3QutGG0LjRjzogX193YWtlX3VwX3N5bmNfa2V5ICgpIDg5PGJyPtCk0YPQvdC60YbQuNGPOiBBQk9SVF9FWENMVUlDRV9XQUlUICgpIDkxPGJyPtCk0YPQvdC60YbQuNGPOiBhZGRfcHJlZW1wdF9jb3VudCAoKSA5NTxicj7QpNGD0L3QutGG0LjRjzogYWRkX3dhaXRfcXVldWUgKCkgOTc8YnI+0KTRg9C90LrRhtC40Y86IGFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l6aW5nICgpIDEwMDxicj7QpNGD0L3QutGG0LjRjzogQXV0b3JlTW92ZV93YWtlX2Z1bmN0aW9uICgpIDEwMjxicj7QpNGD0L3QutGG0LjRjzogY29tcGxldGUgKCkgMTA2PGJyPtCk0YPQvdC60YbQuNGPOiBjb21wbGV0ZV9hbGwgKCkgMTA4PGJyPtCk0YPQvdC60YbQuNGPOiBjb21wbGV0ZV9kb25lICgpIDExMTxicj7QpNGD0L3QutGG0LjRjzogY3VycmVudF90aHJlYWRfaW5mbyAoKSAxMTM8YnI+0KTRg9C90LrRhtC40Y86IGRlZmF1bHRfd2FrZV9mdW5jdGlvbiAoKSAxMTU8YnI+0KTRg9C90LrRhtC40Y86IGRvX2V4aXQgKCkgMTE4PGJyPtCk0YPQvdC60YbQuNGPOiBmaW5pbmVzX3dhaXQgKCkgMTIwPGJyPtCk0YPQvdC60YbQuNGPOiBpbml0X3dhaXRxdWV1ZV9lbnRyeSAoKSAxMjM8YnI+0KTRg9C90LrRhtC40Y86IGluaXRfd2FpdHF1ZXVlX2hlYWQgKCkgMTI1PGJyPtCk0YPQvdC60YbQuNGPOiBFcnRydXB0aWJsZV9zbGVlcF9vbiAoKSAxMjc8YnI+0KTRg9C90LrRhtC40Y86IEV0cmV0cnVwaWJsZV9zbGVlcF9vbl90aW1lb3V0ICgpIDEzMDxicj7QpNGD0L3QutGG0LjRjzogcHJlZW1wdF9ub3RpZmllcl9yZWdpc3RlciAoKSAxMzM8YnI+0KTRg9C90LrRhtC40Y86IHByZWVtcHRfbm90aWZpZXJfdW5yZWdpc3RlciAoKSAxMzY8YnI+0KTRg9C90LrRhtC40Y86IFByZXBhcmVfdG9fd2FpdCAoKSAxMzk8YnI+0KTRg9C90LrRhtC40Y86IFBSRVBBUkVfVE9fV0FJVF9FWENMVUlDRVMgKCkgMTQyPGJyPtCk0YPQvdC60YbQuNGPOiByZW1vdmVfd2FpdF9xdWV1ZSAoKSAxNDY8YnI+0KTRg9C90LrRhtC40Y86IHNoYXJkX3NldHNjaGVkdWxlciAoKSAxNDk8YnI+0KTRg9C90LrRhtC40Y86IHNldF9jcHVzX2FsbG93ZWRfcHRyICgpIDE1Mjxicj7QpNGD0L3QutGG0LjRjzogc2V0X3VzZXJfbmljZSAoKSAxNTU8YnI+0KTRg9C90LrRhtC40Y86IHNsZWVwX29uICgpIDE1ODxicj7QpNGD0L3QutGG0LjRjzogc2xlZXBfb25fdGltZW91dCAoKSAxNjA8YnI+0KTRg9C90LrRhtC40Y86IHN1Yl9wcmVlbXB0X2NvdW50ICgpIDE2Mjxicj7QpNGD0L3QutGG0LjRjzogdGFza19uaWNlICgpIDE2NDxicj7QpNGD0L3QutGG0LjRjzogdHJ5X3dhaXRfZm9yX2NvbXBsZXRpb24gKCkgMTY2PGJyPtCk0YPQvdC60YbQuNGPOiB3YWl0X2Zvcl9jb21wbGV0aW9uICgpIDE2OTxicj7QpNGD0L3QutGG0LjRjzogd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnRpYmxlICgpIDE3Mjxicj7QpNGD0L3QutGG0LjRjzogd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnRpYmxlXyB0aW1lb3V0ICgpIDE3NTxicj7QpNGD0L3QutGG0LjRjzogd2FpdF9mb3JfY29tcGxldGlvbl9raWxsYWJsZSAoKSAxNzk8YnI+0KTRg9C90LrRhtC40Y86IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCAoKSAxODI8YnI+0KTRg9C90LrRhtC40Y86IHdha2VfdXBfcHJvY2VzcyAoKSAxODQ8YnI+0KTRg9C90LrRhtC40Y86INC00L7RhdC+0LQgKCkgMTg3PGJyPtCh0YHRi9C70LrQuCAxODg8YnI+0JPQu9Cw0LLQsCA1IExpbnV4INCc0LXRhdCw0L3QuNC30Lwg0L/RgNC10YDRi9Cy0LDQvdC40Y8gQVBJIDE4OTxicj7QpNGD0L3QutGG0LjRjzogX19TRVRfSVJRX0hBTkRMRVIgKCkgMTg5PGJyPtCk0YPQvdC60YbQuNGPOiBfX3Rhc2tsZXRfaGlfc2NoZWR1bGUgKCkgMTkxPGJyPtCk0YPQvdC60YbQuNGPOiBfX3Rhc2tsZXRfc2NoZWR1bGUgKCkgMTk0PGJyPtCk0YPQvdC60YbQuNGPOiBkaXNhYmxlX2lycSAoKSAxOTY8YnI+0KTRg9C90LrRhtC40Y86IGRpc2FibGVfaXJxX25vc3luYyAoKSAxOTY8YnI+0KTRg9C90LrRhtC40Y86IGRpc2FibGVfaXJxX3dha2UgKCkgMTk4PGJyPtCk0YPQvdC60YbQuNGPOiBlbmFibGVfaXJxICgpIDIwMTxicj7QpNGD0L3QutGG0LjRjzogZW5hYmxlX2lycV93YWtlICgpIDIwMzxicj7QpNGD0L3QutGG0LjRjzogZnJlZV9pcnEgKCkgMjA1PGJyPtCk0YPQvdC60YbQuNGPOiBrc3RhdF9pcnFzX2NwdSAoKSAyMDc8YnI+0KTRg9C90LrRhtC40Y86IHJlbW92ZV9pcnEgKCkgMjA5PGJyPtCk0YPQvdC60YbQuNGPOiByZXF1ZXN0X2lycSAoKSAyMTM8YnI+0KTRg9C90LrRhtC40Y86IHJlcXVlc3RfdGhyZWFkZWRfaXJxICgpIDIxNjxicj7QpNGD0L3QutGG0LjRjzogU0VUX0lSUV9DSElERV9IQU5ETEVSICgpIDIxOTxicj7QpNGD0L3QutGG0LjRjzogc2V0X2lycV9jaGlwICgpIDIyMTxicj7QpNGD0L3QutGG0LjRjzogc2V0X2lycV9jaGlwX2RhdGEgKCkgMjI1PGJyPtCk0YPQvdC60YbQuNGPOiBzZXRfaXJxX2RhdGEgKCkgMjI3PGJyPtCk0YPQvdC60YbQuNGPOiBzZXRfaXJxX2hhbmRsZXIgKCkgMjI5PGJyPtCk0YPQvdC60YbQuNGPOiBzZXRfaXJxX3R5cGUgKCkgMjMyPGJyPtCk0YPQvdC60YbQuNGPOiBzZXRfaXJxX3dha2UgKCkgMjM0PGJyPtCk0YPQvdC60YbQuNGPOiBzZXR1cF9pcnEgKCkgMjM3PGJyPtCk0YPQvdC60YbQuNGPOiB0YXNrbGV0X2Rpc2FibGUgKCkgMjM5PGJyPtCk0YPQvdC60YbQuNGPOiB0YXNrbGV0X2Rpc2FibGVfbm9zeW5jICgpIDI0MTxicj7QpNGD0L3QutGG0LjRjzogdGFza2xldF9lbmFibGUgKCkgMjQzPGJyPtCk0YPQvdC60YbQuNGPOiB0YXNrbGV0X2hpX2VuYWJsZSAoKSAyNDQ8YnI+0KTRg9C90LrRhtC40Y86IHRhc2tsZXRfaGlfc2NoZWR1bGUgKCkgMjQ2PGJyPtCk0YPQvdC60YbQuNGPOiB0YXNrbGV0X2luaXQgKCkgMjQ4PGJyPtCk0YPQvdC60YbQuNGPOiB0YXNrbGV0X2tpbGwgKCkgMjUwPGJyPtCk0YPQvdC60YbQuNGPOiB0YXNrbGV0X3NoZWR1bGUgKCkgMjUyPGJyPtCk0YPQvdC60YbQuNGPOiB0YXNrbGV0X3RyeWxvY2sgKCkgMjU0PGJyPtCk0YPQvdC60YbQuNGPOiB0YXNrbGV0X3VubG9jayAoKSAyNTU8YnI+0KHRgdGL0LvQutC4IDI1Nzxicj7Qk9C70LDQstCwIDYgTGludXggTWVtYW5nZSBNYW5hZ2VtZW50IEFQSSAyNTg8YnI+0KTRg9C90LrRhtC40Y86IF9fZnJlZV9wYWdlcyAoKSAyNTg8YnI+0KTRg9C90LrRhtC40Y86IF9fZ2V0X2ZyZWVfcGFnZXMgKCkgMjU4PGJyPtCk0YPQvdC60YbQuNGPOiBfX2dldF92bV9hcmVhICgpIDI2MDxicj7QpNGD0L3QutGG0LjRjzogX19rUmVhbGxvYyAoKSAyNjI8YnI+0KTRg9C90LrRhtC40Y86IGFsbG9jX3BhZ2VzICgpIDI2NTxicj7QpNGD0L3QutGG0LjRjzogYWxsb2NfcGFnZXNfZXhhY3QgKCkgMjY4PGJyPtCk0YPQvdC60YbQuNGPOiBhbGxvY192bV9hcmVhICgpIDI3MDxicj7QpNGD0L3QutGG0LjRjzogZG9fYnJrICgpIDI3Mjxicj7QpNGD0L3QutGG0LjRjzogZG9fbW1hcCAoKSAyNzM8YnI+0KTRg9C90LrRhtC40Y86IGRvX21tYXBfcGdvZmYgKCkgMjc2PGJyPtCk0YPQvdC60YbQuNGPOiBkb19tdW5tYXAgKCkgMjc5PGJyPtCk0YPQvdC60YbQuNGPOiBmaW5kX3ZtYSAoKSAyODE8YnI+0KTRg9C90LrRhtC40Y86IGZpbmRfdm1hX2ludGVyc2VjdGlvbiAoKSAyODQ8YnI+0KTRg9C90LrRhtC40Y86IGZyZWVfcGFnZXMgKCkgMjg2PGJyPtCk0YPQvdC60YbQuNGPOiBmcmVlX3BhZ2VzX2V4YWN0ICgpIDI4Nzxicj7QpNGD0L3QutGG0LjRjzogZnJlZV92bV9hcmVhICgpIDI4ODxicj7QpNGD0L3QutGG0LjRjzogZ2V0X3VubWFwZWRfYXJlYSAoKSAyODg8YnI+0KTRg9C90LrRhtC40Y86IGdldF91c2VyX3BhZ2VzICgpIDI5MDxicj7QpNGD0L3QutGG0LjRjzogZ2V0X3VzZXJfcGFnZXNfZmFzdCAoKSAyOTI8YnI+0KTRg9C90LrRhtC40Y86IGdldF92bV9hcmVhX3NpemUgKCkgMjk0PGJyPtCk0YPQvdC60YbQuNGPOiBnZXRfemVyb2VkX3BhZ2UgKCkgMjk1PGJyPtCk0YPQvdC60YbQuNGPOiBrY2FsbG9jICgpIDI5Nzxicj7QpNGD0L3QutGG0LjRjzoga2ZyZWUgKCkgMjk5PGJyPtCk0YPQvdC60YbQuNGPOiBrbWFsbG9jICgpIDI5OTxicj7QpNGD0L3QutGG0LjRjzoga21hcF9oaWdoICgpIDMwMTxicj7QpNGD0L3QutGG0LjRjzoga21lbV9jYWNoZV9hbGxvYyAoKSAzMDM8YnI+0KTRg9C90LrRhtC40Y86IGttZW1fY2FjaGVfY3JlYXRlICgpIDMwNTxicj7QpNGD0L3QutGG0LjRjzoga21lbV9jYWNoZV9kZXN0cm95ICgpIDMwODxicj7QpNGD0L3QutGG0LjRjzoga21lbV9jYWNoZV9mcmVlICgpIDMwODxicj7QpNGD0L3QutGG0LjRjzoga21lbV9jYWNoZV96YWxsb2MgKCkgMzA5PGJyPtCk0YPQvdC60YbQuNGPOiBrbWVtZHVwICgpIDMxMTxicj7QpNGD0L3QutGG0LjRjzoga3JlYWxsb2MgKCkgMzEzPGJyPtCk0YPQvdC60YbQuNGPOiBrc2l6ZSAoKSAzMTU8YnI+0KTRg9C90LrRhtC40Y86IGtzdHJkdXAgKCkgMzE4PGJyPtCk0YPQvdC60YbQuNGPOiBrc3RybmR1cCAoKSAzMTk8YnI+0KTRg9C90LrRhtC40Y86IGt1bm1hcF9oaWdoICgpIDMyMTxicj7QpNGD0L3QutGG0LjRjzoga3phbGxvYyAoKSAzMjE8YnI+0KTRg9C90LrRhtC40Y86IG1lbWR1cF91c2VyICgpIDMyMzxicj7QpNGD0L3QutGG0LjRjzogbWVtcG9vbF9hbGxvYyAoKSAzMjU8YnI+0KTRg9C90LrRhtC40Y86IG1lbXBvb2xfYWxsb2NfcGFnZXMgKCkgMzI3PGJyPtCk0YPQvdC60YbQuNGPOiBtZW1wb29sX2FsbG9jX3NsYWIgKCkgMzI5PGJyPtCk0YPQvdC60YbQuNGPOiBtZW1wb29sX2NyZWF0ZSAoKSAzMzE8YnI+0KTRg9C90LrRhtC40Y86IG1lbXBvb2xfY3JlYXRlX2t6YWxsb2NfcG9vbCAoKSAzMzM8YnI+0KTRg9C90LrRhtC40Y86IG1lbXBvb2xfZGVzdHJveSAoKSAzMzQ8YnI+0KTRg9C90LrRhtC40Y86IG1lbXBvb2xfZnJlZSAoKSAzMzU8YnI+0KTRg9C90LrRhtC40Y86IG1lbXBvb2xfZnJlZV9wYWdlcyAoKSAzMzU8YnI+0KTRg9C90LrRhtC40Y86IG1lbXBvb2xfZnJlZV9zbGFiICgpIDMzNjxicj7QpNGD0L3QutGG0LjRjzogbWVtcG9vbF9rZnJlZSAoKSAzMzY8YnI+0KTRg9C90LrRhtC40Y86IG1lbXBvb2xfa21hbGxvYyAoKSAzMzc8YnI+0KTRg9C90LrRhtC40Y86IG1lbXBvb2xfa3phbGxvYyAoKSAzMzk8YnI+0KTRg9C90LrRhtC40Y86IG1lbXBvb2xfcmVzaXplICgpIDM0MTxicj7QpNGD0L3QutGG0LjRjzogbnJfZnJlZV9idWZmZXJfcGFnZXMgKCkgMzQzPGJyPk1hY3JvOiBwYWdlX2FkZHJlc3MgKCkgMzQ1PGJyPtCc0LDQutGA0L46IHBhZ2VfY2FjaGVfZ2V0ICgpIDM0Njxicj5NYWNybzogcGFnZV9jYWNoZV9yZWxlYXNlICgpIDM0ODxicj7QpNGD0L3QutGG0LjRjzogcGFnZV96b25lICgpIDM0OTxicj5NYWNybzogZ3JvYmVfa2VybmVsX2FkZHJlc3MgKCkgMzUyPGJyPtCk0YPQvdC60YbQuNGPOiBncm9iZV9rZXJuZWxfcmVhZCAoKSAzNTQ8YnI+0KTRg9C90LrRhtC40Y86IGdyb3ZlX2tlcm5lbF93cml0ZSAoKSAzNTU8YnI+0KTRg9C90LrRhtC40Y86IHZmcmVlICgpIDM1Nzxicj7QpNGD0L3QutGG0LjRjzogdm1hX3BhZ2VzICgpIDM1ODxicj7QpNGD0L3QutGG0LjRjzogdm1hbGxvYyAoKSAzNTk8YnI+0KTRg9C90LrRhtC40Y86IHZtYWxsb2NfdG9fcGFnZSAoKSAzNjE8YnI+0KTRg9C90LrRhtC40Y86IHZtYWxsb2NfdG9fcGZuICgpIDM2Mzxicj7QpNGD0L3QutGG0LjRjzogdm1hbGxvY191c2VyICgpIDM2NTxicj7QodGB0YvQu9C60LAgMzY2PGJyPtCT0JvQkNCS0JAgNyDQnNCV0KXQkNCd0JjQl9CcINCT0KDQndCV0JvQryDQnNCV0KXQkNCd0JjQl9Cc0JAg0K/QtNGA0LAgTGludXggQVBJIDM2ODxicj7QpNGD0L3QutGG0LjRjzogX19yb3VuZF9qaWZmaWVzICgpIDM2ODxicj7QpNGD0L3QutGG0LjRjzogX19yb3VuZF9qaWZmaWVzX3JlbGF0aXZlICgpIDM2OTxicj7QpNGD0L3QutGG0LjRjzogX19yb3VuZF9qaWZmaWVzX3VwICgpIDM3MTxicj7QpNGD0L3QutGG0LjRjzogX19yb3VuZF9qaWZmaWVzX3VwX3JlbGF0aXZlICgpIDM3Mzxicj7QpNGD0L3QutGG0LjRjzogX190aW1lQ29tcGFyZV91cGRhdGUgKCkgMzc1PGJyPtCk0YPQvdC60YbQuNGPOiBhZGRfdGltZXIgKCkgMzc3PGJyPtCk0YPQvdC60YbQuNGPOiBjdXJyZW50X2tlcm5lbF90aW1lICgpIDM3ODxicj7QpNGD0L3QutGG0LjRjzogZGVsX3RpbWVyICgpIDM4MDxicj7QpNGD0L3QutGG0LjRjzogZGVsX3RpbWVyX3N5bmMgKCkgMzgyPGJyPtCk0YPQvdC60YbQuNGPOiBkb19nZXRUaW1lT2ZkYXkgKCkgMzg0PGJyPtCk0YPQvdC60YbQuNGPOiBkb19zZXR0aW1lT2ZkYXkgKCkgMzg2PGJyPtCk0YPQvdC60YbQuNGPOiBnZXRfc2Vjb25kcyAoKSAzODg8YnI+0KTRg9C90LrRhtC40Y86IGdldE5zdGltZU9mZGF5ICgpIDM5MDxicj7QpNGD0L3QutGG0LjRjzogaW5pdF90aW1lciAoKSAzOTE8YnI+0KTRg9C90LrRhtC40Y86IGluaXRfdGltZXJfZGVmZXJyYWJsZSAoKSAzOTM8YnI+0KTRg9C90LrRhtC40Y86IGluaXRfdGltZXJfZGVmZXJyYWJsZV9rZXkgKCkgMzk1PGJyPtCk0YPQvdC60YbQuNGPOiBpbml0X3RpbWVyX2tleSAoKSAzOTg8YnI+0KTRg9C90LrRhtC40Y86IGluaXRfdGltZXJfb25fc3RhY2sgKCkgNDAwPGJyPtCk0YPQvdC60YbQuNGPOiBpbml0X3RpbWVyX29uX3N0YWNrX2tleSAoKSA0MDI8YnI+0KTRg9C90LrRhtC40Y86IG1rdGltZSAoKSA0MDQ8YnI+0KTRg9C90LrRhtC40Y86IG1vZF90aW1lciAoKSA0MDY8YnI+0KTRg9C90LrRhtC40Y86IG1vZF90aW1lcl9wZW5kaW5nICgpIDQwODxicj7QpNGD0L3QutGG0LjRjzogbnNfdG9fdGltZXNwZWMgKCkgNDEwPGJyPtCk0YPQvdC60YbQuNGPOiBuc190b190aW1ldmFsICgpIDQxMjxicj7QpNGD0L3QutGG0LjRjzogcm91bmRfamlmZmllcyAoKSA0MTQ8YnI+0KTRg9C90LrRhtC40Y86IHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUgKCkgNDE2PGJyPtCk0YPQvdC60YbQuNGPOiByb3VuZF9qaWZmaWVzX3VwICgpIDQxODxicj7QpNGD0L3QutGG0LjRjzogcm91bmRfamlmZmllc191cF9yZWxhdGl2ZSAoKSA0MjA8YnI+0KTRg9C90LrRhtC40Y86IHNldF9ub3JtYWxpemVkX3RpbWVzcGVjICgpIDQyMjxicj7QpNGD0L3QutGG0LjRjzogc2V0dXBfdGltZXIgKCkgNDI0PGJyPtCk0YPQvdC60YbQuNGPOiBzZXR1cF90aW1lcl9rZXkgKCkgNDI2PGJyPtCk0YPQvdC60YbQuNGPOiBzZXR1cF90aW1lcl9vbl9zdGFjayAoKSA0Mjg8YnI+0KTRg9C90LrRhtC40Y86IHNldHVwX3RpbWVyX29uX3N0YWNrX2tleSAoKSA0MzA8YnI+0KTRg9C90LrRhtC40Y86IHRpbWVjb21wYXJlX29mZnNldCAoKSA0MzI8YnI+0KTRg9C90LrRhtC40Y86IHRpbWVDb21wYXJlX3RyYW5zZm9ybSAoKSA0MzU8YnI+0KTRg9C90LrRhtC40Y86IHRpbWVDb21wYXJlX3VwZGF0ZSAoKSA0MzY8YnI+0KTRg9C90LrRhtC40Y86IHRpbWVyX3BlbmRpbmcgKCkgNDM5PGJyPtCk0YPQvdC60YbQuNGPOiB0aW1lc3BlY19hZGRfbnMgKCkgNDQxPGJyPtCk0YPQvdC60YbQuNGPOiB0aW1lc3BlY19jb21wYXJlICgpIDQ0Mjxicj7QpNGD0L3QutGG0LjRjzogdGltZXNwZWNfZXF1YWwgKCkgNDQ0PGJyPtCk0YPQvdC60YbQuNGPOiB0aW1lc3BlY19zdWIgKCkgNDQ2PGJyPtCk0YPQvdC60YbQuNGPOiB0aW1lc3BlY190b19ucyAoKSA0NDg8YnI+0KTRg9C90LrRhtC40Y86IHRpbWVWYWxfY29tcGFyZSAoKSA0NTA8YnI+0KTRg9C90LrRhtC40Y86IHRpbWVWYWxfdG9fbnMgKCkgNDUyPGJyPtCk0YPQvdC60YbQuNGPOiB0cnlfdG9fZGVsX3RpbWVyX3N5bmMgKCkgNDUzPGJyPtCh0YHRi9C70LrQuCA0NTY8YnI+0JPQu9Cw0LLQsCA4INCc0LXRhdCw0L3QuNC30Lwg0YHQuNC90YXRgNC+0L3QuNC30LDRhtC40Lgg0Y/QtNGA0LAgTGludXggQVBJIDQ1Nzxicj7QpNGD0L3QutGG0LjRjzogYXRvbWljX2FkZCAoKSA0NTc8YnI+0KTRg9C90LrRhtC40Y86IGF0b21pY19hZGRfbmVnYXRpdmUgKCkgNDU4PGJyPtCk0YPQvdC60YbQuNGPOiBhdG9taWNfYWRkX3JldHVybiAoKSA0NjA8YnI+0KTRg9C90LrRhtC40Y86IGF0b21pY19hZGRfdW5sZXNzICgpIDQ2MTxicj5NYWNybzogYXRvbWljX2NtcHhjaGcgKCkgNDYzPGJyPtCk0YPQvdC60YbQuNGPOiBhdG9taWNfZGVjICgpIDQ2NDxicj7QpNGD0L3QutGG0LjRjzogYXRvbWljX2RlY19hbmRfdGVzdCAoKSA0NjY8YnI+0KTRg9C90LrRhtC40Y86IGF0b21pY19pbmMgKCkgNDY3PGJyPtCk0YPQvdC60YbQuNGPOiBhdG9taWNfaW5jX2FuZF90ZXN0ICgpIDQ2OTxicj5NYWNybzogYXRvbWljX3JlYWQgKCkgNDcwPGJyPk1hY3JvOiBhdG9taWNfc2V0ICgpIDQ3MTxicj7QpNGD0L3QutGG0LjRjzogYXRvbWljX3N1YiAoKSA0NzI8YnI+0KTRg9C90LrRhtC40Y86IGF0b21pY19zdWJfYW5kX3Rlc3QgKCkgNDc0PGJyPtCk0YPQvdC60YbQuNGPOiBhdG9taWNfc3ViX3JldHVybiAoKSA0NzU8YnI+0KTRg9C90LrRhtC40Y86IGRvd24gKCkgNDc3PGJyPtCk0YPQvdC60YbQuNGPOiBEb3duX0ludGVydGlibGUgKCkgNDc5PGJyPtCk0YPQvdC60YbQuNGPOiBkb3duX2tpbGxhYmxlICgpIDQ4MTxicj7QpNGD0L3QutGG0LjRjzogZG93bl9yZWFkICgpIDQ4Mzxicj7QpNGD0L3QutGG0LjRjzogZG93bl9yZWFkX3RyeWxvY2sgKCkgNDg1PGJyPtCk0YPQvdC60YbQuNGPOiBkb3duX3RpbWVvdXQgKCkgNDg3PGJyPtCk0YPQvdC60YbQuNGPOiBkb3duX3RyeWxvY2sgKCkgNDg5PGJyPtCk0YPQvdC60YbQuNGPOiBkb3duX3dyaXRlICgpIDQ5MTxicj7QpNGD0L3QutGG0LjRjzogZG93bl93cml0ZV90cnlsb2NrICgpIDQ5Mjxicj7QpNGD0L3QutGG0LjRjzogRG93bmdyYWRlX1dyaXRlICgpIDQ5NDxicj5NYWNybzogaW5pdF9yd3NlbSAoKSA0OTY8YnI+0JzQsNC60YDQvjogcmVhZF9sb2NrICgpIDQ5ODxicj7QpNGD0L3QutGG0LjRjzogcmVhZF9zZXFiZWdpbiAoKSA0OTk8YnI+0KTRg9C90LrRhtC40Y86IHJlYWRfc2VxcmV0cnkgKCkgNTAwPGJyPtCc0LDQutGA0L46IHJlYWRfdHJ5bG9jayAoKSA1MDM8YnI+0JzQsNC60YDQvjogcmVhZF91bmxvY2sgKCkgNTA0PGJyPtCc0LDQutGA0L46IHJ3bG9ja19pbml0ICgpIDUwNTxicj7QpNGD0L3QutGG0LjRjzogc2VtYV9pbml0ICgpIDUwODxicj7QnNCw0LrRgNC+OiBzZXFsb2NrX2luaXQgKCkgNTA5PGJyPtCc0LDQutGA0L46IHNwaW5fY2FuX2xvY2sgKCkgNTExPGJyPtCc0LDQutGA0L46IHNwaW5fbG9jayAoKSA1MTM8YnI+0JzQsNC60YDQvjogc3Bpbl9sb2NrX2JoICgpIDUxNDxicj7QnNCw0LrRgNC+OiBzcGluX2xvY2tfaW5pdCAoKSA1MTY8YnI+0JzQsNC60YDQvjogc3Bpbl9sb2NrX2lycSAoKSA1MTg8YnI+0JzQsNC60YDQvjogc3Bpbl9sb2NrX2lycXNhdmUgKCkgNTIwPGJyPtCc0LDQutGA0L46IHNwaW5fdHJ5bG9jayAoKSA1MjI8YnI+0JzQsNC60YDQvjogc3Bpbl91bmxvY2sgKCkgNTI1PGJyPtCc0LDQutGA0L46IHNwaW5fdW5sb2NrX2JoICgpIDUyNjxicj7QnNCw0LrRgNC+OiBzcGluX3VubG9ja19pcnEgKCkgNTI2PGJyPk1hY3JvOiBzcGluX3VubG9ja19pcnFyZXN0b3JlICgpIDUyNzxicj7QnNCw0LrRgNC+OiBzcGluX3VubG9ja193YWl0ICgpIDUyNzxicj7QpNGD0L3QutGG0LjRjzogdXAgKCkgNTI5PGJyPtCk0YPQvdC60YbQuNGPOiB1cF9yZWFkICgpIDUzMTxicj7QpNGD0L3QutGG0LjRjzogdXBfd3JpdGUgKCkgNTMyPGJyPtCc0LDQutGA0L46IHdyaXRlX2xvY2sgKCkgNTMyPGJyPtCk0YPQvdC60YbQuNGPOiB3cml0ZV9zZXFsb2NrICgpIDUzNDxicj7QpNGD0L3QutGG0LjRjzogd3JpdGVfc2VxdW5sb2NrICgpIDUzNDxicj7QnNCw0LrRgNC+OiB3cml0ZV90cnlsb2NrICgpIDUzNTxicj7QnNCw0LrRgNC+OiB3cml0ZV91bmxvY2sgKCkgNTM3PGJyPtCh0YHRi9C70LrQuCA1Mzc8YnI+0JPQu9Cw0LLQsCA5IExpbnV4INGE0LDQudC70L7QstCw0Y8g0YHQuNGB0YLQtdC80LAg0Y/QtNGA0LAgQVBJIDUzOTxicj7QpNGD0L3QutGG0LjRjzogX19tbnRfaXNfcmVhZG9ubHkgKCkgNTM5PGJyPtCk0YPQvdC60YbQuNGPOiBjdXJyZW50X3VtYXNrICgpIDU0MTxicj7QpNGD0L3QutGG0LjRjzogZF9hbGxvYyAoKSA1NDI8YnI+0KTRg9C90LrRhtC40Y86IGRfYWxsb2Nfcm9vdCAoKSA1NDQ8YnI+0KTRg9C90LrRhtC40Y86IGRfZGVsZXRlICgpIDU0Nzxicj7QpNGD0L3QutGG0LjRjzogZF9maW5kX2FsaWFzICgpIDU0Nzxicj7QpNGD0L3QutGG0LjRjzogZF9pbnZhbGlkYXRlICgpIDU0OTxicj7QpNGD0L3QutGG0LjRjzogZF9tb3ZlICgpIDU1MDxicj7QpNGD0L3QutGG0LjRjzogZF92YWxpZGF0ZSAoKSA1NTE8YnI+0KTRg9C90LrRhtC40Y86IGRwdXQgKCkgNTUzPGJyPtCk0YPQvdC60YbQuNGPOiBmZ2V0ICgpIDU1NDxicj7QpNGD0L3QutGG0LjRjzogZmluZF9pbm9kZV9udW1iZXIgKCkgNTU3PGJyPtCk0YPQvdC60YbQuNGPOiBnZW5lcmljX2ZpbGxhdHRyICgpIDU1OTxicj7QpNGD0L3QutGG0LjRjzogZ2V0X2VtcHR5X2ZpbHAgKCkgNTYxPGJyPtCk0YPQvdC60YbQuNGPOiBnZXRfZnNfdHlwZSAoKSA1NjM8YnI+0KTRg9C90LrRhtC40Y86IGdldF9tYXhfZmlsZXMgKCkgNTY1PGJyPtCk0YPQvdC60YbQuNGPOiBnZXRfc3VwZXIgKCkgNTY2PGJyPtCk0YPQvdC60YbQuNGPOiBnZXRfdW51c2VkX2ZkICgpIDU2OTxicj7QpNGD0L3QutGG0LjRjzogaGFmX3N1Ym1vdW50cyAoKSA1NzA8YnI+0KTRg9C90LrRhtC40Y86IGlfYmRldiAoKSA1NzI8YnI+0KTRg9C90LrRhtC40Y86IGlnZXRfbG9ja2VkICgpIDU3Mzxicj7QpNGD0L3QutGG0LjRjzogaW5vZGVfYWRkX2J5dGVzICgpIDU3NTxicj7QpNGD0L3QutGG0LjRjzogaW5vZGVfZ2V0X2J5dGVzICgpIDU3Njxicj7QpNGD0L3QutGG0LjRjzogaW5vZGVfbmVlZHNfc3luYyAoKSA1Nzg8YnI+0KTRg9C90LrRhtC40Y86IGlub2RlX3NldF9ieXRlcyAoKSA1ODA8YnI+0KTRg9C90LrRhtC40Y86IGlub2RlX3NldGF0dHIgKCkgNTgxPGJyPtCk0YPQvdC60YbQuNGPOiBpbm9kZV9zdWJfYnl0ZXMgKCkgNTg0PGJyPtCk0YPQvdC60YbQuNGPOiBJbnZhbGlkYXRlX2lub2RlcyAoKSA1ODY8YnI+0KTRg9C90LrRhtC40Y86IGlzX2JhZF9pbm9kZSAoKSA1ODc8YnI+0KTRg9C90LrRhtC40Y86IG1ha2VfYmFkX2lub2RlICgpIDU4ODxicj7QpNGD0L3QutGG0LjRjzogbWF5X3Vtb3VudCAoKSA1OTA8YnI+0KTRg9C90LrRhtC40Y86IG1heV91bW91bnRfdHJlZSAoKSA1OTE8YnI+0KTRg9C90LrRhtC40Y86IG1udF9waW4gKCkgNTkzPGJyPtCk0YPQvdC60YbQuNGPOiBtbnRfdW5waW4gKCkgNTk0PGJyPtCk0YPQvdC60YbQuNGPOiBtbnRfd2FudF93cml0ZSAoKSA1OTY8YnI+0KTRg9C90LrRhtC40Y86IG5ld19pbm9kZSAoKSA1OTY8YnI+0KTRg9C90LrRhtC40Y86IG5vdGlmeV9jaGFuZ2UgKCkgNTk4PGJyPtCk0YPQvdC60YbQuNGPOiBwdXRfdW51c2VkX2ZkICgpIDYwMDxicj7QpNGD0L3QutGG0LjRjzogUmVnaXN0ZXJfZmlsZXN5c3RlbSAoKSA2MDI8YnI+0KTRg9C90LrRhtC40Y86IHVucmVnaXN0ZXJfZmlsZXN5c3RlbSAoKSA2MDQ8YnI+0KTRg9C90LrRhtC40Y86IHVuc2hhcmVfZnNfc3RydWN0ICgpIDYwNDxicj7QpNGD0L3QutGG0LjRjzogdmZzX2ZzdGF0ICgpIDYwNjxicj7QpNGD0L3QutGG0LjRjzogdmZzX2dldGF0dHIgKCkgNjA4PGJyPtCk0YPQvdC60YbQuNGPOiB2ZnNfc3RhdGZzICgpIDYxMDxicj7QodGB0YvQu9C60LggNjEzPGJyPtCT0LvQsNCy0LAgMTAgTGludXggRGV2aWNlIERyaXZlciBEaXZhbmNlINC4IEFQSSDRg9C/0YDQsNCy0LvQtdC90LjRjyDRg9GB0YLRgNC+0LnRgdGC0LLQsNC80LggNjE0PGJyPtCk0YPQvdC60YbQuNGPOiBfX2NsYXNzX2NyZWF0ZSAoKSA2MTQ8YnI+0KTRg9C90LrRhtC40Y86IF9fY2xhc3NfcmVnaXN0ZXIgKCkgNjE1PGJyPtCk0YPQvdC60YbQuNGPOiBjZGV2X2FkZCAoKSA2MTY8YnI+0KTRg9C90LrRhtC40Y86IGNkZXZfYWxsb2MgKCkgNjE3PGJyPtCk0YPQvdC60YbQuNGPOiBjZGV2X2RlbCAoKSA2MTk8YnI+0KTRg9C90LrRhtC40Y86IGNkZXZfaW5pdCAoKSA2MjQ8YnI+TWFjcm86IGNsYXNzX2NyZWF0ZSAoKSA2Mjg8YnI+0KTRg9C90LrRhtC40Y86IGNsYXNzX2Rlc3Ryb3kgKCkgNjI5PGJyPtCc0LDQutGA0L46IGNsYXNzX3JlZ2lzdGVyICgpIDYzMTxicj7QpNGD0L3QutGG0LjRjzogY2xhc3NfdW5yZWdpc3RlciAoKSA2MzI8YnI+0KTRg9C90LrRhtC40Y86IGRldmljZV9hZGQgKCkgNjM3PGJyPtCk0YPQvdC60YbQuNGPOiBkZXZpY2VfY3JlYXRlICgpIDYzODxicj7QpNGD0L3QutGG0LjRjzogZGV2aWNlX2RlbCAoKSA2NDA8YnI+0KTRg9C90LrRhtC40Y86IGRldmljZV9kZXN0cm95ICgpIDY0MDxicj7QpNGD0L3QutGG0LjRjzogZGV2aWNlX2luaXRpYWxpemUgKCkgNjQ2PGJyPtCk0YPQvdC60YbQuNGPOiBkZXZpY2VfcmVnaXN0ZXIgKCkgNjUyPGJyPtCk0YPQvdC60YbQuNGPOiBkZXZpY2VfcmVuYW1lICgpIDY1Mjxicj7QpNGD0L3QutGG0LjRjzogZGV2aWNlX3VucmVnaXN0ZXIgKCkgNjU3PGJyPtCk0YPQvdC60YbQuNGPOiBnZXRfZGV2aWNlICgpIDY2Mzxicj7QpNGD0L3QutGG0LjRjzogcHV0X2RldmljZSAoKSA2NjM8YnI+0KTRg9C90LrRhtC40Y86IFJlZ2lzdGVyX2NocmRldiAoKSA2Njc8YnI+0KTRg9C90LrRhtC40Y86IFJlZ2lzdGVyX2tleWJvYXJkX25vdGlmaWVyICgpIDY2ODxicj7QpNGD0L3QutGG0LjRjzogdW5yZWdpc3Rlcl9jaHJkZXYgKCkgNjY5PGJyPtCk0YPQvdC60YbQuNGPOiB1bnJlZ2lzdGVyX2tleWJvYXJkX25vdGlmaWVyICgpIDY3NTxicj7QntC/0LjRgdCw0L3QuNC1INC90LXQutC+0YLQvtGA0YvRhSDRgdCy0Y/Qt9Cw0L3QvdGL0YUg0YTRg9C90LrRhtC40LkgNjc5PGJyPtCh0YHRi9C70LrQuCA2Nzk8YnI+0J/RgNC40LvQvtC20LXQvdC40LUgTGludXgg0Y/QtNGA0LAgQVBJIFF1aWNrIFNlYXJjaCBUYWJsZSA2ODA8YnI+PC90ZD48L3RyPjwvdGFibGU+PHRhYmxlIHdpZHRoPSI3NTAiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBzdHlsZT0iYm9yZGVyOiAxLjBweCBzb2xpZCAjY2NjY2NjO21hcmdpbi10b3A6IDEwLjBweDtsaW5lLWhlaWdodDogMjMuMHB4O2ZvbnQtc2l6ZTogMTQuMHB4O2NvbG9yOiAjNjY2NjY2OyI+PHRyPjx0ZCBzdHlsZT0iYm9yZGVyLWJvdHRvbTogMS4wcHggZGFzaGVkICNjY2NjY2M7YmFja2dyb3VuZC1jb2xvcjogI2ZiZmJmYjtmb250LXdlaWdodDogYm9sZDtjb2xvcjogIzk5MDAwMDsiPjxpbWcgc3JjPSJodHRwczovL2ltZy5hbGljZG4uY29tL2ltZ2V4dHJhL2kxLzIxNzA0Mjk3Ni9UQjIyXzZBdzFHU0J1TmpTc3BiWFhjaWlwWGFfISEyMTcwNDI5NzYuanBnIj48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0icGFkZGluZzogMTAuMHB4O2NvbG9yOiAjMDAwMDAwOyI+0JLRgdGC0YPQv9C40LIg0LIgMjEgLdC5INCy0LXQuiwg0JjQoiAt0YLQtdGF0L3QvtC70L7Qs9C40Y8g0LTQstC40LbQtdGC0YHRjyDQstC/0LXRgNC10LQg0YEg0LHQtdGB0L/RgNC10YbQtdC00LXQvdGC0L3QvtC5INGB0LrQvtGA0L7RgdGC0YzRji7QmtCw0Log0L7Qv9C10YDQsNGG0LjQvtC90L3QsNGPINGB0LjRgdGC0LXQvNCwINGBINC+0YLQutGA0YvRgtGL0Lwg0LjRgdGF0L7QtNC90YvQvCDQutC+0LTQvtC8LCBMaW51eCDQv9GA0L7QtNC+0LvQttCw0LXRgiDRgNCw0YHRgtC4INC4INGD0LvRg9GH0YjQsNGC0YzRgdGPINGBINGB0L7QstC80LXRgdGC0L3Ri9C80Lgg0YPRgdC40LvQuNGP0LzQuCDQvNC90L7Qs9C40YUg0Y3QvdGC0YPQt9C40LDRgdGC0L7Qsi7Qn9C+0YHQutC+0LvRjNC60YMg0YDQsNC30LvQuNGH0L3Ri9C1INC60L7QvNC/0L7QvdC10L3RgtGLINC4INGB0LjRgdGC0LXQvNC90YvQtSDRgNCw0YHQv9GA0LXQtNC10LvQtdC90LjRjywg0YDQsNC30YDQsNCx0L7RgtCw0L3QvdGL0LUg0L/RgNC+0LPRgNCw0LzQvNC+0LkgR05VLCDQvNC+0LPRg9GCINGA0LDQsdC+0YLQsNGC0Ywg0L3QsCDRj9C00YDQtSBMaW51eCwg0LLRgdC1INGP0LTRgNC+IOKAi+KAi0xpbnV4INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCINGI0LjRgNC+0LrQvtC5INC/0YPQsdC70LjRh9C90L7QuSDQu9C40YbQtdC90LfQuNC4IChHTlUpLCDQtNC10LvQsNGPIExpbnV4INC90LAg0J/Qmiwg0YHQtdGA0LLQtdGA0LDRhSDQuCDRgNCw0LfRgNCw0LHQvtGC0LrQtSDQstGB0YLRgNC+0LXQvdC90YvRhSDRgdC40YHRgtC10LwsINCwINC00YDRg9Cz0LjQtSDQv9C+0LvRjyDRiNC40YDQvtC60L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQu9C40YHRjCDQn9C+0LvQtdC80JIg0LTQvtC70LPQvtGB0YDQvtGH0L3QvtC5INGA0LDQt9GA0LDQsdC+0YLQutC1INGP0LTRgNCwIExpbnV4INGA0LXQtNCw0LrRgtC+0YAg0L7QsdC90LDRgNGD0LbQuNC7LCDRh9GC0L4g0LIg0L3QsNGB0YLQvtGP0YnQtdC1INCy0YDQtdC80Y8g0LzQsNC70L4g0LrQvdC40LMg0LLQstC+0LTQuNGCIEFQSVMg0Y/QtNGA0LAu0JIg0L3QsNGB0YLQvtGP0YnQtdC1INCy0YDQtdC80Y8g0LrQvdC40LPQuCDQv9C+INC/0YDQvtCz0YDQsNC80LzQuNGA0L7QstCw0L3QuNGOINC4INGA0LDQt9GA0LDQsdC+0YLQutC1INGP0LTRgNCwIExpbnV4INC80L7QttC90L4g0YDQsNC30LTQtdC70LjRgtGMINC90LAg0YLRgNC4INC60LDRgtC10LPQvtGA0LjQuDog0L/QtdGA0LLQsNGPINC60LDRgtC10LPQvtGA0LjRjyAtINCw0L3QsNC70LjQtyDRj9C00YDQsCBMaW51eCDQmtCw0YLQtdCz0L7RgNC40Y8t0Y3RgtC+INC/0YDQvtCz0YDQsNC80LzQuNGA0L7QstCw0L3QuNC1IExpbnV4LCDQutC+0YLQvtGA0LDRjyDQsiDQvtGB0L3QvtCy0L3QvtC8INGE0L7QutGD0YHQuNGA0YPQtdGC0YHRjyDQvdCwINC/0YDQvtCz0YDQsNC80LzQuNGA0L7QstCw0L3QuNC4INC90LAg0YPRgNC+0LLQvdC1INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjywg0L7QsdGL0YfQvdC+INCy0LrQu9GO0YfQsNGO0YnQtdCz0L4gQVBJINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjzvQlNC70Y8g0L/RgNC+0LPRgNCw0LzQvNC40YDQvtCy0LDQvdC40Y8g0Lgg0YDQsNC30YDQsNCx0L7RgtC60Lgg0YEg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LXQvCDRj9C00YDQsCBMaW51eCDQstCw0Lwg0L3QtdC+0LHRhdC+0LTQuNC80L4g0LjQvNC10YLRjCDQstGB0LXQvtCx0YrQtdC80LvRjtGJ0LXQtSDQv9C+0L3QuNC80LDQvdC40LUgQVBJINGP0LTRgNCwLtCd0LDQv9C40YHQsNC90LjQtSDRjdGC0L7QuSDQutC90LjQs9C4INC90LDRh9Cw0LvQvtGB0Ywg0LIg0LjRjtC90LUgMjAwOSDQs9C+0LTQsC4g0JLRgdC1INC/0YDQuNC80LXRgNGLINC/0YDQvtCy0LXRgNC60LggQVBJINGP0LTRgNCwINC+0YHQvdC+0LLQsNC90Ysg0L3QsCDQv9C+0YHQu9C10LTQvdC10Lkg0LLQtdGA0YHQuNC4INC40YHRhdC+0LTQvdC+0LPQviDQutC+0LTQsCBMaW51eCDRj9C00YDQsCAyLjYuMzAsINC60L7Qs9C00LAg0Y/QtNGA0L4g4oCL4oCLMi42LjMwINCx0YvQu9C+INGC0L7Qu9GM0LrQviDRh9GC0L4g0LLRi9C/0YPRidC10L3Qvi7Qn9C+0YHQu9C1INC/0L7Rh9GC0LggMTUg0LzQtdGB0Y/RhtC10LIg0LDQvdCw0LvQuNC30LAg0LjRgdGF0L7QtNC90L7Qs9C+INC60L7QtNCwLCDQv9GA0LDQutGC0LjQutC4INC/0YDQvtCz0YDQsNC80LzQuNGA0L7QstCw0L3QuNGPINC4INC/0YDQvtCy0LXRgNC60Lgg0Y3QutC30LXQvNC/0LvRj9GA0L7Qsiwg0L7QsdGL0YfQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0L3QvdGL0LUgQVBJIC3QuNC90YLQtdGA0YTQtdC50YHRiyDRj9C00YDQsCDQsdGL0LvQuCDRgdC40YHRgtC10LzQsNGC0LjRh9C10YHQutC4INC+0LHQvtCx0YnQtdC90YssINC4INCx0YvQu9C4INC90LDQv9C40YHQsNC90Ysg0YLQuNC/0LjRh9C90YvQtSDQv9GA0L7Qs9GA0LDQvNC80Ysg0L/RgNC+0LLQtdGA0LrQuCwg0LrQvtGC0L7RgNGL0LUg0LTQvtGB0YLQuNCz0LvQuCDQtdC00LjQvdGB0YLQstCwINGC0LXQvtGA0LXRgtC40YfQtdGB0LrQvtCz0L4g0LDQvdCw0LvQuNC30LAg0Lgg0L/RgNCw0LrRgtC40YfQtdGB0LrQvtCz0L4g0L/RgNC+0LPRgNCw0LzQvNC40YDQvtCy0LDQvdC40Y8u0JzQvtC00YPQu9C4IEFQSSDRj9C00YDQsCwg0L/RgNC+0LDQvdCw0LvQuNC30LjRgNC+0LLQsNC90L3Ri9C1INCyINGN0YLQvtC5INC60L3QuNCz0LUsINCy0LrQu9GO0YfQsNGO0YIg0LIg0YHQtdCx0Y86IEFQSSDQvNC10YXQsNC90LjQt9C80LAg0LzQvtC00YPQu9GPINGP0LTRgNCwLCBBUEkg0Y/QtNGA0LAg0YPQv9GA0LDQstC70LXQvdC40Y8g0L/RgNC+0YbQtdGB0YHQvtC8LCBBUEkgLUFQSSDQv9C70LDQvdC40YDQvtCy0LDQvdC40Y8g0L/RgNC+0YbQtdGB0YHQsCwgQVBJINC80LXRhdCw0L3QuNC30LzQsCDQv9GA0LXRgNGL0LLQsNC90LjRjywgQVBJINGP0LTRgNCwINGD0L/RgNCw0LLQu9C10L3QuNGPINC/0LDQvNGP0YLRjNGOLCBBUEkg0LLRgNC10LzQtdC90Lgg0Y/QtNGA0LAsINC80LXRhdCw0L3QuNC30Lwg0YHQuNC90YXRgNC+0L3QuNC30LDRhtC40Lgg0Y/QtNGA0LAsIEFQSSDRhNCw0LnQu9C+0LLQvtC5INGB0LjRgdGC0LXQvNGLIEFQSSBBUEkg0LggQVBJINGE0LDQudC70L7QstC+0Lkg0YHQuNGB0YLQtdC80YsgQVBJIEFQSSDQuCBBUEkg0YTQsNC50LvQvtCy0L7QuSDRgdC40YHRgtC10LzRiyBBUEkg0LggQVBJIEFQSSBGSUxFIFNZU1RFTSwg0Y/QtNGA0L4g4oCL4oCLQVBJIEFQSSDQuCDRj9C00YDQviDigIvigItBUEkgQVBJINC4INGP0LTRgNC+IOKAi+KAi0FQSSBBUEkg0Lgg0Y/QtNGA0L4g4oCL4oCLQVBJINGP0LTRgNCwIEFQSSDQuCDRj9C00YDQviDigIvigItBUEkgQVBJINC4INGP0LTRgNC+IOKAi+KAi0FQSSBBUEkg0Lgg0Y/QtNGA0L4g4oCL4oCLQVBJIEFQSSDQuCDRj9C00YDQviDigIvigItBUEkgQVBJINC4IEFQSSDRhNCw0LnQu9C+0LLQvtC5INGB0LjRgdGC0LXQvNGLIEFQSSDQuCBBUEkgQVBJIEZJTEUgU1lTVEVNLiDQo9GB0YLRgNC+0LnRgdGC0LLQsCDQtNGA0LDQudCy0LXRgNCwINC4INGD0L/RgNCw0LLQu9C10L3QuNGPINGD0YHRgtGA0L7QudGB0YLQstCw0LzQuCBBUEku0JLQviDQstGA0LXQvNGPINC/0YDQuNC80LXRgNCwINC/0YDQvtGG0LXRgdGB0LAg0L3QsNC/0LjRgdCw0L3QuNGPLCDQsdC70LDQs9C+0LTQsNGA0Y8g0KfRjdC90YMg0KHRj9C+INC30LAg0YPRh9Cw0YHRgtC40LUg0LIg0L/RgNC+0LLQtdGA0LrQtSDQvdC10LrQvtGC0L7RgNGL0YUg0YHQu9GD0YfQsNC10LIg0LIg0LPQu9Cw0LLQtSA4LCDQktCw0L0g0JLQtdC5LCDQktCw0L0g0K/QutGD0L0g0Lgg0K4g0JvQvtC90LMsINC60L7QvNCw0L3QtNCwINC/0YDQvtC10LrRgtCwINGBINC+0YLQutGA0YvRgtGL0Lwg0LjRgdGF0L7QtNC90YvQvCDQutC+0LTQvtC8INC/0YDQuNC90Y/Qu9CwINGD0YfQsNGB0YLQuNC1INCyINC+0LHRgdGD0LbQtNC10L3QuNC4INC/0YDQvtC10LrRgtCwINC4INC/0YDQvtCw0L3QsNC70LjQt9C40YDQvtCy0LDQu9CwINC/0YDQuNC80LXRgNGLLtCa0YDQvtC80LUg0YLQvtCz0L4sINCyINC/0YDQvtGG0LXRgdGB0LUg0L3QsNC/0LjRgdCw0L3QuNGPINC80Ysg0LLRi9GB0LvRg9GI0LDQu9C4INC80L3QtdC90LjRjyDQuCDQv9GA0LXQtNC70L7QttC10L3QuNGPINC60L7Qu9C70LXQsyDQuCDRjdC60YHQv9C10YDRgtC+0LIgLdGB0LLQtdGA0YHRgtC90LjQutC+0LIg0Lgg0L/RgNC+0LrQvtC90YHRg9C70YzRgtC40YDQvtCy0LDQu9C40YHRjCDRgSDQsdC+0LvRjNGI0LjQvCDQutC+0LvQuNGH0LXRgdGC0LLQvtC8INC00L7QvNCw0YjQvdC10Lkg0Lgg0LjQvdC+0YHRgtGA0LDQvdC90L7QuSDQu9C40YLQtdGA0LDRgtGD0YDRiywg0L7RgdC+0LHQtdC90L3QviDRjdC90YLRg9C30LjQsNGB0YLQvtCyIExpbnV4LCDQutC+0YLQvtGA0YvQtSDQsNC60YLQuNCy0L3RiyDQsiDRgdC+0L7QsdGJ0LXRgdGC0LLQtSDRgSDQvtGC0LrRgNGL0YLRi9C8INC40YHRhdC+0LTQvdGL0Lwg0LrQvtC00L7QvCDQuCDQstGL0YDQsNC30LjQu9C4INGB0LLQvtGOINCx0LvQsNCz0L7QtNCw0YDQvdC+0YHRgtGMINC40LwuINCf0L7Qu9C10LzQmNC3IC3Qt9CwINCx0YvRgdGC0YDQvtC5INGB0LrQvtGA0L7RgdGC0Lgg0L7QsdC90L7QstC70LXQvdC40Y8gTGludXgg0Lgg0L7Qs9GA0LDQvdC40YfQtdC90L3QvtC5INGI0LjRgNC+0YLRiyDQuCDQs9C70YPQsdC40L3RiyDQt9C90LDQvdC40Lkg0YDQtdC00LDQutGC0L7RgNCwLCDQv9C+0LbQsNC70YPQudGB0YLQsCwg0LrRgNC40YLQuNC60YPQudGC0LUg0Lgg0LjRgdC/0YDQsNCy0LvRj9C50YLQtSDQu9GO0LHRi9C1INC+0YjQuNCx0LrQuCDQuCDQvdC10YPQvNC10YHRgtC90YvQtSDQsNGB0L/QtdC60YLRiyDQsiDQutC90LjQs9C1LtCf0L4g0LLQvtC/0YDQvtGB0LDQvCDQsiDQutC90LjQs9C1LCDRh9C40YLQsNGC0LXQu9C4INC80L7Qs9GD0YIg0L7RgtC/0YDQsNCy0LjRgtGMINC40YUg0L/QviDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0LU6IG9wZW5saW51eDIxMDBAZ21haWwuY29tLCDRh9GC0L7QsdGLINGB0LLQvtC10LLRgNC10LzQtdC90L3QviDQvtCx0YnQsNGC0YzRgdGPINGBINCw0LLRgtC+0YDQvtC8LCDRh9GC0L7QsdGLINC40YUg0LzQvtC20L3QviDQsdGL0LvQviDQuNGB0L/RgNCw0LLQuNGC0Ywg0Lgg0YPQu9GD0YfRiNC40YLRjCDQstC+INCy0YDQtdC80Y8g0L/QtdGA0LXQv9C10YfQsNGC0LrQuC7QoNC10LTQsNC60YLQvtGAIDEg0L7QutGC0Y/QsdGA0Y8gMjAxMCDQsy4g0LIg0JTQsNC70Y/QvdC1PC90ZD48L3RyPjwvdGFibGU+PGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMTAuMHB4OyI+PGltZyBzcmM9Imh0dHBzOi8vaW1nLmFsaWNkbi5jb20vaW1nZXh0cmEvaTIvMjE3MDQyOTc2L1QyMllrT1h1cGFYWFhYWFhYWC0yMTcwNDI5NzYuZ2lmIiB3aWR0aD0iNzUwIiBoZWlnaHQ9IjQ3Ij4uLjwvZGl2PjxpbWcgY2xhc3M9ImRlc2NfYW5jaG9yIiBpZD0iZGVzYy1tb2R1bGUtMiIgc3JjPSJodHRwczovL2Fzc2V0cy5hbGljZG4uY29tL2tpc3N5LzEuMC4wL2J1aWxkL2ltZ2xhenlsb2FkL3NwYWNlYmFsbC5naWYiPjxwPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDM2LjBweDtjb2xvcjogI2NjMDAwMDsiPjxzdHJvbmc+0JrQvdC40LPQuCwg0L/RgNC+0LTQsNCy0LDQtdC80YvQtSDQsiDRjdGC0L7QvCDQvNCw0LPQsNC30LjQvdC1LCDRj9Cy0LvRj9GO0YLRgdGPINC90LDRgdGC0L7Rj9GJ0LjQvNC4INC60L3QuNCz0LDQvNC4PC9zdHJvbmc+PC9zcGFuPjwvcD48L3A+
Продавец:奥维博世图书专营店
Адрес:Пекин
Рейтинг:

Всего отзывов:0
Положительных:0
Добавить в корзину
- Информация о товаре
- Фотографии



| Заголовок: | 【Подлинный】 (Специальная книга) Ядра Linux Полное справочное руководство | 197467 |
| Цена книги: | 79 Юань |
| Автор книги: | Qiu Tie; |
| Издательство: | Машиностроительная промышленность Пресса |
| Дата публикации: | 2011-01-01 Суббота 00:00:00 |
| Номер ISBN: | 9787111323570 |
| формат: | 16 |
| Количество страниц: | 684 |
| Издание: | 1-1 |
| Введение в контент |
| Linux, как операционная система с открытым исходным кодом, широко использовался в компьютерах и встроенных устройствах, поэтому становится все более важным изучать развитие и программирование ядра Linux.Основываясь на последней версии ядра Linux 2.6.30, в этой книге систематически анализируется и суммирует широко используемые API -интерфейсы ядра, проектирует типичные примеры и предоставляет подробные объяснения сценариев разработки.Модули API ядра, проанализированные в этой книге, включают в себя: API механизма модуля ядра, API ядра управления процессом, API -API планирования процесса, API механизма прерывания, API ядра управления памятью, API времени ядра, механизм синхронизации ядра, API файловой системы API API и API файловой системы API API и API файловой системы API и API API FILE SYSTEM, ядро API API и ядро API API и ядро API API и ядро API ядра API и ядро API API и ядро API API и ядро API API и ядро API API и API файловой системы API и API API FILE SYSTEM. API управления драйвером и устройством устройства. Эта книга основана на анализе API API Linux, углубленной практике и подробном контенте, и читатели могут проводить эффективное анализ ядра и практику программирования с низкой отправной точки.Эта книга может использоваться в качестве учебника или справочника для студентов компьютера, электроники и информации в колледжах и университетах для изучения и программы операционной системы Linux, или в качестве справочника для разработчиков Linux, а также энтузиастов программирования и разработчиков Linux. |
| Каталог |
| Предисловие Как использовать эту книгу Глава 1 Основные знания анализа API ядра Linux 1 Меры предосторожности 1 ядра Linux 1 Компиляция модуля шаблон Makefile в этой книге 1 Функция отладки ядра Printk 2 Компиляция и настройка ядра 4 4 Теплое напоминание 10 Ссылки 11 ГЛАВА 2 МЕХАНИЗМ МОДЕЛЯ МОДУЛЯ ЛИНУСКА API 12 Функция: __module_address () 12 Функция: __module_ref_addr () 14 Функция: __module_text_address () 16 Функция: __print_symbol () 18 Функция: __symbol_get () 20 Функция: __symbol_put () 22 Функция: find_module () 24 Функция: find_symbol () 27 Функция: module_is_live () 30 Функция: module_put () 32 Функция: module_refcount () 34 Функция: sprint_symbol () 36 Функция: symbol_put_addr () 38 Функция: try_module_get () 40 Функция: use_module () 42 Ссылки 44 Глава 3 Linux управления процессом API 45 Функция: __task_pid_nr_ns () 45 Функция: find_get_pid () 47 Функция: find_pid _ns () 49 Функция: find_task_by_pid_ns () 51 Функция: find_task_by_pid_type _ns () 53 Функция: find_task_by_vpid () 55 Функция: find_vpid () 57 Функция: get_pid () 59 Функция: get_task_mm () 60 Функция: is_container_init () 63 Функция: kernel_thread () 65 Функция: mmput () 67 Функция: ns_of_pid () 69 Функция: pid_nr () 71 Функция: pid_task () 73 Функция: pid_vnr () 75 Функция: put_pid () 77 Функция: task_active_pid_ns () 79 Функция: task_tgid_nr_ns () 81 Ссылка 83 Глава 4 Linux Process Processing API API 84 Функция: __wake_up () 84 Функция: __wake_up_sync () 87 Функция: __wake_up_sync_key () 89 Функция: ABORT_EXCLUICE_WAIT () 91 Функция: add_preempt_count () 95 Функция: add_wait_queue () 97 Функция: add_wait_queue_exclusizing () 100 Функция: AutoreMove_wake_function () 102 Функция: complete () 106 Функция: complete_all () 108 Функция: complete_done () 111 Функция: current_thread_info () 113 Функция: default_wake_function () 115 Функция: do_exit () 118 Функция: finines_wait () 120 Функция: init_waitqueue_entry () 123 Функция: init_waitqueue_head () 125 Функция: Ertruptible_sleep_on () 127 Функция: Etretrupible_sleep_on_timeout () 130 Функция: preempt_notifier_register () 133 Функция: preempt_notifier_unregister () 136 Функция: Prepare_to_wait () 139 Функция: PREPARE_TO_WAIT_EXCLUICES () 142 Функция: remove_wait_queue () 146 Функция: shard_setscheduler () 149 Функция: set_cpus_allowed_ptr () 152 Функция: set_user_nice () 155 Функция: sleep_on () 158 Функция: sleep_on_timeout () 160 Функция: sub_preempt_count () 162 Функция: task_nice () 164 Функция: try_wait_for_completion () 166 Функция: wait_for_completion () 169 Функция: wait_for_completion_intertible () 172 Функция: wait_for_completion_intertible_ timeout () 175 Функция: wait_for_completion_killable () 179 Функция: wait_for_completion_timeout () 182 Функция: wake_up_process () 184 Функция: доход () 187 Ссылки 188 Глава 5 Linux Механизм прерывания API 189 Функция: __SET_IRQ_HANDLER () 189 Функция: __tasklet_hi_schedule () 191 Функция: __tasklet_schedule () 194 Функция: disable_irq () 196 Функция: disable_irq_nosync () 196 Функция: disable_irq_wake () 198 Функция: enable_irq () 201 Функция: enable_irq_wake () 203 Функция: free_irq () 205 Функция: kstat_irqs_cpu () 207 Функция: remove_irq () 209 Функция: request_irq () 213 Функция: request_threaded_irq () 216 Функция: SET_IRQ_CHIDE_HANDLER () 219 Функция: set_irq_chip () 221 Функция: set_irq_chip_data () 225 Функция: set_irq_data () 227 Функция: set_irq_handler () 229 Функция: set_irq_type () 232 Функция: set_irq_wake () 234 Функция: setup_irq () 237 Функция: tasklet_disable () 239 Функция: tasklet_disable_nosync () 241 Функция: tasklet_enable () 243 Функция: tasklet_hi_enable () 244 Функция: tasklet_hi_schedule () 246 Функция: tasklet_init () 248 Функция: tasklet_kill () 250 Функция: tasklet_shedule () 252 Функция: tasklet_trylock () 254 Функция: tasklet_unlock () 255 Ссылки 257 Глава 6 Linux Memange Management API 258 Функция: __free_pages () 258 Функция: __get_free_pages () 258 Функция: __get_vm_area () 260 Функция: __kRealloc () 262 Функция: alloc_pages () 265 Функция: alloc_pages_exact () 268 Функция: alloc_vm_area () 270 Функция: do_brk () 272 Функция: do_mmap () 273 Функция: do_mmap_pgoff () 276 Функция: do_munmap () 279 Функция: find_vma () 281 Функция: find_vma_intersection () 284 Функция: free_pages () 286 Функция: free_pages_exact () 287 Функция: free_vm_area () 288 Функция: get_unmaped_area () 288 Функция: get_user_pages () 290 Функция: get_user_pages_fast () 292 Функция: get_vm_area_size () 294 Функция: get_zeroed_page () 295 Функция: kcalloc () 297 Функция: kfree () 299 Функция: kmalloc () 299 Функция: kmap_high () 301 Функция: kmem_cache_alloc () 303 Функция: kmem_cache_create () 305 Функция: kmem_cache_destroy () 308 Функция: kmem_cache_free () 308 Функция: kmem_cache_zalloc () 309 Функция: kmemdup () 311 Функция: krealloc () 313 Функция: ksize () 315 Функция: kstrdup () 318 Функция: kstrndup () 319 Функция: kunmap_high () 321 Функция: kzalloc () 321 Функция: memdup_user () 323 Функция: mempool_alloc () 325 Функция: mempool_alloc_pages () 327 Функция: mempool_alloc_slab () 329 Функция: mempool_create () 331 Функция: mempool_create_kzalloc_pool () 333 Функция: mempool_destroy () 334 Функция: mempool_free () 335 Функция: mempool_free_pages () 335 Функция: mempool_free_slab () 336 Функция: mempool_kfree () 336 Функция: mempool_kmalloc () 337 Функция: mempool_kzalloc () 339 Функция: mempool_resize () 341 Функция: nr_free_buffer_pages () 343 Macro: page_address () 345 Макро: page_cache_get () 346 Macro: page_cache_release () 348 Функция: page_zone () 349 Macro: grobe_kernel_address () 352 Функция: grobe_kernel_read () 354 Функция: grove_kernel_write () 355 Функция: vfree () 357 Функция: vma_pages () 358 Функция: vmalloc () 359 Функция: vmalloc_to_page () 361 Функция: vmalloc_to_pfn () 363 Функция: vmalloc_user () 365 Ссылка 366 ГЛАВА 7 МЕХАНИЗМ ГРНЕЛЯ МЕХАНИЗМА Ядра Linux API 368 Функция: __round_jiffies () 368 Функция: __round_jiffies_relative () 369 Функция: __round_jiffies_up () 371 Функция: __round_jiffies_up_relative () 373 Функция: __timeCompare_update () 375 Функция: add_timer () 377 Функция: current_kernel_time () 378 Функция: del_timer () 380 Функция: del_timer_sync () 382 Функция: do_getTimeOfday () 384 Функция: do_settimeOfday () 386 Функция: get_seconds () 388 Функция: getNstimeOfday () 390 Функция: init_timer () 391 Функция: init_timer_deferrable () 393 Функция: init_timer_deferrable_key () 395 Функция: init_timer_key () 398 Функция: init_timer_on_stack () 400 Функция: init_timer_on_stack_key () 402 Функция: mktime () 404 Функция: mod_timer () 406 Функция: mod_timer_pending () 408 Функция: ns_to_timespec () 410 Функция: ns_to_timeval () 412 Функция: round_jiffies () 414 Функция: round_jiffies_relative () 416 Функция: round_jiffies_up () 418 Функция: round_jiffies_up_relative () 420 Функция: set_normalized_timespec () 422 Функция: setup_timer () 424 Функция: setup_timer_key () 426 Функция: setup_timer_on_stack () 428 Функция: setup_timer_on_stack_key () 430 Функция: timecompare_offset () 432 Функция: timeCompare_transform () 435 Функция: timeCompare_update () 436 Функция: timer_pending () 439 Функция: timespec_add_ns () 441 Функция: timespec_compare () 442 Функция: timespec_equal () 444 Функция: timespec_sub () 446 Функция: timespec_to_ns () 448 Функция: timeVal_compare () 450 Функция: timeVal_to_ns () 452 Функция: try_to_del_timer_sync () 453 Ссылки 456 Глава 8 Механизм синхронизации ядра Linux API 457 Функция: atomic_add () 457 Функция: atomic_add_negative () 458 Функция: atomic_add_return () 460 Функция: atomic_add_unless () 461 Macro: atomic_cmpxchg () 463 Функция: atomic_dec () 464 Функция: atomic_dec_and_test () 466 Функция: atomic_inc () 467 Функция: atomic_inc_and_test () 469 Macro: atomic_read () 470 Macro: atomic_set () 471 Функция: atomic_sub () 472 Функция: atomic_sub_and_test () 474 Функция: atomic_sub_return () 475 Функция: down () 477 Функция: Down_Intertible () 479 Функция: down_killable () 481 Функция: down_read () 483 Функция: down_read_trylock () 485 Функция: down_timeout () 487 Функция: down_trylock () 489 Функция: down_write () 491 Функция: down_write_trylock () 492 Функция: Downgrade_Write () 494 Macro: init_rwsem () 496 Макро: read_lock () 498 Функция: read_seqbegin () 499 Функция: read_seqretry () 500 Макро: read_trylock () 503 Макро: read_unlock () 504 Макро: rwlock_init () 505 Функция: sema_init () 508 Макро: seqlock_init () 509 Макро: spin_can_lock () 511 Макро: spin_lock () 513 Макро: spin_lock_bh () 514 Макро: spin_lock_init () 516 Макро: spin_lock_irq () 518 Макро: spin_lock_irqsave () 520 Макро: spin_trylock () 522 Макро: spin_unlock () 525 Макро: spin_unlock_bh () 526 Макро: spin_unlock_irq () 526 Macro: spin_unlock_irqrestore () 527 Макро: spin_unlock_wait () 527 Функция: up () 529 Функция: up_read () 531 Функция: up_write () 532 Макро: write_lock () 532 Функция: write_seqlock () 534 Функция: write_sequnlock () 534 Макро: write_trylock () 535 Макро: write_unlock () 537 Ссылки 537 Глава 9 Linux файловая система ядра API 539 Функция: __mnt_is_readonly () 539 Функция: current_umask () 541 Функция: d_alloc () 542 Функция: d_alloc_root () 544 Функция: d_delete () 547 Функция: d_find_alias () 547 Функция: d_invalidate () 549 Функция: d_move () 550 Функция: d_validate () 551 Функция: dput () 553 Функция: fget () 554 Функция: find_inode_number () 557 Функция: generic_fillattr () 559 Функция: get_empty_filp () 561 Функция: get_fs_type () 563 Функция: get_max_files () 565 Функция: get_super () 566 Функция: get_unused_fd () 569 Функция: haf_submounts () 570 Функция: i_bdev () 572 Функция: iget_locked () 573 Функция: inode_add_bytes () 575 Функция: inode_get_bytes () 576 Функция: inode_needs_sync () 578 Функция: inode_set_bytes () 580 Функция: inode_setattr () 581 Функция: inode_sub_bytes () 584 Функция: Invalidate_inodes () 586 Функция: is_bad_inode () 587 Функция: make_bad_inode () 588 Функция: may_umount () 590 Функция: may_umount_tree () 591 Функция: mnt_pin () 593 Функция: mnt_unpin () 594 Функция: mnt_want_write () 596 Функция: new_inode () 596 Функция: notify_change () 598 Функция: put_unused_fd () 600 Функция: Register_filesystem () 602 Функция: unregister_filesystem () 604 Функция: unshare_fs_struct () 604 Функция: vfs_fstat () 606 Функция: vfs_getattr () 608 Функция: vfs_statfs () 610 Ссылки 613 Глава 10 Linux Device Driver Divance и API управления устройствами 614 Функция: __class_create () 614 Функция: __class_register () 615 Функция: cdev_add () 616 Функция: cdev_alloc () 617 Функция: cdev_del () 619 Функция: cdev_init () 624 Macro: class_create () 628 Функция: class_destroy () 629 Макро: class_register () 631 Функция: class_unregister () 632 Функция: device_add () 637 Функция: device_create () 638 Функция: device_del () 640 Функция: device_destroy () 640 Функция: device_initialize () 646 Функция: device_register () 652 Функция: device_rename () 652 Функция: device_unregister () 657 Функция: get_device () 663 Функция: put_device () 663 Функция: Register_chrdev () 667 Функция: Register_keyboard_notifier () 668 Функция: unregister_chrdev () 669 Функция: unregister_keyboard_notifier () 675 Описание некоторых связанных функций 679 Ссылки 679 Приложение Linux ядра API Quick Search Table 680 |
![]() |
| Вступив в 21 -й век, ИТ -технология движется вперед с беспрецедентной скоростью.Как операционная система с открытым исходным кодом, Linux продолжает расти и улучшаться с совместными усилиями многих энтузиастов.Поскольку различные компоненты и системные распределения, разработанные программой GNU, могут работать на ядре Linux, все ядро Linux соответствует широкой публичной лицензии (GNU), делая Linux на ПК, серверах и разработке встроенных систем, а другие поля широко использовались ПолемВ долгосрочной разработке ядра Linux редактор обнаружил, что в настоящее время мало книг вводит APIS ядра.В настоящее время книги по программированию и разработке ядра Linux можно разделить на три категории: первая категория - анализ ядра Linux Категория-это программирование Linux, которая в основном фокусируется на программировании на уровне пользователя, обычно включающего API пользователя;Для программирования и разработки с использованием ядра Linux вам необходимо иметь всеобъемлющее понимание API ядра.Написание этой книги началось в июне 2009 года. Все примеры проверки API ядра основаны на последней версии исходного кода Linux ядра 2.6.30, когда ядро 2.6.30 было только что выпущено.После почти 15 месяцев анализа исходного кода, практики программирования и проверки экземпляров, обычно использованные API -интерфейсы ядра были систематически обобщены, и были написаны типичные программы проверки, которые достигли единства теоретического анализа и практического программирования.Модули API ядра, проанализированные в этой книге, включают в себя: API механизма модуля ядра, API ядра управления процессом, API -API планирования процесса, API механизма прерывания, API ядра управления памятью, API времени ядра, механизм синхронизации ядра, API файловой системы API API и API файловой системы API API и API файловой системы API и API API FILE SYSTEM, ядро API API и ядро API API и ядро API API и ядро API ядра API и ядро API API и ядро API API и ядро API API и ядро API API и API файловой системы API и API API FILE SYSTEM. Устройства драйвера и управления устройствами API.Во время примера процесса написания, благодаря Чэну Сяо за участие в проверке некоторых случаев в главе 8, Ван Вей, Ван Якун и Ю Лонг, команда проекта с открытым исходным кодом приняла участие в обсуждении проекта и проанализировала примеры.Кроме того, в процессе написания мы выслушали мнения и предложения коллег и экспертов -сверстников и проконсультировались с большим количеством домашней и иностранной литературы, особенно энтузиастов Linux, которые активны в сообществе с открытым исходным кодом и выразили свою благодарность им. ПолемИз -за быстрой скорости обновления Linux и ограниченной широты и глубины знаний редактора, пожалуйста, критикуйте и исправляйте любые ошибки и неуместные аспекты в книге.По вопросам в книге, читатели могут отправить их по электронной почте: openlinux2100@gmail.com, чтобы своевременно общаться с автором, чтобы их можно было исправить и улучшить во время перепечатки.Редактор 1 октября 2010 г. в Даляне |

Книги, продаваемые в этом магазине, являются настоящими книгами



